Java EE 6示例– Galleria第2部分

您可能在最后一篇Java EE 6 Galleria示例帖子中關注了我。 第一個是基本介紹。 第二個是關于在最新的GlassFish上運行它。 有人提到RedHat,我們應該研究將這個示例從GlassFish中移除。 很好;)感謝您的好主意。 這正是我們今天要做的。 我將把Galleria示例引入最新的WebLogic 12c。

制備

讓自己有一些配置的心情。 您已經安裝了最新的NetBeans 7.1 ,并且將在一秒鐘內下載WebLogic 12c ZIP發行版。 下載wls1211_dev.zip后,將其放到所選位置并解壓縮。 從現在開始,我們將這個文件夾稱為%MW_HOME%文件夾。 打開命令行并在其中設置%JAVA_HOME%,%JAVA_VENDOR%和%MW_HOME%變量:

set JAVA_HOME=D:\jdk1.7.0_04
set MW_HOME=D:\temp\wls12zip
set JAVA_VENDOR=Sun

完成此步驟后,最后一步是在MW_HOME目錄中運行安裝配置腳本configure.cmd。 這是一次性的事情。

設置您的WebLogic域

接下來,我們需要一個WebLogic域。 打開一個新的命令行提示符。 通過運行%MW_HOME%\ wlserver \ server \ bin \ setWLSEnv.cmd腳本在當前Shell中設置環境。 執行%MW_HOME%\ wlserver \ common \ bin \ config.cmd,然后按照向導在您選擇的文件夾(例如D:\ temp \ test-domain)中創建一個名為test-domain的基本WebLogic Server域。 輸入您選擇的用戶名和密碼(例如system / system1),然后單擊向導,直到您在其下的“完成”按鈕為止。 WebLogic需要Derby客戶端jar文件才能配置和使用數據庫。 將derbyclient-10.8.2.2.jar從m2存儲庫復制到test-domain \ lib文件夾。 現在,通過運行新創建的域目錄中的startWebLogic.cmd,手動啟動新創建的域。 導航到http:// localhost:7001 / console并使用上面的憑據登錄,以驗證一切是否正常運行。 導航到“服務>數據源”,然后從表上方選擇“新建”按鈕。 選擇一個“通用數據源”并輸入您選擇的名稱(例如GalleriaPool),然后輸入jdbc / galleriaDS作為JNDI名稱。 選擇Derby作為數據庫類型,然后單擊“下一步”。 選擇Derby的驅動程序(類型4),然后單擊“下一步”和“下一步”,然后輸入連接屬性(數據庫:GALLERIATEST,主機:localhost。用戶名和密碼:APP”,然后單擊“下一步”。如果需要,可以單擊單擊頂部的“測試配置”按鈕,并確保所有設置均以正確的方式進行。

接下來是最棘手的部分。 我們需要像為GlassFish配置的那樣的JDBC領域。 這里的第一個區別是,我們實際上并沒有創建一個新的領域,而是向可用的領域添加了一種身份驗證機制。 WebLogic有一個令人討厭的限制。 您可以配置任意多個安全領域,但在給定時間只能激活一個。 這讓我停了一會兒,直到我從Michel Schildmeijer得到了小費(謝謝,順便說一句!)。 導航到“安全領域”,然后從表中選擇“ myrealm”。 切換到提供程序選項卡。 選擇身份驗證提供者表格上方的“新建”。 輸入“ GalleriaAuthenticator”作為名稱,然后從下拉框中選擇“ SQLAuthenticator”作為類型。 單擊確定。 選擇GalleriaAuthenticator并設置控制標志:SUFFICIENT并保存。 之后,切換到“提供商特定”選項卡。 輸入以下內容:

