星期一, 7月 17, 2006

JBoss EJB3(HelloWorld)備忘記

EJB (Enterprise JavaBeans) 是 J2EE 的核心組件,
主要目的是提供開發員一個企業基建架構, 使其更容易開發實用的應用程式.
由於這個目的在 EJB2 時徹底失敗. 更加重開發員的工作.
故 EJB3 的主要目標是修正及改良 EJB2 的問題. 期望能夠真正簡化開發員的工作.


這裡並不打算介紹 EJB2 的不足及 EJB3 增強的特性. 亦不打算對 EJB 作簡介.
因為這些在網路上很容易找到相關的教學. 亦不是這編文章的目的.
這編備忘記主要是實作 Stateless Session Beans HelloWorld.


JBoss 是一個開源的 J2EE 服務器, JBoss 4 版本之後支持 EJB3 ,
當其他 J2EE 應用系統需要重啟動才能檢測發佈時, JBoss 2.0 版本後便提供自動發佈檢測,
這是第一個 J2EE 應用系統提供自動發佈及重發佈檢測. JBoss 3.0 後更增強此功能,
加入自動追蹤與發佈相依的服務. 這特性尤其適合要求高的電信系統.


只要簡單設定 JBoss URL, 就能夠從任何的遠端網絡啟動服務,
這可使得單獨的服務器更容易集中管理分佈式的 JBoss 系統.


JBoss 提供以下遠端呼叫協定:
Fast Socket
Fast Socket over HTTP (HTTP tunneling)
IIOP
JMS
SOAP


備忘記開始:
[1]
安裝 jdk 5
[2] 安裝 JBoss EJB3
[3] 第一次啟動 JBoss
[4] 安裝 Eclipse WTP
[5] 安裝 JBoss IDE
[6] 使用 Eclipse 建立第一個 EJB3 Project [ 即 HelloWorld ]
[7] 建立 HelloWorld Stateless Session Bean 及 Local, Remote interfaces
[8] 建立客戶端測試程式
[9] 使用 ANT 建立 EJB-JAR 並執行 Client 程式


這..這.. 簡稱它為 JBoss EJB3 HelloWorld 9 步曲.


[1] 安裝 jdk 5:
下載 jdk-1_5_0_07-nb-5_0-win-ml.exe
http://java.sun.com/j2se/1.5.0/download-netbeans.html
安裝至 D:\jdk1.5.0_07
新增環境變數 JAVA_HOME=D:\jdk1.5.0_07
D:\jdk1.5.0_07\bin 加入至 PATH 中
D:\jdk1.5.0_07\lib\dt.jar 及 D:\jdk1.5.0_07\lib\tools.jar 加入至 CLASSPATH 中
執行 D:\>java -version
輸出 java version "1.5.0_07" 表示安裝成功.


[2] 安裝 JBoss EJB3:
這裡為了簡化備忘過程, 故使用網上直接執行安裝,
[ 亦可選擇下載 JBoss AS 包 及 EJB3 包安裝 ]
http://jboss.sourceforge.net/jnlp/jboss-4.0.4.GA-installer.jnlp
http://labs.jboss.com/portal/jbossas/download
安裝至 D:\jboss
安裝時必需選擇 ejb3-clustered [ 這很重要 ], 如下圖所示


安裝完後, 新增環境變數 JBOSS_HOME=D:\jboss
D:\jboss\bin 加入至 PATH 中

JBOSS 目錄結構如下所示:
D:\jboss
-- bin
-- client
'-- docs
+-- dtd
-- lib
`-- server
+-- all
+-- mininal
`-- default
+-- conf
+-- data
+-- deploy
-- lib
-- log
+-- tmp
+-- work


bin : JBoss 開關 Scripts.
client : 與JBoss通訊使用的客戶端 libraries ( JARs )
docs : 設定文檔樣本. ( 如資訊庫設定文檔樣本等 )
docs/dtd : JBoss 不同XML 的 Document Type Definitions (DTDs) 檔.
lib : JBoss 啟動時, 會讀取放在這裡被不同配置共享的 libraries.
server : 存放 JBoss 不同配置檔案.
server/default : JBoss 預設的配置檔案.
server/default/conf : JBoss 配置檔案.
server/default/data : JBoss 資料庫檔案.
server/default/deploy : JBoss 自動發佈檢測目錄. ( EBJ-JARs, WARs 及 EARs 放下去, JBoss 會自動檢測 )
server/default/lib : JBoss 啟動此配置目錄時, 會讀取這裡的 libraries.
server/default/log : 存放 JBoss 記錄(日誌)檔案.
server/default/tmp : 存放 JBoss 暫存檔案.
server/default/work : 存放 JBoss 編譯後的java byte code.


[3] 第一次啟動 JBoss:
run.bat -c config-name
[ 這裡使用 ejb3-clustered 安裝, 只能選其中一種, 預設是 default ]
[ config-name 為 mininal , 啟動最小配置模式 ]
[ config-name 為 default , 啟動預設配置模式, 不加任何參數亦是此預設模式 ]
[ config-name 為 all , 啟動全部配置模式 ]


使用預設配置模式, 執行
D:\jboss\bin>run.bat
網頁輸入 http://localhost:8080/ ,出現如下畫面即安裝成功:


如果分開安裝 JBoss AS 及 EJB3 就可以打開下面連結. 網上安裝則沒有此功能.
點擊上圖的 JBoss Web Console 進入JBoss Web控制介面. 如下圖所示:


[4] 安裝 Eclipse WTP:

