Java EE 6示例– Galleria

您是否一直想知道在哪里可以找到使用Java EE 6構建的良好端到端示例? 我有。 您在網上找到的大多數東西都是非常基礎的,不能解決現實世界中的問題。 Java EE 6教程就是這樣。 所有其他內容,例如Adam Bien所發表的大多數內容,都是范圍非常狹窄的示例,也并沒有為您提供更完整的解決方案。

因此,我很高興偶然發現Vineet Reynolds做的一個更復雜的例子。 它被稱為“ Java EE 6 Galleria ”,您可以從bitbucket下載源代碼。 Vineet是為Arquillian項目做出貢獻的軟件工程師。 更具體地說,他貢獻了一些錯誤修復程序,并處理了Arquillian Core的一些功能請求,以及Arquillian的GlassFish,WebLogic和Tomcat集成。 這是我第一次遇到他的名字的地方。 跟著Arquillian的家伙和他走近一點,直接把我帶到了這個例子。 非常感謝Vineet在我初次嘗試使其開始運行時所提供的幫助。 如果您喜歡在Twitter @VineetReynolds上關注他。

這里是有關它的背景的簡要說明,也是關于在不同設置下運行它的一系列說明,并向您介紹了一些其他細節。 這是基本介紹。

關于回廊

該項目的高級描述如下:Java EE 6-Galleria是一個演示應用程序,演示了使用域驅動設計的Java EE項目中JSF 2.0和JPA 2.0的使用。 它被編寫為Java EE 6中域驅動設計的樣板。應用程序的域模型不是貧乏的,它由JPA實體組成。 然后,在用作應用程序層的會話EJB中使用這些實體。 使用Mojarra和PrimeFaces在表示層中使用JSF facelets。 該項目旨在通過使用JUnit 4中編寫的單元測試和集成測試來實現全面覆蓋。EJB和域模型的單元測試和集成測試依賴于EJB 3.1容器API。 表示層的集成測試依賴于Arquillian項目及其Drone擴展(用于執行Selenium測試)。

使用Java EE 6的域驅動設計

在Java EE 6中,將DDD作為一種體系結構方法是可行的,這主要是由于EJB 3.x中所做的更改以及JPA的引入。 EJB 3.x和JPA規范中所做的改進使得可以在Java EE 6中使用DDD對域和應用程序層進行建模。 這里的基本思想是設計一個應用程序,以確保將持久性服務注入到應用程序層中,并用于在應用程序層建立的事務上下文內訪問/持久化實體。

域層

該應用程序現在包含四個域實體-用戶,組,相冊和照片,它們與邏輯數據模型中的JPA實體相同。

儲存庫層

在邏輯數據模型的頂部,您可以找到四個存儲庫-UserRepository,GroupRepository,AlbumRepository和PhotoRepository。 每個用于四個域實體之一。 即使DDD要求您僅具有聚合根目錄的存儲庫,而不是所有域實體的存儲庫,其設計方式仍允許應用程序層訪問“相冊”和“照片”域實體,而不必通過UserRepository導航“相冊”和“照片”。 存儲庫是具有無接口視圖的無狀態會話Bean,并使用Adam Bien發布的通用CRUD服務模式構建。

應用層

應用程序層公開表示層要使用的服務。 它還負責事務管理,同時還充當下一層的故障屏障。 應用程序層與域存儲庫和域對象進行協調,以實現公開服務的預期目標。 在某種程度上,該層等效于傳統應用程序中的服務層。 應用程序層通過UserService,GroupService,AlbumService和PhotoService接口公開其服務,并且還負責在協調域層中的對象之間的動作之前,從上述層驗證提供的域對象。 這是通過域對象上的JSR-303約束完成的。

看起來如何

這就是如果在最新的GlassFish 3.1.2上運行該示例時的樣子。 想自己設置嗎? 等待下一篇文章,或者自己嘗試一下;)

下面,我們將直接使用最新的GlassFish 3.1.2,Hibernate和Derby來設置示例。

制備

讓自己有一些配置的心情。 Grep最新的NetBeans 7.1 (Java EE版本已經包含所需的GlassFish 3.1.2 )并進行安裝。 我還假設您在某個地方有一個不錯的Java SDK 7 (也可以完成6個工作)。 根據開發策略,您還需要Mercurial Client和Maven。 至少Maven也包含在NetBeans中,所以…我的意思是…為什么使您的生活變得比現在更艱難? ;)

環境環境

關于環境的更多一些話。 此示例是為支持不同的環境而設置的。 從簡單的“開發”環境開始,您還需要配置“測試”以及最后但并非最不重要的“生產”環境。 所有不同的環境都由Maven配置文件處理,因此您可能必須在接下來的幾分鐘內進行一些配置。

創建數據庫實例

首先要做的就是確定將所有東西放在哪里。 這些示例使用了開箱即用的derby,因此您應該安裝Java DB(JDK的一部分)或使用預先配置了NetBeans的GlassFish derby實例。 讓我們在這里變得更加困難,并假設我們使用JDK隨附的Java DB安裝。 繼續,打開CMD提示符并導航到%JAVA_HOME%文件夾,然后進一步向下db文件夾/ bin。 執行“ startNetWorkServer”腳本,并注意要啟動的derby實例。 現在打開另一個CMD提示符,同時導航到db / bin文件夾并執行“ ij”腳本。 這應該帶有提示“ ij>”。 現在輸入以下連接字符串:

connect 'jdbc:derby://localhost:1527/GALLERIATEST;create=true';

此命令將您連接到derby實例,并創建GALLERIATEST數據庫(如果尚不存在)。 Galleria示例使用了一個名為dbdeploy的方便的小工具作為數據庫更改管理工具。 它使您可以對物理數據庫模型進行增量更新,并在變更日志表中對其進行跟蹤。 (有關更多信息,請參閱本系列后面的內容)。 您必須創建更改日志表:

CREATE TABLE changelog (change_number DECIMAL(22,0) NOT NULL,complete_dt TIMESTAMP NOT NULL,applied_by VARCHAR(100) NOT NULL,description VARCHAR(500) NOT NULL
);ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY KEY (change_number);

您只需在connect語句中更改數據庫名稱,即可針對所需的任何其他實例(生產等)重做這些步驟。 并且不要忘記在每個實例中創建更改日志表。

如果您不喜歡這種方法。 啟動NetBeans,切換到“服務”選項卡,選擇“新建連接”,并添加一個新的Java DB網絡連接,其主機為:localhost,端口為:1527,數據庫為:GALLERIATEST; create = true。 將用戶名和密碼都設置為“ APP”,然后單擊“測試連接”。 選擇APP作為新數據庫的架構。 您完成了!

創建GlassFish域

我們正在從最新的GlassFish運行此程序。 現在要做的第一件事是創建一個新域。 導航到您的GlassFish安裝目錄并轉到glassfish3 / bin并執行以下命令:

asadmin create-domain --portbase 10000 --nopassword test-domain

這會為您創建一個新的測試域。 現在,導航到該域文件夾(“ glassfish3 / glassfish / domains / test-domain”)并打開config / domain.xml文件。

現在,我們將創建的derby數據庫作為連接池添加到您新創建的GlassFish域。 導航到<resources>元素,并在最后一個</ jdbc-connection-pool>元素下面添加以下連接池和jdbc-resource:

<jdbc-connection-pool driver-classname="" datasource-classname="org.apache.derby.jdbc.ClientDataSource40" res-type="javax.sql.DataSource" description="" name="GalleriaPool" ping="true"><property name="User" value="APP"></property><property name="DatabaseName" value="GALLERIATEST"></property><property name="RetrieveMessageText" value="true"></property><property name="Password" value="APP"></property><property name="ServerName" value="localhost"></property><property name="Ssl" value="off"></property><property name="SecurityMechanism" value="4"></property><property name="TraceFileAppend" value="false"></property><property name="TraceLevel" value="-1"></property><property name="PortNumber" value="1527"></property><property name="LoginTimeout" value="0"></property></jdbc-connection-pool><jdbc-resource pool-name="GalleriaPool" description="" jndi-name="jdbc/galleriaDS"></jdbc-resource>

現在,找到:<config name =“ server-config”>元素,并在其中尋找最后一個<resource-ref條目。 在此添加以下行:

<resource-ref ref="jdbc/galleriaDS"></resource-ref>

在我們準備啟動實例之前,要做的最后一件事。 我們需要為Galleria示例添加JDBC領域。 再次,找到<config name =“ server-config”>并在其中查找</ auth-realm>。 在此下面,放置以下內容:

<auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="GalleriaRealm"><property name="jaas-context" value="jdbcRealm"></property><property name="encoding" value="Hex"></property><property name="password-column" value="PASSWORD"></property><property name="datasource-jndi" value="jdbc/galleriaDS"></property><property name="group-table" value="USERS_GROUPS"></property><property name="charset" value="UTF-8"></property><property name="user-table" value="USERS"></property><property name="group-name-column" value="GROUPID"></property><property name="digest-algorithm" value="SHA-512"></property><property name="user-name-column" value="USERID"></property></auth-realm>

確保不要將新領域置于default-config下。 這是行不通的。 精細。 讓我們獲取資源:)

獲取源代碼并在NetBeans中打開它

Vineet在bitbucket.org上托管了Galleria示例。 因此,您必須去那里并訪問java-ee-6-galleria項目。 您可以通過三種方式將源帶到本地HDD。 通過hg命令行:

hg clone https://bitbucket.org/VineetReynolds/java-ee-6-galleria

或通過網站下載(右上方的“獲取資源”)或直接通過NetBeans。 對于第一個和第三個選項,您的操作系統需要一個Mercurial客戶端。 我正在Windows下使用TortoiseHg 。 在執行以下操作之前,您應該已經安裝了NetBeans并對其進行了配置 。 讓我們在這里嘗試最后一種選擇。 選擇“團隊>克隆其他”。 輸入存儲庫URL,并保留用戶/密碼為空。 單擊兩次“下一步”(我們不需要更改默認路徑;),然后選擇一個父目錄以將其放入其中。單擊“完成”,然后讓Mercurial客戶端執行工作。 完成后,要求您打開找到的項目。 該外觀應類似于右側的圖片。 如果遇到連接問題,請確保相應地更新代理設置。

如果嘗試構建項目,則會遇到麻煩。 它仍然缺少一些我們接下來要做的配置。

添加開發配置文件

接下來是在Galleria-ejb項目的Maven pom.xml中添加一些內容。 打開它并向下滾動到<profiles>部分。 您會找到兩個(聲納和生產)。 我們將通過在開發配置文件中添加以下幾行來添加開發配置文件(確保將GlassFish路徑調整為您的環境):

<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<galleria.derby.testInstance.jdbcUrl>jdbc:derby://localhost:1527/GALLERIATEST</galleria.derby.testInstance.jdbcUrl>
<galleria.derby.testInstance.user>APP</galleria.derby.testInstance.user>
<galleria.derby.testInstance.password>APP</galleria.derby.testInstance.password>
<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>
</properties>
</profile>

好。 如您所見,這里定義了一些東西。 并且默認情況下激活配置文件。 而已。 目前。

測試ejb-Galleria項目

讓我們嘗試在ejb-Galleria項目中運行測試用例。 右鍵單擊它,然后發出“ clean and build”。跟隨控制臺輸出以查看實際發生的情況。 我們將在下一篇文章中對此做進一步調查。 今天,我們只是為了確保您以正確的方式設置所有設置。 它應該以以下內容結束:

Tests run: 49, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS

那是“綠色標準” :-)恭喜!

構建和部署項目

現在轉到NetBeans“工具>選項>其他> Maven”,然后選中以下框:“跳過測試以查找與測試沒有直接關系的任何構建執行”。 返回主窗口,右鍵單擊Galleria項目,然后進行清潔并在此處構建。

Reactor Summary:Galleria ................................. SUCCESS [0.431s]
galleria-ejb ............................. SUCCESS [5.302s]
galleria-jsf ............................. SUCCESS [4.486s]
Galleria EAR ............................. SUCCESS [1.308s]
------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------
Total time: 11.842s

精細。 現在讓我們啟動GlassFish域。 切換到GlassFish安裝并找到glassfish3 / bin文件夾。 在此處打開命令行提示符并運行:

asadmin start-domain test-domain

您可以看到域正在啟動。 現在打開瀏覽器并導航到http:// localhost:10048 / 。 幾秒鐘后,這將向您顯示GlassFish服務器的管理控制臺。 現在您需要安裝Hibernate。 選擇“更新工具”(左下方),然后切換到“可用加載項”選項卡。 選擇“休眠”,然后單擊“安裝”(右上角)。 安裝服務器后,請停止服務器,然后使用上述命令重新啟動服務器。 再次打開管理控制臺,然后單擊“應用程序”。 單擊頂部的小“部署”按鈕,然后瀏覽至“ java-ee-6-galleria / galleria-ear / target / galleria-ear-0.0.1-SNAPSHOT.ear”。 單擊“確定”(右上角)。 幾秒鐘后您就完成了。 現在切換到http:// localhost:10080 / Galleria / ,您將看到歡迎屏幕。 恭喜你 您在GlassFish上設置了Galleria示例! 注冊,登錄并使用該應用程序!

該系列的下一部分將帶您深入了解應用程序的細節。 我將介紹測試和總體概念。 我們還將在以后的文章中同時更改JPA提供程序和數據庫。

是否想知道在最新的WebLogic 12c上進行安裝和運行需要什么? 繼續閱讀!

參考: Java EE 6示例– Galleria –第1部分和Java EE 6示例–在GlassFish 3.1.2上運行Galleria – JCG合作伙伴提供的 第2部分 ? Markus Eisele在Enterprise Software Development with Java博客上。


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

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

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

相關文章

二維有限體積 matlab,二維有限體積法計算熱傳導及源碼.pdf

二維有限體積法計算熱傳導及源碼//#include "stdafx.h"#include #include #include #include #include using namespace std;#define q 500#define k 1000void main (){ //input the value you want:double L,dx,dy,T,Ax,Ay,d;int m,n,i,j,kk,mm ;//char str1[20];ch…

ubuntu與win10互換硬盤

實例&#xff1a;將sdb上的ubuntu轉移至sda&#xff0c;將sda上的win轉移至sdb1. 備份資料2. 制作老毛桃PE盤3. 格式化sda4. dd if/dev/sdb of/dev/sda ,將sdb克隆到sda上5. 利用Linux live cd修復grub2&#xff08;BIOS不會認GPT分區&#xff09; sudo grub-install /dev/sda …

如何在Jetty中使用SPDY

SPDY是Google提出的一種新協議&#xff0c;是針對網絡的新協議。 SPDY與HTTP兼容&#xff0c;但嘗試通過壓縮&#xff0c;多路復用和優先級降低網頁負載。準確地說&#xff0c;快速的目標是&#xff1a;&#xff08; http://dev.chromium.org/spdy/spdy-whitepaper &#xff09…

虐殺外星人java,逆天游戲《毀滅全人類2》登PS4 外星人瘋狂虐殺地球人

逆天游戲《毀滅全人類2》登PS4 外星人瘋狂虐殺地球人2016-10-17 10:45:58來源&#xff1a;游戲下載編輯&#xff1a;小年青評論(0)廣大的小伙伴都有看過許多外星人企圖入侵毀滅地球的電影&#xff0c;已此為題材而開發的游戲也不在少數。近日泛歐洲游戲信息組織又為一款該種題材…

電腦快捷鍵大全

最常用的快捷鍵F5------刷新 DELETE-----刪除 TAB----改變焦點CTRLC-----復制 CTRLX-----剪切 CTRLV----粘貼CTRLA-----全選 CTRLZ-----撤銷 CTRLS-----保存 ALTF4-----關閉 CTRLY-----恢復 ALTTAB-----切換CTRLF5---強制刷新…

ORM仇恨者無法理解

我看過無數的文章和評論&#xff08;尤其是評論&#xff09;&#xff0c;它們告訴我們ORM&#xff08;對象關系映射&#xff09;的概念有多糟糕&#xff0c;糟糕和錯誤。 以下是通常的聲明&#xff0c;以及我對它們的評論&#xff1a; “它們很慢” –映射有一些開銷&#xff0…

Android之仿微信圖片選擇器

先上效果圖。第一張圖顯示的是“相機”文件夾中的所有圖片&#xff1b;通過點擊多張圖片可以到第二張圖所示的效果&#xff08;被選擇的圖片會變暗&#xff0c;同時選擇按鈕變亮&#xff09;&#xff1b;點擊最下面的那一欄可以到第三張圖所示的效果&#xff08;顯示手機中所有…

oracle 快照用途,Oracle快照原理及實現總結

oracle數據庫的快照是一個表&#xff0c;它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。也就是說快照根本的原理就是將本地或遠程數據庫上的一個查詢結果保存在一個表中。以下是建立的Snapshot&#xff0c;目的是從業務數據庫上將數據Copy到處理數據庫上&a…

loss function

什么是loss? loss: loss是我們用來對模型滿意程度的指標。loss設計的原則是&#xff1a;模型越好loss越低&#xff0c;模型越差loss越高&#xff0c;但也有過擬合的情況。   ??loss function: 在分類問題中&#xff0c;輸入樣本經過含權重矩陣θ的模型后會得出關于各個類別…

復雜的(事件)世界

這篇博客文章試圖總結CEP領域中的技術&#xff0c;并探討它們的主要功能和不足。 有時似乎過度使用了CEP一詞&#xff08;就像ESB一樣&#xff09;&#xff0c;下面的文章反映了我們對它的理解和理解。 ESPER&#xff08; http://esper.codehaus.org/ &#xff09;是流行的開源…

oracle查詢表的id,oracle 查看所有用戶及密碼 實現Oracle查詢用戶所有表

1、oracle 查看所有用戶及密碼SQL> select username from dba_users;2、 實現Oracle查詢用戶所有表下面為您介紹的語句用于實現Oracle查詢用戶所有表&#xff0c;如果您對oracle查詢方面感興趣的話&#xff0c;不妨一看。select * from all_tab_comments-- 查詢所有用戶的表…

php 字符串加密與解密

/** * param $data 需要加密的字符串 * param $key 加密的密碼 * return string 加密后的字符串 */function _encrypt($data, $key){ $key md5($key); $x 0; $len strlen($data); $l strlen($key); $char; $str; for ($i …

java如何從方法返回多個值

本文介紹三個方法&#xff0c;使java方法返回多個值。 方法1&#xff1a;使用集合類方法2&#xff1a;使用封裝對象方法3&#xff1a;使用引用傳遞示例代碼如下&#xff1a; import java.util.HashMap; import java.util.Map;public class Test {/*** 方法1&#xff1a;使用集合…

FindBugs和JSR-305

假設那組開發人員在大型項目的各個部分上并行工作–一些開發人員在進行服務實現&#xff0c;而其他開發人員在使用該服務的代碼。 考慮到API的假設&#xff0c;兩個小組都同意服務API&#xff0c;并開始單獨工作。 您認為這個故事會有幸福的結局嗎&#xff1f; 好吧&#xff0c…

java使用org.apache.poi讀取與保存EXCEL文件

一、讀EXCEL文件 1 package com.ruijie.wis.cloud.utils;2 3 import java.io.FileInputStream;4 import java.io.FileNotFoundException;5 import java.io.IOException;6 import java.io.InputStream;7 import java.text.DecimalFormat;8 import java.util.ArrayList;9 import …

oracle 指定格式化,Oracle中的格式化函數

格式化函數提供一套有效的工具用于把各種數據類型(日期/時間&#xff0c;int&#xff0c;float&#xff0c;numeric)轉換成格式化的字符串以及反過來從格式化的字符串轉換成原始的數據類型。表 5-6. 格式化函數函數返回描述例子to_char(datetime, text)text把datetime 轉換成 s…

彈性數組

看這個結構體的定義&#xff1a;typedef struct st_type{ int nCnt; int item[0];}type_a;&#xff08;有些編譯器會報錯無法編譯可以改成&#xff1a;&#xff09;typedef struct st_type{ int nCnt; int item[];}type_a; 這樣我們就可以定義一個可變長的結…

什么是Akka?

在深入研究什么是Akka之前&#xff0c;讓我們退后一步來了解并發編程的概念在應用程序開發世界中是如何演變的。 應用程序已經從大型的整體程序演變為面向對象的模型。 隨著Java EE和Spring框架的出現&#xff0c;應用程序設計演變為更多的基于流程或任務的設計模型。 EJB或Poj…

apache2服務器搭建心得

網站的配置文件在/etc/apache2/sites-avalible中&#xff0c;每個文件對應一個虛擬站點&#xff0c;但需要在/etc/apache2/sites-enabled中創建軟鏈接到sites-avalible中對應的文件。 起初我在sites-avalible中創建了兩個站點&#xff0c;一個netaddi.com&#xff0c;一個test.…

has_a php,PHP has encountered a Stack overflow問題解決方法

昨晚將一個disucz論壇進行轉移后&#xff0c;發現打開的頁面上回多一個PHP has encountered a Stack overflow 這個提示錯誤&#xff0c;進過翻譯為“PHP遇到堆棧溢出”。我就感覺奇怪了&#xff0c;新站沒人訪問的&#xff0c;怎么可能會溢出。 好吧去discuz官方論壇找找解決方…