Data Source Name: GalleriaPool
Password Style Retained: unchecked
Password Algorithm: SHA-512
Password Style: SALTEDHASHED
SQL Get Users Password: SELECT PASSWORD FROM USERS WHERE USERID = ?
SQL Set User Password: UPDATE USERS SET PASSWORD = ? WHERE USERID = ?
SQL User Exists: SELECT USERID FROM USERS WHERE USERID = ?
SQL List Users: SELECT USERID FROM USERS WHERE USERID LIKE ?
SQL Create User: INSERT INTO USERS VALUES ( ? , ? )
SQL Remove User: DELETE FROM USERS WHERE USERID = ?
SQL List Groups: SELECT GROUPID FROM GROUPS WHERE GROUPID LIKE ?
SQL Group Exists: SELECT GROUPID  FROM GROUPS WHERE GROUPID  = ?
SQL Create Group: INSERT INTO GROUPS VALUES ( ? )
SQL Remove Group: DELETE FROM GROUPS WHERE GROUPID  = ?
SQL Is Member: SELECT USERID FROM USERS_GROUPS WHERE GROUPID  = ? AND USERID = ?
SQL List Member Groups: SELECT GROUPID  FROM USERS_GROUPS WHERE USERID  = ?
SQL List Group Members: SELECT USERID FROM USERS_GROUPS WHERE GROUPID = ? AND USERID LIKE ?
SQL Remove Group Memberships: DELETE FROM USERS_GROUPS WHERE GROUPID = ? OR GROUPID = ?
SQL Add Member To Group: INSERT INTO USERS_GROUPS VALUES( ?, ?)
SQL Remove Member From Group: DELETE FROM USERS_GROUPS WHERE GROUPID = ? AND USERID = ?
SQL Remove Group Member: DELETE FROM USERS_GROUPS WHERE GROUPID = ?
Descriptions Supported: unchecked

保存您的更改。 然后返回“提供商”標簽。 單擊“重新排序”按鈕,然后將GalleriaAuthenticator推到列表頂部。 完成后單擊“確定”,然后停止您的WebLogic實例。 您可以隨時重新啟動它。

配置您的項目

Java EE是可移植的。 對。 而且,您應該能夠在不對WebLogic 12c進行任何更改的情況下運行相同的部署。 那是理論。 實際上,您將不得不接觸部署。 因為WebLogic的Hibernate存在一些問題。 而且,與GlassFish相比,部署方面的問題要復雜得多。 首先,您必須創建一個“ galleria-ear \ src \ main \ application \ META-INF”文件夾。 將空白的weblogic-application.xml放入其中,并在其中放入以下代碼:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.4/weblogic-application.xsd"><prefer-application-packages><package-name>antlr.*</package-name></prefer-application-packages>
</weblogic-application>

這告訴WebLogic與服務器中已經存在的庫相比,更喜歡應用程序打包的庫。 讓我們繼續。 我們需要將Hibernate依賴項添加到耳朵。 使用GlassFish,我們跳過了這一步,因為我們在服務器上安裝了Hibernate軟件包。 開始了。 打開galleria-ear pom.xml并將以下內容添加到“依賴項”部分:

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.2.0.Final</version></dependency><dependency><groupId>org.jboss.logging</groupId><artifactId>jboss-logging</artifactId><version>3.1.0.CR2</version></dependency>

您還需要查看maven-ear-plugin并將以下內容添加到<configuration>:

<defaultLibBundleDir>lib</defaultLibBundleDir>

如果已經存在,請刪除commons編解碼器jarModule。 它沒有問題,但已打包到ear / lib文件夾中,因此您可以跳過它。

接下來,導航到galleria-jsf項目并打開web.xml。 <login-config>不完整,應如下所示:

<login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/Login.xhtml</form-login-page><form-error-page>/Login.xhtml</form-error-page></form-login-config></login-config>
<security-role><description>All registered Users belong to this Group</description><role-name>RegisteredUsers</role-name></security-role>

您還需要定義可能的角色,否則WebLogic安全性內容將開始抱怨。

將一個空白的weblogic.xml添加到galleria-jsf \ src \ main \ webapp \ WEB-INF文件夾中,并添加以下幾行:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"><security-role-assignment><role-name>RegisteredUsers</role-name><principal-name>RegisteredUsers</principal-name></security-role-assignment> <session-descriptor><timeout-secs>3600</timeout-secs><invalidation-interval-secs>60</invalidation-interval-secs><cookie-name>GalleriaCookie</cookie-name><cookie-max-age-secs>-1</cookie-max-age-secs><url-rewriting-enabled>false</url-rewriting-enabled></session-descriptor>
</weblogic-web-app>