下載 wtp-all-in-one-sdk-R-1.5.0-200606281455-win32.zip
http://www.eclipse.org/webtools/
http://www.eclipse.org/downloads/download.php?file=/webtools/downloads/drops/R-1.5.0-200606281455/wtp-all-in-one-sdk-R-1.5.0-200606281455-win32.zip
解壓至 D:\eclipse_wtp


[5] 安裝 JBoss IDE:
Eclipse:Help -> Software Updates -> Find and Install -> Search for new features to install
按 New Remote Site
Name: JBOSS IDE
URL: http://download.jboss.org/jbosside/updates/stable
選擇最新的版本然後安裝.


[6] 使用 Eclipse 建立第一個 EJB3 Project [ 即 HelloWorld ]:
Eclipse: File -> New -> Other -> EJB 3.0 -> EJB 3.0 Project
Project Name: HelloWorldEJB3 -> Next
選擇 Create a JBoss configuration
打開後右鍵點選 JBoss 4.0.x -> new
Name : jboss_configuration
JBoss 4.0.x Home Directory : D:\jboss
Server Configuration:default
這裡 JDK 面版裡的 Runtime JRE 要設定 jdk 5 的.
然後按 Apply 及 Close, [ 這裡如果按 Debug 就會在 Eclipse 裡啟動 JBoss ]
設定如下圖所示:

然後按 Finish. HelloWorldEJB3 project 就會成功建立.


[7] 建立 HelloWorld Stateless Session Bean 及 Local, Remote interfaces:
/*----------------------- HelloWorld.java ---------------------*/
package ejb3.joeyta.sessions;
public interface HelloWorld {
public String echo(String msg);
}

/*----------------------- HelloWorld.java ---------------------*/


/*----------------------- HelloWorldLocal.java ----------------*/
package ejb3.joeyta.sessions;
import javax.ejb.Local;
@Local
public interface HelloWorldLocal extends HelloWorld {
}

/*----------------------- HelloWorldLocal.java ----------------*/


/*----------------------- HelloWorldRemote.java ---------------*/
package ejb3.joeyta.sessions;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote extends HelloWorld {
}

/*----------------------- HelloWorldRemote.java ---------------*/


/*----------------------- HelloWorldBean.java -----------------*/
package ejb3.joeyta.sessions;
import javax.ejb.Stateless;
@Stateless
public class HelloWorldBean implements HelloWorldRemote, HelloWorldLocal {
public String echo(String msg) {
System.out.println("Joeyta try Hello World.");
return msg;
}
}

/*----------------------- HelloWorldBean.java -----------------*/


[8] 建立客戶端測試程式:
/*----------------------- HelloWorldClient.java ---------------*/
package ejb3.joeyta.clients;
import javax.naming.InitialContext;
import ejb3.joeyta.sessions.HelloWorld;
public class HelloWorldClient
{
public static void main(String[] args) throws Exception
{
InitialContext ctx = new InitialContext();
HelloWorld helloWorld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
System.out.println(helloWorld.echo("Hello World, Joeyta"));
}
}

/*----------------------- HelloWorldClient.java ---------------*/

目結構如下所示:


[9] 使用 ANT 建立 EJB-JAR 並執行 Client 程式:
在 HelloWorldEJB3 project 下建立 build.xml [ ANT build File ]
內容如下:
<!------------------------- build.xml ------------------------------->
<?xml version="1.0"?>
<project name="JBoss" default="run.HelloWorldClient" basedir=".">
<property environment="env" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="classes.dir" value="bin" />


<path id="classpath">
<fileset dir="${jboss.home}/client">
<include name="**/*.jar" />
</fileset>
<pathelement location="${classes.dir}" />
</path>

<target name="clean">
<delete file="${basedir}/HelloWorld.jar" />
<delete file="${jboss.home}/server/default/deploy/HelloWorld.jar" />
</target>

<target name="ejbjar" depends="clean">
<jar jarfile="HelloWorld.jar">
<fileset dir="${classes.dir}">
<include name="ejb3/joeyta/sessions/*.class" />
</fileset>
</jar>
<copy file="HelloWorld.jar " todir="${jboss.home}/server/default/deploy" />
</target>


<target name="run.HelloWorldClient" depends="ejbjar">
<java classname="ejb3.joeyta.clients.HelloWorldClient" fork="yes" dir=".">
<classpath refid="classpath" />
</java>
</target>
</project>
<!------------------------- build.xml ------------------------------->


點選 build -> Run As -> 2. Ant Build
Eclipse Console 輸出為
Hello World, Joeyta
如下圖所示:


JBoss Console 輸出為
Joeyta try Hello World.
如下圖所示:


這次 JBoss EJB3 HelloWorld 教學己到了終點.
正籌備 EJB3 Statefull Session Bean, Entity Bean , Transaction, Message Driven Bean 教學.
不過我相信有了上面這個起點, 學下去也相當容易.

JBoss EJB3(Stateful Session Beans)備忘記
http://blog.matrix.org.cn/page/joeyta?entry=jboss_ejb3_stateful_session_beans

JBoss EJB3(Entity Beans)備忘記
http://blog.matrix.org.cn/page/joeyta?entry=jboss_ejb3_entity_beans_%E5%82%99%E5%BF%98%E8%A8%98

如果想更了解 EJB3 , 這裡有免費的 Mastering EJB 3.0. 下載.
http://www.theserverside.com/tt/books/wiley/masteringEJB3/index.tss



沒有留言: