第一個EJB3.0范例(轉)
?
2004
年
7
月,
EJB
專家委員會公布了新的
EJB3.0
規范草本。
2004
年
10
月
7
號,
JBoss
發布了支持
EJB3.0
的第一個預覽版本
jboss-EJB-3.0_Preview_1
。
2004
年
11
月
5
號,
JBoss
發布了支持
EJB3.0
的第二個預覽版本
jboss-EJB-3.0_Preview_2
。
我們來完成第一個
EJB3.0
程序。
搭配環境
實現
EJB3.0
的環境要求使用
JBoss
的
jboss-
首先安裝
JDK
。下載
jdk-1_5_0_01-windows-i586-p.exe
,安裝至相應目錄,我安裝至
D:\Program Files\Java\jdk
下載
jboss-4.0.1RC1.zip
,直接解壓縮到
D:\jboss4
下。相同方法設置
JBOSS_HOME
=
D:\jboss4
。
由于用到
ant
,所以還需要取得
Apache Ant
相關執行程序。在
Apache
服務器
,Weblogic
或
Jbuilder
等安裝目錄下可以找到,最好版本較高。我使用
JBuilder2005
下的,路徑為
D:\Borland\JBuilder2005\thirdparty\ant\bin;
仍然設置在系統變量的
Path
中,寫在
JDK
路徑之后。(注意:如果
ant
版本較低將編譯時報錯,我的為
Apache Ant version
??????
還要用到
jboss-EJB-3.0_Preview_2
包,可以在
www.jboss.org
得到。解壓后包括
docs
,
lib
兩個文件夾和
RELEASE_NOTES.txt
和
INSTALL.html
兩個說明文件。
Docs
文件夾中有主頁文件
index.html,
包括了
EJB3.0
的規范草本
ejb-3_0-edr-spec.pdf
,指南文件夾
tutorial
(包括范例說明文件和源文件),配置說明文件夾
reference
和
Hibernate3
的文件夾。
Lib
文件夾是部署
EJB3.0
環境所需要的
ejb3-interceptors-aop.xml
和
ejb3.deployer
。
??????
運行簡單的
EJB3.0
范例,我們只需要將
ejb3-interceptors-aop.xml
和
ejb3.deployer
文件夾拷貝到
D:\jboss4\
server\all\deploy
下即可。
???
我們將范例部署在all下,所以運行JBoss時我們使用
??? Run –c all
???
啟動JBoss后我們就完成了環境的配置。
編寫程序
??? Docs
文件夾下提供了許多EJB3.0各個方面的范例。我們以無狀態bean為例運行范例。
???
無狀態bean范例在stateless文件夾下。包括了存放源文件的src和運行配置文件build.xml,JNDI配置文件jndi.properties和說明文件stateless.html。
???
源文件包括Calculator.java
,
CalculatorBean.java
,
CalculatorLocal.java
,
CalculatorRemote.java
和
Client.java
。
???
在EJB3.0環境下編寫無狀態bean時很容易的。所有的bean類型就是homeless所以只需要創建一個bean類和實現至少一個接口。
在CalculatorBean.java我們聲明一個無狀態bean只需要聲明為 @Stateless,EJB容器就會部署這個類為無狀態bean。
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean implements CalculatorRemote, CalculatorLocal
{
?? public int add(int x, int y)
?? {
????? return x + y;
?? }
?? public int subtract(int x, int y)
?? {
????? return x - y;
?? }
}
這個CalculatorBean實現了兩個接口。一個是remote,一個是local。現在在EJB3.0中你可以僅僅實現一個remote,一個local或兩個都實現。
在CalculatorRemote.java定義Calculator bean 的remote接口你僅僅需要標識其為@Remote。
import javax.ejb.Remote;
@Remote
public interface CalculatorRemote extends Calculator
{
}
同樣在CalculatorLocal.java你也僅僅需要標識一個@Local就可以定義Calculator bean 的local接口
import javax.ejb.Local;
@Local
public interface CalculatorLocal extends Calculator
{
}
Calculator bean
需要兩個JNDI的綁定分別對應@Remote 和@Local接口。默認的,JBoss使用接口的全名作為JNDI的名字。這使得你可以容易的調用CalculatorRemote.class.getName()來查找一個JNDI名字對應的引用。
在Client.java中你可以發現是使用remote接口的全名來查找無狀態bean,也可以注意到并不存在HOME接口。
import org.jboss.tutorial.stateless.bean.Calculator;
import org.jboss.tutorial.stateless.bean.CalculatorRemote;
import javax.naming.InitialContext;
public class Client
{
?? public static void main(String[] args) throws Exception
?? {
????? InitialContext ctx = new InitialContext();
????? Calculator calculator = (Calculator) ctx.lookup(CalculatorRemote.class.getName());
????? System.out.println("1 + 1 = " + calculator.add(1, 1));
????? System.out.println("1 - 1 = " + calculator.subtract(1, 1));
?? }
}
現在你可以直接執行這個無狀態bean了。
運行結果
??
這個實例使用ant機制運行,所以需要配置build.xml。不同的build.xml中需要設置不同的run參數中的classname:
?? <target name="run" depends="ejbjar">
????? <java classname="org.jboss.tutorial.stateless.client.Client" fork="yes" dir=".">
???????? <classpath refid="classpath"/>
????? </java>
?? </target>
JNDI
的配置相同jndi.properties:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
???
打開命令運行窗口,到范例目錄下,如
D:\jboss-EJB-3.0_Preview_2\docs\tutorial\stateless
,鍵入命令ant編譯文件。編譯成功會顯示:BUILD SUCCESSFUL。
成功編譯后會目錄下會多一個build目錄,為編譯后的class文件和tutorial.ejb3的文件。
然后運行 ant run,執行程序,我們可以看到:
Buildfile: build.xml
prepare:
compile:
ejbjar:
run:
???? [java] 2005-01-12 15:07:25,296 INFO org.jboss.remoting.InvokerRegistry[main
] - Failed to load soap remoting transport: org/apache/axis/AxisFault
???? [java] 1 + 1 = 2
???? [java] 1 - 1 = 0
BUILD SUCCESSFUL
Total time: 3 seconds
其中的信息
[java] 2005-01-12 15:07:25,296 INFO org.jboss.remoting.InvokerRegistry[main
] - Failed to load soap remoting transport: org/apache/axis/AxisFault
是JBoss的一個bug,我們可以不去關心。他們會在下一版本改進。
至此,我完成了一個EJB3.0的范例。我們可以發現EJB3.0帶給我們的驚喜。我們不必再去配置大量繁瑣的部署描述和復雜的接口。相信更多的EJB3.0的驚喜在等待著我們去發掘。
posted on 2006-06-30 11:38 liaojiyong 閱讀(372) 評論(0) 編輯 收藏 所屬分類: EJB