我們在這里將web.xml角色映射到WebLogic角色。 您可能已經跳過了這個,但是我喜歡這種方式,所以您不會感到困惑。 session-descriptor元素負責JSESSION cookie名稱。 如果您不進行更改,則會遇到登錄用戶登錄管理控制臺的麻煩。
繼續執行galleria-ejb項目。 在“ galleria-ejb \ src \ main \ resources \ META-INF”文件夾中創建一個空白的weblogic-ejb-jar.xml。 將以下代碼放入其中:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"><security-role-assignment><role-name>RegisteredUsers</role-name><principal-name>RegisteredUsers</principal-name></security-role-assignment>
</weblogic-ejb-jar>

與web.xml / weblogic.xml相比,這還告訴WebLogic如何將ejb-jar.xml安全角色映射到WebLogic角色。 好的,打開persistence.xml并添加以下行:

<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /><property name="hibernate.transaction.jta.platform"value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />

第一個明確選擇用于休眠的Derby方言。 第二個告訴Hibernate在何處以及如何查找事務。 全做完了。 現在,您應該能夠再次構建項目并進行部署。 使用管理控制臺或NetBeans進行部署。 感謝您抽出寶貴時間關注這篇冗長的帖子。 希望對您有所幫助!

是否想知道啟動和運行單元和集成測試所需的時間? 繼續閱讀!

是時候繼續Vineet的Java EE 6 Galleria示例了。 經過一番介紹之后 ,GlassFish和WebLogic 12c部署的基本入門指南終于可以開始進行測試了。 由于兩個原因,我在前面的文章中跳過了這一部分。 第一個顯然是我想寫一篇單獨的文章。 第二個是需要做的工作才能在最新的GlassFish 3.1.2上啟動并運行它。 Vineet和團隊在幾天前發布Arquillian GlassFish Remote Container CR3方面做得很出色,現在還涵蓋了GlassFish 3.1.2。 是時候開始測試Galleria示例了。

你要測試什么

構建Galleria的目的是通過使用JUnit 4編寫的單元測試和集成測試來實現全面的測試覆蓋。EJB和域模型的單元測試和集成測試依賴于EJB 3.1容器API。 表示層的集成測試依賴于Arquillian項目及其Drone擴展(用于執行Selenium測試)。
請確保更新到Galleria項目的最新資源,因為Vineet已將Arquillian GlassFish容器更新為CR3,并將Selenium內容更新為支持最新的FireFox瀏覽器。

單元測試域層

域層的測試分為五類。 前三個(Bean驗證測試,相互注冊驗證測試,構造函數測試,等于和哈希碼方法)涵蓋了幾乎所有基于JPA的應用程序的基本需求。 如果您沿著galleria-ejb \ src \ test源代碼漫步,則可以在info.galleria.domain包中看到它們。 每個域對象都包含一個套件類,該套件類包括所有三種單元測試。

讓我們從查看Bean驗證測試開始。 與JavaBeans屬性中的getter和setter關聯的行為非常容易驗證。 所有需要做的就是首先調用setter,然后調用getter,并驗證getter返回的實例是否等于傳遞給setter的實例。 該項目使用
為此,可以使用BeanVerifier類(在galleria-ejb模塊的src / tests / java根目錄下)。 AlbumBeanVerifier測試只是一個參數化測試,它測試每個屬性。 在這種情況下,唯一的例外是coverPhoto屬性,該屬性具有簡單的JavaBean模式之外的特殊行為。

列表的下一個是對構造函數,equals和hashcode方法的測試。 僅通過創建類的新實例,同時聲明將由構造函數設置的屬性的有效性來測試域實體的構造函數。 equals和hashcode方法通過使用EqualsVerifier項目中的EqualsVerifier類進行驗證。

最基本的測試的最后一類是相互注冊 (PDF)驗證測試。 您只想檢查對實體之間關系的修改是否實際上導致對父屬性和子屬性的更改。 有關實現的更多詳細信息,請參見綜合Wiki頁面 。 所有這些都在單元測試階段執行,并被** / * Suite.java類覆蓋。

除了基本測試,您還會發現針對基本測試模型不足或不適合的特定情況編寫的一次性測試。 在這種情況下,一次性測試將通過手寫斷言來驗證這種行為。 您可以在同一包的** / * Tests.java類中找到它們。

域層測試以JPA存儲庫測試結束。 * RepositoryTest.java類中的每個類都會測試已處理域對象的CRUD行為。 通用的AbstractRepositoryTest會處理測試數據,并在每次測試運行后重置數據庫。 數據庫創建本身由maven-dbdeploy-plugin處理。 查看pom.xml,您可以看到它綁定到兩個Maven生命周期階段(流程測試資源和集成前測試),以確保兩次被調用。 第一次是在單元測試之前,第二次是在集成測試之前(請在下面進行比較)。

所有這些單元測試都是通過surefire執行的。 如果您在galleria-ejb項目上發布了mvn測試,則可以看到總共138個測試通過了。 這是四個** / * Suite測試,四個** / * RepositoryTest和兩個附加測試。 如果您簡要查看控制臺輸出,就會發現這一切都是在Java SE環境中發生的。 到目前為止,尚未進行任何容器測試。

集成測試域層

因此,這實際上僅涵蓋了每個人都應該做并且可能知道的基礎知識。 進行集成測試是另一回事。 這是通過** / * IntegrationSuite測試完成的。 該名稱故意不使用默認命名約定,以防止它們在Maven的單元測試階段中運行。 要進入Maven的集成測試階段,Galleria示例將使用Maven故障安全插件 。 您可以在info.galleria.service.ejb包中找到集成測試套件。 AbstractIntegrationTest注意處理單元測試的測試數據(與AbstractRepositoryTest相當)。 該套件為每個域對象都包含一個* ServiceIntegrationTest。 您可以遍歷每個* IntegrationTest中的單個測試,并了解這里發生的事情。 ServicesIntegrationSuite通過使用AbstractIntegrationTest.startup();來啟動和停止EJBContainer。 這種方法比較不明顯且簡單:

logger.info("Starting the embedded container.");
Map<String, Object> props = new HashMap<String, Object>();
props.put("org.glassfish.ejb.embedded.glassfish.installation.root","./glassfish-integrationtest-install/glassfish");
container = EJBContainer.createEJBContainer(props);
context = container.getContext();
datasource = (DataSource) context.lookup("jdbc/galleriaDS");

這里最重要的一點是,可嵌入的EJBContainer是通過現有的GlassFish域配置的,該域可以直接在galleria-ejb \ glassfish-integrationtest-install文件夾中找到。 如果查看glassfish \ domains \ domain1 \ config \ domain.xml,可以看到,所有配置都已經為您完成。 但是,部署來自何處? 這很容易回答。 默認情況下,可嵌入的EJBContainer在您的類路徑中搜索ejb-jar jarfiles或文件夾,然后將其部署。 如果要從EJBContainer中看到更多詳細輸出,則必須在src / test / resources中提供一個customlogging.properties文件,并在其中添加一些簡單的行:

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level=FINEST
#add some more packages if you need them
info.galleria.service.ejb.level=FINE

將以下內容添加到pom.xml的maven-failsafe-plugin配置部分:

<systemPropertyVariables>
<java.util.logging.config.file>${basedir}/src/test/resources/customlogging.
properties</java.util.logging.config.file>
</systemPropertyVariables>

集成測試應成功完成,并且maven應打印與以下內容類似的內容:

Tests run: 49, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 61.726 sec

注意,集成測試花費的時間比正常的單元測試長得多。 這一點也不奇怪,您應該確保僅在需要時才執行它們,以免影響開發進度。

集成測試表示層

域層覆蓋了測試。 缺少的是表示層。 您可以在galleria-jsf項目中找到表示層測試。 首先檢查pom.xml。 您可以在這里找到幾個新的依賴項。 即Arquillian,Selenium和Drone。

