Java EE 5 是 Java 企業(yè)級(jí)應(yīng)用規(guī)范的最新標(biāo)準(zhǔn),它在以往版本的基礎(chǔ)上進(jìn)行了大范圍的改進(jìn),吸取了開(kāi)源領(lǐng)域廣泛使用的技術(shù)(例如 POJO,IoC),降低了 Java EE 的學(xué)習(xí)難度,簡(jiǎn)化了企業(yè)級(jí)應(yīng)用程序的開(kāi)發(fā),提高了開(kāi)發(fā)效率。
以下是 Java EE 5 中引入的五個(gè)比較重要的技術(shù):
- Java Annotation 不是 Java EE 5 中的技術(shù),它是 Java 5 的一個(gè)新的特性。但是在 Java EE 5 中大量的使用了 Annotation,因?yàn)樗氖褂?,極大的簡(jiǎn)化了 Java EE 應(yīng)用程序的開(kāi)發(fā)和維護(hù)。
- Java Server Faces (JSF)是對(duì) JSP 技術(shù)的一種擴(kuò)展和增強(qiáng),它已經(jīng)存在了一段時(shí)間,但并沒(méi)有被包含在 J2EE 規(guī)范中,用戶需要在他們的 Web 應(yīng)用中包含 JSF 的 jar 文件來(lái)支持 JSF 技術(shù)。Java EE 5 中包含了最新的 JSF 1.2 規(guī)范,從而在 WAS CE v2.1 上開(kāi)發(fā) JSF的應(yīng)用也變得更加容易。
- Java Persistence API (JPA)是用來(lái)代替 J2EE 中 Entity Bean 的一種技術(shù)規(guī)范。在 Java EE 5 中,Entity Bean 規(guī)范沒(méi)有進(jìn)行任何更新,舊的 Entity Bean 在 Java EE 5 中還被支持,但新添加的 JPA 是將來(lái) Java EE 中持久化技術(shù)的方向。使用 JPA 開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用也變得更加簡(jiǎn)單和容易。
- Enterprise Java Bean (EJB) 3.0 是對(duì) EJB 技術(shù)的一次比較大的改動(dòng)。EJB 3.0 充分利用了 Java Annotation,提供了一個(gè)新的 EJB 編程模型,從而簡(jiǎn)化了 EJB 應(yīng)用程序的開(kāi)發(fā)。
- JAX-WS 2.0 是 JAX-RPC 1.1 的一個(gè)后繼版本,JAX-RPC 不會(huì)再有新的版本,而 JAX-WS 2.0 會(huì)成為 Java EE 5 中實(shí)現(xiàn) Web Service 的技術(shù)。
本文將通過(guò)開(kāi)發(fā)一個(gè)網(wǎng)上商店的具體示例,向您展示如何在 WAS CE 中使用以上技術(shù)。
為了在 WAS CE v2.1 中展示以上所提到的新技術(shù),我們假設(shè)了一個(gè)網(wǎng)上商店:Ollivanders (Harry Potter 的魔法世界中最好的魔杖商店),簡(jiǎn)稱(chēng) OlliShop。OlliShop 提供了簡(jiǎn)單的 Web 界面,用戶可以用此 Web 界面注冊(cè)、登錄和購(gòu)買(mǎi)魔杖;另外 OlliShop 向第三方集成商提供了 WebService 接口,可以通過(guò) SOAP 協(xié)議來(lái)調(diào)用 OlliShop 的服務(wù)。您可以下載本例的源代碼。
網(wǎng)上商店的架構(gòu)如圖 1 所示:
圖 1. OlliShop 的架構(gòu)圖
OlliShop 由 5 個(gè)功能模塊組成:
- ShopWEB 是 OlliShop 的用戶界面,用戶只能通過(guò)瀏覽器來(lái)訪問(wèn)此模塊。ShopWEB 模塊使用了 JSF 技術(shù)。
- ShopWS 是 OlliShop 的 Web Service 接口,它提供了其它應(yīng)用程序通過(guò) Web Service 的方式訪問(wèn) OlliShop 的服務(wù)。此模塊使用了 JAX-WS 技術(shù)。
- ShopUtil 是一個(gè)工具包,包含一些公用的工具類(lèi)以供其它模塊使用。
- ShopEJB 是業(yè)務(wù)實(shí)現(xiàn)模塊,主要包括一個(gè)無(wú)狀態(tài) Session Bean,供 ShopWEB 和 ShopWS 調(diào)用。此模塊使用了 EJB 3.0 技術(shù)。
- ShopJPA 是數(shù)據(jù)庫(kù)訪問(wèn)模塊,它通過(guò) ORM 機(jī)制把對(duì)數(shù)據(jù)庫(kù)的操作轉(zhuǎn)換成對(duì)對(duì)象的操作。此模塊使用了 JPA 技術(shù)。
WAS CE 作為一個(gè)開(kāi)源的應(yīng)用服務(wù)器,選擇一個(gè)免費(fèi)且強(qiáng)大的開(kāi)發(fā)工具是很必要的,Eclipse 就是一個(gè)不錯(cuò)的選擇。WAS CE 提供了一個(gè) Eclipse 插件,可以通過(guò)此插件來(lái)管理 WAS CE 應(yīng)用服務(wù)器,開(kāi)發(fā)、部署和調(diào)試 Java EE 的應(yīng)用,再配合 Eclipse 中的 WTP(Web Tools Platform)插件,對(duì)于一個(gè)小規(guī)模的應(yīng)用,這樣的 IDE 已經(jīng)可以勝任。
本文使用的 Eclipse 環(huán)境如下:
- Eclipse 3.4
- Eclipse WTP 3.0M2
- WAS CE Server adapter 2.1,此插件可以從以下網(wǎng)址下載:http://public.dhe.ibm.com/software/websphere/wasce/updates/
在 Eclipse 的 J2EE 視圖中的 Servers view 處創(chuàng)建 WAS CE 服務(wù)器,如圖 2 所示。
圖2. Eclipse中的WAS CE Server
現(xiàn)在我們開(kāi)發(fā) Java EE 應(yīng)用程序的環(huán)境已經(jīng)準(zhǔn)備好了,可以開(kāi)始 OlliShop 應(yīng)用的開(kāi)發(fā)了。OlliShop 包含了多個(gè)模塊,是一個(gè)典型的 EAR 應(yīng)用程序,整個(gè) OlliShop 的工程視圖如圖 3,它包括 6 個(gè)工程。在后面的描述中我們將會(huì)具體介紹每一個(gè)工程。
圖 3. OlliShop 中包含的工程
通過(guò) Eclipse 中的 "Enterprise Application Project" 向?qū)?chuàng)建一個(gè) EAR 工程。需要注意的是,創(chuàng)建工程時(shí)需要選擇上面創(chuàng)建的 IBM WAS CE v2.1 作為 Target Runtime,如圖 4 所示。以下的所有工程除了 ShopUtil 外都需要 IBM WAS CE v2.1 作為 Target Runtime。
圖 4. 創(chuàng)建 ShopEAR 工程
此工程創(chuàng)建后會(huì)自動(dòng)在 EarContent\META-INF\ 目錄下生成 WAS CE 的部署計(jì)劃:geronimo-application.xml。雙擊此文件可以打開(kāi)此部署計(jì)劃的編輯界面,通過(guò)此編輯界面可以很容易的操作此部署計(jì)劃。
通過(guò) Eclipse 中的 ”JPA Project” 向?qū)?chuàng)建 ShopJPA 工程。創(chuàng)建過(guò)程中可以把此工程加入到上面創(chuàng)建的 ShopEAR 工程中。此工程創(chuàng)建后,Eclipse 會(huì)轉(zhuǎn)換到 JPA 視圖。此時(shí)我們需要使用數(shù)據(jù)庫(kù)了,因此我們需要先創(chuàng)建數(shù)據(jù)庫(kù)。
WAS CE 中默認(rèn)的內(nèi)置數(shù)據(jù)庫(kù)為 Derby,我們的 OlliShop 應(yīng)用就是使用了此數(shù)據(jù)庫(kù)。通過(guò)J2EE 視圖中的 Servers view,可以啟動(dòng) WAS CE。通過(guò) http://localhost:8080/console/ 進(jìn)入 WAS CE 的管理控制臺(tái),默認(rèn)的用戶名/口令為 system/manager。通過(guò)此控制臺(tái)可以管理Derby 數(shù)據(jù)庫(kù),單擊左邊菜單欄中的 "DB Manager" 進(jìn)入數(shù)據(jù)庫(kù)管理界面,創(chuàng)建名為 "shop" 的數(shù)據(jù)庫(kù),然后可以使用以下腳本創(chuàng)建所需要的表:
清單 1. 創(chuàng)建數(shù)據(jù)庫(kù)腳本
CREATE TABLE Users (
ID INTEGER NOT NULL,
UserName VARCHAR(250) NOT NULL,
Password VARCHAR(250) NOT NULL
);
CREATE TABLE Goods (
ID INTEGER NOT NULL,
Name VARCHAR(250) NOT NULL,
Price DECIMAL(14, 2) NOT NULL,
Quantity DOUBLE NOT NULL
);
CREATE INDEX Users_ID ON Users(ID);
CREATE INDEX Goods_ID ON Goods(ID); |
JPA 需要通過(guò)數(shù)據(jù)源才能訪問(wèn)到相應(yīng)的數(shù)據(jù)庫(kù),在 WAS CE 中有兩種方式創(chuàng)建數(shù)據(jù)源:通過(guò)管理控制臺(tái)創(chuàng)建和通過(guò)部署計(jì)劃創(chuàng)建。在這里我們使用第二種方式,所以需要修改在 ShopEAR 中的部署計(jì)劃:geroniom-application.xml。
在 geronimo-application.xml 中添加以下代碼:
清單2. geronimo-application.xml
<ext-module>
<connector>ShopDataSource</connector>
<external-path xmlns:dep="http://geronimo./xml/ns/deployment-1.2">
<dep:groupId>org.tranql</dep:groupId>
<dep:artifactId>tranql-connector-derby-embed-local</dep:artifactId>
<dep:type>rar</dep:type>
</external-path>
<connector xmlns="http://geronimo./xml/ns/j2ee/connector-1.2">
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>
javax.sql.DataSource
</connectionfactory-interface>
<connectiondefinition-instance>
<name>jdbc/ShopDataSource</name>
<config-property-setting name="UserName">
</config-property-setting>
<config-property-setting name="Password">
</config-property-setting>
<config-property-setting name="DatabaseName">
shop
</config-property-setting>
<config-property-setting name="CreateDatabase">
true
</config-property-setting>
<connectionmanager>
<single-pool>
<max-size>100</max-size>
<min-size>0</min-size>
<blocking-timeout-milliseconds>
5000
</blocking-timeout-milliseconds>
<idle-timeout-minutes>30</idle-timeout-minutes>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>>
</connector>
</ext-module> |
從以上代碼可以看出此數(shù)據(jù)源指定的數(shù)據(jù)庫(kù)為 shop,創(chuàng)建的數(shù)據(jù)源的 JNDI 的名字為jdbc/ShopDataSource。
Eclipse 提供了一個(gè)創(chuàng)建 JPA Entity Bean 的工具,此工具能夠根據(jù)數(shù)據(jù)庫(kù)中表的設(shè)置創(chuàng)建出相應(yīng)的 Entity Bean。為了使用此工具,需要先在 Eclipse 中連接到 Derby 數(shù)據(jù)庫(kù),在 JPA 視圖的 Data Source Explorer 中創(chuàng)建到 Derby 的連接。步驟如下:
1. 在 "Database" 的右鍵菜單中選擇 "New …"
2. 選擇 “Generic JDBC Connection”
3. 輸入連接的名字:Derby
4. 選擇 “Derby Client JDBC Driver”,Derby JDBC Driver位于:%WASCE_HOME%\repository\org\apache\derby\derbyclient\10.2.2.0\derbyclient-10.2.2.0.jar。輸入以下連接屬性:
Database:shop
URL:jdbc:derby://localhost:1527/shop;create=true
User Name:user
Password:app
5. 連接剛創(chuàng)建的 Derby。
現(xiàn)在可以通過(guò) Derby 連接創(chuàng)建相應(yīng)的 Entity Bean 了。在 shop 數(shù)據(jù)庫(kù)中只有兩個(gè)表:users 和 goods。我們先創(chuàng)建一個(gè)類(lèi) com.ibm.wasce.shop.entity.User,此時(shí)在 JPA 視圖中就可以把此類(lèi)映射到數(shù)據(jù)庫(kù)中的表 users,如圖5所示。
圖 5. User 類(lèi)映射到表 users
在 User類(lèi) 中添加 3 個(gè)屬性:id、userName、password,然后把它們映射到 users 表中的字段,如圖 6 所示。
圖6. 映射屬性 id 到表 users 中的字段 id
用戶登錄時(shí),需要從數(shù)據(jù)庫(kù)中根據(jù)用戶輸入的用戶名查詢(xún)?cè)撚脩魜?lái)驗(yàn)證用戶名和密碼。在傳統(tǒng)的應(yīng)用中,我們需要從數(shù)據(jù)源中得到 Connection,然后執(zhí)行 SQL 語(yǔ)句,從返回的數(shù)據(jù)集中獲得數(shù)據(jù),再生產(chǎn)相應(yīng)的 User 對(duì)象。在 EJB 3.0 中,這項(xiàng)工作已經(jīng)大大簡(jiǎn)化,主要是因?yàn)槭褂昧?Annotation NamedQueries 和 EJB QL。通過(guò) NamedQueries,只需要再聲明一個(gè) EJB QL,就可以得到相應(yīng)的 User 對(duì)象,開(kāi)發(fā)人員不再需要關(guān)心數(shù)據(jù)庫(kù)連接和數(shù)據(jù)轉(zhuǎn)換等繁瑣的事情。EJB QL 是和 SQL 很像的一種語(yǔ)言,只是它要操作的不是數(shù)據(jù)庫(kù)中的表,而是 JPA Entity Bean。
最終生成的 User 類(lèi)如下:
清單3. 生成 JPA 實(shí)體 Bean
@NamedQueries ( {
@NamedQuery ( name = "getUserByName",
query = "select u from User u where u.userName= :name"
)
})
@Entity
@Table(name="USERS", schema = "APP")
public class User {
@Id
@GeneratedValue
private Integer id;
private String userName;
private String password;
// 以下的setter/getter方法省略 |
通過(guò)以上的方式,我們創(chuàng)建了與表 goods 相對(duì)應(yīng)的 JPA Entity Bean。
接下來(lái),我們將通過(guò) Eclipse 中的 “EJB Project” 向?qū)?chuàng)建 ShopEJB 工程,同時(shí)把新創(chuàng)建的工程加入到 ShopEAR 中。
此工程中的 EJB 采用 EJB 3.0 的方式開(kāi)發(fā)。在傳統(tǒng)的EJB編程模型中,每一個(gè)Bean需要兩個(gè)接口和一個(gè)類(lèi)來(lái)組成:Remote(或Local)接口、Home 接口和 Bean 實(shí)現(xiàn)類(lèi),而且這三個(gè)類(lèi)之間需要通過(guò)某種編碼約定來(lái)規(guī)范,在部署時(shí)再由 EJB 容器生產(chǎn)一些魔術(shù)代碼(Magic Codes)把它們之間的調(diào)用關(guān)系連起來(lái)。而在 EJB 3.0 中的實(shí)現(xiàn)則顯得更加簡(jiǎn)單和直接,一個(gè) EJB 只需要一個(gè)接口和一個(gè)類(lèi):Remote(或 Local)接口和實(shí)現(xiàn) Remote(或 Local)接口的類(lèi)。另外一個(gè)區(qū)別是在 EJB 3.0 中部署描述符(ejb-jar.xml)也不再是必須的了,我們可以通過(guò) Annotation 的方式來(lái)定義這些元數(shù)據(jù)。
以下是 ShopBean 的 Local 接口,它是一個(gè)普通的 Java 接口。如果是 Remote 接口,則需要加上 Annotation @Remote。
清單 4. ShopBean 的 Local 接口
public interface ShopBean {
public boolean login( String name, String password );
public List listGoods();
public Good getGoodById( int id );
} |
以下是 ShopBean 的實(shí)現(xiàn)類(lèi)。在此類(lèi)中,唯一能感覺(jué)到它和 EJB 相關(guān)的地方就是 @Stateless,其它的地方和普通的 Java 類(lèi)沒(méi)有區(qū)別。此類(lèi)主要用來(lái)實(shí)現(xiàn)操作在 ShopJPA 中開(kāi)發(fā)的 Entity Bean。EntityManager 是 JPA 中最重要的一個(gè)接口,應(yīng)用程序主要通過(guò)它來(lái)添加、修改和查詢(xún) Entity Bean。通過(guò) Annotation @PersistenceContext,WAS CE 中的 EJB 容器會(huì)把一個(gè) EntityManager 的實(shí)例賦給此類(lèi)中的em對(duì)象,這就是在 EJB 3.0 中被廣泛使用的依賴(lài)注入(Dependency Injection)的方法。在這個(gè)類(lèi)中,也用到了在 ShopJPA 中定義的 NamedQuery。
清單 5. ShopBean 的實(shí)現(xiàn)
@Stateless
public class ShopBeanImpl implements ShopBean {
@PersistenceContext
private EntityManager em;
public Good getGoodById(int id) {
Query query = em.createNamedQuery( "getGoodByID" );
query.setParameter("id", id);
return (Good)query.getSingleResult();
}
public List listGoods() {
Query query = em.createNamedQuery( "getAllGoods" );
return query.getResultList();
}
public boolean login(String name, String password) {
try {
Query query = em.createNamedQuery( "getUserByName" );
query.setParameter( "name", name );
User user = (User)query.getSingleResult();
return user != null && user.getPassword().equals( password );
} catch ( Exception e ) {
return false;
}
} |
通過(guò) Eclipse 中的 "Java Project" 向?qū)?chuàng)建 ShopUtil 工程??梢栽?ShopEAR 工程的屬性管理頁(yè)面中,把 ShopUtil 工程加入到 ShopEAR 中。
此工程提供了 ShopWEB 和 ShopWS 訪問(wèn) EJB 的功能,而不需要在兩個(gè) Web 工程中分別定義。它使用 JNDI 的方式訪問(wèn) EJB,如清單 6 所示:
清單 6. 使用 JNDI 訪問(wèn) EJB
private EJBLocator() {
try {
InitialContext rootContext = new InitialContext();
shopbean = (ShopBean)rootContext.lookup( "java:comp/env/ejb/shopbean" );
} catch ( NamingException ne ) {
ne.printStackTrace();
}
} |
接下來(lái),我們將創(chuàng)建兩個(gè) Web 工程。在創(chuàng)建的兩個(gè) Web 工程中需要進(jìn)行以下設(shè)置才可以使用:
- 在 Web 工程的屬性中:"Java Build Path" -> "Projects" 中添加 ShopUtil 工程。
- 添加以下一行到 Web 工程的文件:WebContent\META-INF\ MANIFEST.MF;Class-Path: ShopUtil.jar
在創(chuàng)建此工程前,需要先根據(jù) WTP 的文檔來(lái)設(shè)置 Java Server Faces,WAS CE v2.1 提供了JSF 所需要的以下兩個(gè) Jar 文件:
- %WASCE_HOME%\repository\org\apache\myfaces\core\myfaces-api\1.2.0\myfaces-api-1.2.0.jar
- %WASCE_HOME%\repository\org\apache\myfaces\core\myfaces-impl\1.2.0\myfaces-impl-1.2.0.jar
設(shè)置完 JSF 后,通過(guò) Eclipse 中的 “Dynamic Web Project” 向?qū)?chuàng)建 ShopWEB 工程,Configurations-> JavaServer Faces v1.2 Project,同時(shí)把新創(chuàng)建的工程加入到 ShopEAR 中。
新生成的工程中會(huì)包含 JSF 的配置文件:faces-config.xml,雙擊此文件可打開(kāi) JSF 配置編輯器,如圖 7 所示。
圖 7. faces-config.xml 的編輯器
通過(guò)此編輯器中的 ManageBean 頁(yè)面,可以生成 JSF 中的 Managed Bean。在本例中,有兩個(gè)Managed Bean:GoodsBean 和 LoginBean。
WST 還提供了一個(gè) JSF 頁(yè)面編輯器,可以進(jìn)行可視化的開(kāi)發(fā)。在本例中,有兩個(gè)頁(yè)面:一個(gè)登錄頁(yè)面和一個(gè)顯示商品列表的頁(yè)面。其中登錄頁(yè)面的編輯如圖 8 所示。
圖 8. JSF 的可視化編輯頁(yè)面
本例中的業(yè)務(wù)邏輯是用戶正確登錄后會(huì)自動(dòng)轉(zhuǎn)到商品列表頁(yè)面,否則將返回到登錄頁(yè)面。這種頁(yè)面跳轉(zhuǎn)的邏輯也可以通過(guò)可視化的方式來(lái)進(jìn)行設(shè)置,如圖 9 所示。
圖 9. 頁(yè)面跳轉(zhuǎn)邏輯編輯頁(yè)面
通過(guò) Eclipse 中的 "EJB Project" 向?qū)?chuàng)建 ShopWS 工程,同時(shí)把新創(chuàng)建的工程加入到ShopEAR 中。
通過(guò) JAX-WS 的方式來(lái)開(kāi)發(fā) Web Service 簡(jiǎn)化了很多工作。在本例中,我們開(kāi)發(fā)了一個(gè)通過(guò)商品編號(hào)來(lái)查詢(xún)商品價(jià)格的 Web Service。此 Service 只需要使用一個(gè)接口和一個(gè)實(shí)現(xiàn)類(lèi),在部署時(shí),WAS CE 會(huì)根據(jù)接口和類(lèi)中的 Annotation 來(lái)生成相應(yīng)的 WSDL 文件。
以下是此 Service 的接口,使用了 Annotation @WebService。
清單 7. ShopService 接口
@WebService(name="ShopServicePortType",
targetNamespace = "http://shop.wasce.ibm.com")
public interface ShopService {
public double getPriceById( int goodsId );
} |
以下是此 Service 的實(shí)現(xiàn)類(lèi):
清單 8. ShopService 的實(shí)現(xiàn)
@WebService(serviceName = "ShopService",
portName="ShopServicePort",
endpointInterface = "com.ibm.wasce.shop.ws.ShopService",
targetNamespace = "http://shop.wasce.ibm.com")
public class ShopServiceImpl implements ShopService {
public double getPriceById( int goodsId ) {
ShopBean shopbean = EJBLocator.getInstance().getShopBean();
Good good = shopbean.getGoodById(goodsId);
return 20;
}
} |
以上定義的 Web Service 需要通過(guò) Servlet 的方式發(fā)布,所以需要在 web.xml 中進(jìn)行以下配置:
清單 9. 在 web.xml 中配置 ShopService
<servlet>
<display-name>ShopService</display-name>
<servlet-name>ShopService</servlet-name>
<servlet-class>
com.ibm.wasce.shop.ws.ShopServiceImpl
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShopService</servlet-name>
<url-pattern>/shopservice</url-pattern>
</servlet-mapping> |
雖然類(lèi) com.ibm.wasce.shop.ws.ShopServiceImpl 不是一個(gè) Servlet,它沒(méi)有繼承javax.servlet.http.HttpServlet,但是在部署的時(shí)候,WAS CE 的部署程序會(huì)對(duì) ShopServiceImpl進(jìn)行解析,并且生成一個(gè) Servlet 來(lái)包裝 ShopServiceImpl,這樣就可以通過(guò)地址 /shopservice來(lái)訪問(wèn)到此 Web Service。
也可以通過(guò) JAX-WS 的方式來(lái)調(diào)用上面生成的 Web Service,代碼如下:
清單 10. 調(diào)用 ShopService
public static double getPriceById( int goodsId) throws Exception {
URL url = new URL("http://localhost:8080/ShopWS/shopservice?wsdl");
QName qname = new QName("http://shop.wasce.ibm.com", "ShopService");
Service service = Service.create(url, qname);
ShopService shopservice = (ShopService)service.getPort(ShopService.class);
double price = shopservice.getPriceById( goodsId );
return price;
} |
在 Eclipse 中開(kāi)發(fā)完以上模塊后,就可以部署此應(yīng)用。我們可以通過(guò)兩種方式來(lái)部署:通過(guò)Eclipse 部署或者從 Eclipse 中導(dǎo)出 EAR 后通過(guò)命令行部署。
第一種方式:通過(guò) Eclipse 部署
- 在 Eclipse 中的 Server 視圖,右擊 WASCE Server,選擇Add and Remove Projects ...
- 添加 ShopEAR 到 Configured projects 列表中
- 點(diǎn)擊 Finish
第二種方式:通過(guò)命令行部署
- 右擊 ShopEAR 工程,選擇 Export
- 選擇“Java EE”-> EAR file
- 指定要保存的目錄和文件名,例如 d:\temp\ShopEAR.ear
- 用以下命令部署導(dǎo)出的 ear 文件
%WASCE_HOME%\bin\deploy --username system --password manager deploy d:\temp\ShopEAR.ear
部署此應(yīng)用后,可以通過(guò) http://localhost:8080/ShopWEB/ 來(lái)訪問(wèn) OlliShop 的主頁(yè),默認(rèn)的用戶名/密碼為 user1/user1
對(duì)于 Web Service,可以通過(guò) http://localhost:8080/ShopWS/shopservice?wsdl 來(lái)訪問(wèn) shopservice的 WSDL 文件,可以通過(guò)http://localhost:8080/ShopWS/invokeshopservice.jsp 來(lái)調(diào)用此 Web Service。
WAS CE v2.1 作為一款免費(fèi)的 Java EE 5 應(yīng)用服務(wù)器,結(jié)合 Eclipse 強(qiáng)大的 WST 工具,為廣大開(kāi)發(fā)人員提供了快速的開(kāi)發(fā)環(huán)境,也為中小型企業(yè)實(shí)踐 Java EE 5 的應(yīng)用提供了一個(gè)很好的平臺(tái)。
| 描述 | 名字 | 大小 | 下載方法 |
|---|---|---|---|
| 代碼示例 | OlliShop.zip | 49 KB | HTTP |
學(xué)習(xí)
- WebSphere Application Server Community Edition V2.1 中的新增功能:本文主要講述了 WebSphere Application Server Community Edition V2.1 中的新增功能,包括使用 Gshell 執(zhí)行 Geronimo 命令、在您自己的服務(wù)器集基礎(chǔ)上創(chuàng)建多個(gè)服務(wù)器組裝,以及通過(guò)專(zhuān)家模式和新的 Monitoring Portlet 完全控制服務(wù)器的能力。
- 從 Apache Tomcat Version 6.0 遷移到 WAS CE V2.1 :本文將逐步地指導(dǎo)您將一個(gè)應(yīng)用程序部署到 Tomcat 6.0,然后遷移代碼并將其部署到 WebSphere Application Server Community Edition V2.1。并通過(guò)該示例應(yīng)用程序突出說(shuō)明了這兩種實(shí)現(xiàn)之間的一些顯著差異。
- 使用 WAS CE 開(kāi)發(fā) JPA 應(yīng)用程序:本教程將向您介紹如何用 JPA 開(kāi)發(fā) WAS CE 目標(biāo)平臺(tái)下的 Java EE 5 應(yīng)用。本教程通過(guò)一個(gè)示例應(yīng)用程序的開(kāi)發(fā)過(guò)程,將帶您了解如何創(chuàng)建 JPA 項(xiàng)目和持久生成類(lèi),如何配置持久單元以及如何部署和運(yùn)行 Web 應(yīng)用程序。
- WAS CE 產(chǎn)品文檔:本網(wǎng)站向您提供了 WAS CE 不同版本的產(chǎn)品幫助文檔。
- Eclipse 網(wǎng)站:本網(wǎng)站向您提供了 開(kāi)源開(kāi)發(fā)工具 Eclipse 最新。
- Geronimo 專(zhuān)題:為您提供了 Apache Geronimo 相關(guān)的技術(shù)文章、教程、下載等資源。
- WAS CE 專(zhuān)欄:為您提供了開(kāi)源應(yīng)用服務(wù)器 WAS CE 相關(guān)的技術(shù)文章、教程、下載等資源。
獲得產(chǎn)品和技術(shù)





