Eclipse+JBoss+EJB3編寫第一個無狀態(tài)的SessionBean
本系列教程使用的軟件版本如下:
Eclipse:3.4.2,Eclipse IDE for Java EE Developers
JBoss :5.0.1,http://www.jboss.org/jbossas/downloads/
JDK:1.6.0.14,http://java.sun.com/javase/downloads/index.jsp
在本文中將編寫一個簡單的無狀態(tài)SessionBean。在發(fā)布EJB時,一般需要將EJB程序以jar文件的形式進(jìn)行發(fā)布。這些jar文件將被放在
|
上面的第一行命令表示jboss可以接收來自200.200.200.123的請求。第二條命令表示jboss可以接收來自任意地址的請求。如果不設(shè)置-b參數(shù),以非本機(jī)方式訪問EJB時,JBoss會拋出如下異常:
Exception in thread "main" javax.naming.CommunicationException: Could not obtain connection to any of these urls: 192.168.17.105:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server /192.168.17.105:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server /192.168.17.105:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]]
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1725)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:689)ITPUB
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at test.Client.main(Client.java:29)
... ...
一、配置開發(fā)環(huán)境
在eclipse中進(jìn)行開發(fā),也需要設(shè)置-b命令行參數(shù)。在運(yùn)行配置對話框中可以按著圖的方式設(shè)置-b命令行參數(shù)。

二、開發(fā)無狀態(tài)Session Bean
在Eclipse中開發(fā)EJB程序首先需要建立一個EJB Project(工程名為MyEJB)。然后建立一個接口(遠(yuǎn)程接口)和一個Session Bean。遠(yuǎn)程接口的代碼如下:
|
在上面的代碼中使用了@Remote注釋將Greeter接口定義為遠(yuǎn)程接口,也就是在其他的客戶端機(jī)器上可以通過該接口來訪問本地的Session Bean。在Greeter接口中還使用了一個Greeting類,該類的代碼如下:
|
要注意的是,由于Greeting類在實(shí)例將被傳輸?shù)娇蛻舳耍虼?,該類需要?shí)現(xiàn)java.io.Serializable接口。
下面來編寫Session Bean,代碼如下:
|
在上面的代碼中使用了@Stateless注釋將GreeterBean類定義為無狀態(tài)的Session Bean。如果JBoss正處于啟動狀態(tài),并保存上面寫的類和接口,Eclipse會自動將上面的代碼編譯,并生成jar文件,發(fā)布到j(luò)boss的 deploy目錄中。該jar文件的目錄結(jié)構(gòu)如下:
MyEJB.jar
entity\Greeting.class
service\Greeter.class
service\GreeterBean.class
META-INF\MANIFEST.MF
META-INF\jboss.xml
其中META-INF目錄中的兩個文件是Eclipse在建立EJB工程時自動生成的,我們不用去管它。讀者也可以手工去編譯上面的接口和類,并使用jar命令生成jar文件。
三、編寫客戶端程序
由于本文使用了遠(yuǎn)程接口來訪問Session Bean,因此,在訪問時需要指定EJB所有的機(jī)器的IP地址。
|
在上面的代碼中,使用了Context.PROVIDER_URL設(shè)置了服務(wù)端的IP和端口號。
上面積代碼的運(yùn)行結(jié)果如:
|
除了在程序中設(shè)置屬性值外,也可以通過jndi.properties文件進(jìn)行設(shè)置。該文件應(yīng)放在Eclipse工程的src目錄中。該文件的內(nèi)容如下:
|
如果使用jndi.properties文件,就不需要在客戶端程序中設(shè)置相應(yīng)的屬性值了,因此,可以使用如下的代碼來調(diào)用Session Bean:
|
注意:在編寫客戶端程序時,需要引用
【編輯推薦】
- 使用Eclipse+JBoss+EJB3編寫有狀態(tài)的SessionBean
- Eclipse+JBoss+EJB3配置文件發(fā)布Session Bean
- 奇怪的Eclipse Debug異常
- Eclipse字符編碼
- Eclipse RCP編輯器關(guān)閉按鈕的屏蔽方法