首先再次進行一些配置。 向下滾動到配置文件部分,您可以看到一個集成測試配置文件,該配置文件使用了maven-glassfish-plugin并控制了一個配置有幾個屬性的容器。 將定義添加到pom頂部的properties部分:

<galleria.glassfish.testDomain.user>admin</galleria.glassfish.
testDomain.user>
<galleria.glassfish.testDomain.passwordFile>D:/glassfish-3.1.2-b22/glassfish3/glassfish/domains/
test-domain/config/local-password</galleria.glassfish.testDomain.passwordFile>
<galleria.glassfish.testDomain.glassfishDirectory>D:/glassfish-3.1.2-b22/glassfish3/glassfish/</galleria.glassfish.testDomain.glassfishDirectory>
<galleria.glassfish.testDomain.domainName>test-domain</galleria.glassfish.testDomain.domainName>
<galleria.glassfish.testDomain.adminPort>10048</galleria.glassfish.testDomain.adminPort>
<galleria.glassfish.testDomain.httpPort>10080</galleria.glassfish.testDomain.httpPort>
<galleria.glassfish.testDomain.httpsPort>10081</galleria.glassfish.testDomain.httpsPort>

您可以按照第2部分中所述從galleria-ejb項目的開發配置文件中復制它。 您還應該已經擁有該域。 接下來是maven-surefire-plugin,您可以看到它遵循了galleria-ejb項目相同的約定。 但是查看測試類,您會發現這里沒有單個單元測試。 因此,您可以直接轉到處理集成測試的maven-failsafe-plugin。 只有一個AllPagesIntegrationTest涵蓋了完整的測試。 讓我們去那里。

這是一個Arquillian Testcase,它作為客戶端針對遠程實例執行。 除了部署的定義(@Deployment),您還會再次看到幾個setUp和tearDown方法,它們可以進行一些初始化和銷毀??。 一件事必須單獨處理。 您還會在其中看到一個writeCoverageData()方法,該方法顯然連接到某種Socket并從中讀取數據。 這是JaCoCo (Java代碼覆蓋率庫)鉤子,可以產生測試的覆蓋率數據集。 要進行此工作,您將必須下載該軟件包并將其解壓縮到您選擇的位置。 接下來轉到GlassFish test-domain \ config \ domain.xml并將其打開。 找到服務器配置– java-config并在其中添加以下內容:

<jvm-options>-javaagent:D:\path\to\jacoco-0.5.6.201201232323\lib\jacocoagent.jar=output=tcpserver</jvm-options>

這將啟用GlassFish的覆蓋代理。 現在完成所有配置。 返回到NetBeans,選擇集成測試配置文件(在NetBeans中,您可以通過從圖標區域中的小錘子旁邊的下拉框中選擇條目,或者使用-Pintegration-test作為maven命令行開關來執行此操作。輸出告訴您,GlassFish域已啟動,并且info.galleria.view.AllPagesIntegrationTest正在運行,請注意,在此運行期間將彈出FireFox實例,而Arquillian Drone擴展正在驅動您的Selenium測試。

如果您以前從未看過,以這種方式遠程控制的瀏覽器看起來很奇怪。 如果一切正常,您現在應該在控制臺輸出中看到以下內容:

Tests run: 30, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 138.014 sec

如果您在瀏覽器中使用的語言環境不是en,則測試可能會完全失敗。 因此,還需要配置Drone以支持它 。 Drone允許您通過arquillian.xml指定Firefox配置文件。 您可以創建一個Firefox配置文件,該配置文件配置為發送以en / en-US作為值的接受語言標頭。

要創建新的配置文件,請使用以下命令啟動Firefox配置文件管理器(您可能需要關閉所有正在運行的實例):firefox -profilemanager(在Windows上,您需要執行命令“ d:\ complete \ path \ to \ firefox.exe” “ -profilemanager)在cmd外殼中。 記住創建此配置文件的光盤上的位置–以后將需要它。 要配置創建的配置文件,在Firefox中,轉到選項(菜單)->內容(選項卡)->語言(字段集)->選擇添加英語(并將其移至頂部,作為首選語言)。 現在瀏覽Galleria-jsf \ src \ test \ resources \ arquillian.xml,然后可以添加一個屬性:

<extension qualifier="webdriver">
<property name="implementationClass">org.openqa.selenium.firefox.FirefoxDriver</property>
<property name="firefoxProfile">location of the Firefox profile for English</property>
</extension>

現在全部完成。 您現在應該可以運行完整的清理和構建過程,而沒有任何測試失敗。 一個大的“綠色酒吧” :)

參考: Java EE 6示例–在WebLogic 12上運行Galleria –第3部分 , Java EE 6示例–測試Galleria –第4部分,來自Markus Eisele博客上的JCG合作伙伴 Markus Eisele。


翻譯自: https://www.javacodegeeks.com/2012/04/java-ee-6-example-galleria-part-2.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373188.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373188.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373188.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

suggest

http://lovebeyond.iteye.com/blog/941633轉載于:https://www.cnblogs.com/sunxun/p/5421251.html

linux的tar命令壓縮26g文件,linux如何使用tar命令大包壓縮進文件

linux如何使用tar命令大包壓縮進文件發布時間&#xff1a;2020-05-29 12:30:14來源&#xff1a;億速云閱讀&#xff1a;206作者&#xff1a;Leah本篇文章主要介紹linux中使用tar命令大包壓縮進文件的方法。內容比較詳細&#xff0c;文章包含了命令的使用示例&#xff0c;希望大…

與reCAPTCHA的Spring集成

有時我們只需要CAPTCHA &#xff0c;這是一個可悲的事實。 今天&#xff0c;我們將學習如何與reCAPTCHA集成。 因為主題本身并不是特別有趣和高級&#xff0c;所以我們將通過使用Spring Integration處理低級細節來過度設計&#xff08;&#xff1f;&#xff09;。 Google決定使…

《機器學習基石》---感知機算法

1 推導感知機模型 基本思想是&#xff0c;把特征的線性加權值作為一個分數&#xff0c;根據這個分數與一個門限值的關系來進行分類&#xff1a; 我們加一個特征x0等于1&#xff0c;門限值就可以放到w里面去&#xff0c;得到更簡單的形式&#xff1a; 這就是感知機模型&#xff…

未知錯誤:1000正在終止線程

若在try{} catch{}的catch 塊中加入 catch (Exception ex) { Response.Write(ex.Message); Response.End(); } 則捕獲異常后&#xff0c;提示未知錯誤&#xff1a;1000正在終止線程 轉載于:https://www.cnblogs.com/dennysong/p/5422567.…

分叉并加入Java 7 – JSR 166并發實用程序

Java 7最有趣的改進之一是對并發的更好支持。 使用JSR 166并發實用程序&#xff0c;我們可以對并發進行一些非常有用的改進。 在我看來&#xff0c;fork-join庫在軟件工程中具有很高的實際應用潛力。 Fork and join為算法提供了非常簡單的編程模型&#xff0c;可以將其實現為遞…

linux內核源碼代碼量,Linux內核源代碼數量已經超過1000萬行

Linux版本2.6.27更新后,人們發現,這一內核的源代碼數量已經超過了1000萬行.當然,這些行數僅僅是計算機統計出來的行數,包括空白行,為了代碼的可讀性增加的注釋等,當然Linux和所有的長期項目一樣,隨著時間的推移,舊的代碼 會被丟棄和更換,但總體規模來說,Linux的內核在不斷增強,…

Python之路【第八篇】:堡壘機實例以及數據庫操作

Python之路【第八篇】&#xff1a;堡壘機實例以及數據庫操作 堡壘機前戲 開發堡壘機之前&#xff0c;先來學習Python的paramiko模塊&#xff0c;該模塊機遇SSH用于連接遠程服務器并執行相關操作 SSHClient 用于連接遠程服務器并執行基本命令 基于用戶名密碼連接&#xff1a; 12…

關于typedef的使用方法

在計算機編程語言中用來為復雜的聲明定義簡單的別名。與宏定義有些差異。它本身是一種存儲類的keyword&#xff0c;與auto、extern、mutable、static、register等keyword不能出如今同一個表達式中。typedef聲明&#xff0c;簡稱typedef&#xff0c;為現有類型創建一個新的名字&…

ADF BC:創建綁定到業務組件的UI表

在此示例中&#xff0c;我們將展示如何創建綁定到業務組件的簡單UI表&#xff08;af&#xff1a;table&#xff09;。 我再次嘗試使用簡單的標準在網上進行搜索&#xff1a; “如何創建綁定到業務組件ADF 11g的af&#xff1a;table” 我必須承認我沒有得到我想要的答案。 信息…

linux驅動程序混合架構,嵌入式系統最小驅動框架(類似linux驅動程序架構)(示例代碼)...

2010年就打算把linux里的驅動框架核心代碼摳出來的&#xff0c;但是由于懶而且linux代碼量大&#xff0c;一直下不了手。最近調試的intel curie里驅動架構也類似linux&#xff0c;代碼就少多了&#xff0c;由于工作需要不得不梳理一下這一堆代碼&#xff0c;今天花了一下午&…

MyBaits 錯誤分析

錯誤原因&#xff1a;在DAO的映射文件中&#xff0c;在映射標簽中的type類型寫成DAO類了&#xff0c;應該寫成javaBean轉載于:https://www.cnblogs.com/shuaiandjun/p/5428847.html

超越JUnit –測試框架的替代方案

JUnit是事實上的Java單元測試框架&#xff0c;但是可能有一些新的&#xff08;不是那么新的&#xff09;框架可以用于Web開發。 在采用之前可能要問自己的問題&#xff1a; 它們是否快速&#xff0c;容易開發&#xff0c;因此成本低廉&#xff1f; 他們運行快并因此鼓勵采用嗎…

tensorflow mnist read_data_sets fails

下載處理mnist數據時出現如下錯誤 VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future 解決方法&#xff1a; 在input_data.py文件中return numpy.frombuffer(bytestream.read(4), dtypedt) 后添加[0] retur…

斑馬打印機linux驅動安裝教程,linux-Zebra軟件包的基本安裝與配置

Zebra是一個路由軟件包&#xff0c;提供基于TCP/IP路由服務&#xff0c;支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4,和 BGP-4等眾多路由協議。Zebra還支持BGP特性路由反射器(Route Reflector)。除了傳統的 IPv4路由協議&#xff0c;Zebra也支持IPv6路由協議。如果運行的…

iOS 改變App狀態欄顏色為白色

默認狀態欄為黑色&#xff0c;對于某些App不是很美觀&#xff0c;變成白色很簡單&#xff0c;只需要兩個步驟。 1.在Info.plist中添加新項目&#xff0c;View controller-based status bar appearance&#xff0c;Boolean值為No. 2.在AppDelegate的- (BOOL)application:(UIAppl…

Java 7對抑制異常的支持

在JDK 7中 &#xff0c;向Throwable類&#xff08; Exception和Error類的父類&#xff09;添加了一個新的構造函數和兩個新方法。 添加了新的構造函數和兩個新方法以支持“抑制的異常”&#xff08;不要與吞咽或忽略異常的不良做法相混淆&#xff09;。 在本文中&#xff0c;我…

linux 如何做共享磁盤陣列,在Linux上玩轉磁盤陣列分享

大部分用戶都會擔心&#xff0c;萬一硬盤發生故障&#xff0c;一、使用磁盤陣列可以帶來哪些好處?在具體如何配置磁盤陣列之前&#xff0c;筆者要先給大家介紹一下利用磁盤陣列的好處。先給大家一點動力&#xff0c;讓大家能夠繼續看下面的內容。第一個好處是磁盤陣列可以提高…

my-innodb-heavy-4g.cnf

my-innodb-heavy-4g.cnf轉載于:https://www.cnblogs.com/xiluhua/p/6231834.html

易于使用的單位和集成代碼

此示例說明如何使用Maven和Sonar生成單元測試和集成測試的覆蓋率。 它使用非常簡單的技術&#xff0c;只需10-15分鐘即可在任何現有的Maven構建中運行。 它可用于單元&#xff0c;集成&#xff0c;ATDD或任何其他類型的測試套件。 覆蓋率結果顯示在Sonar中。 有什么事嗎&#x…