程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 以weblogic為服務器開發會話EJB

以weblogic為服務器開發會話EJB

編輯:關於JAVA

開發運行環境:j2eesdk1.4+weblogic8.1

說明:本試驗已開發一個會話EJB為例,系統采用的應用服務器為weblogic8.1

1、編寫bean代碼(代碼的目錄在c:\ejbhello下)

① 定義Home Interface

EJB容器通過EJB的Home Interface來創建EJB實例,和Remote Interface一樣,執行Home Interface的類由EJB生成工具生成。代碼如下:

package ejb.hello;
import javax.ejb.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.*;
/**
*只定義create方法
*/
public interface HelloHome extends EJBHome {
public Hello create() throws CreateException,
RemoteException;
}

②定義EJB遠程接口(Remote Interface)

任何一個EJB都是通過Remote Interface被調用,首先要在Remote Interface中定義這個EJB可以被外界調用的所有方法。執行Remote Interface的類由EJB生成工具生成,試驗的代碼如下:

package ejb.hello;
import java.rmi.RemoteException;
import java.rmi.Remote;
import javax.ejb.*;
public interface Hello extends EJBObject, Remote {
//定義供遠程調用的業務邏輯方法
public String getHello() throws RemoteException;
public String getStr() throws RemoteException;
}

③ EJB類的實現

在EJB類中,必須給出在Remote Interface中定義的遠程方法的具體實現。EJB類中還包括一些EJB規范中定義的必須實現的方法,這些方法都有比較統一的實現模版,只需花費精力在具體業務方法的實現上。試驗的代碼如下:

package ejb.hello;
import javax.ejb.*;
import java.util.*;
import java.rmi.*;
//類的實現
public class HelloBean implements SessionBean {
static final boolean verbose = true;
private SessionContext ctx;
// Implement the methods in the SessionBean
// interface
public void ejbActivate() {
if (verbose)
System.out.println("ejbActivate called");
}
public void ejbRemove() {
if (verbose)
System.out.println("ejbRemove called");
}
public void ejbPassivate() {
if (verbose)
System.out.println("ejbPassivate called");
}
//Sets the session context.
public void setSessionContext(SessionContext ctx) {
if (verbose)
System.out.println("setSessionContext called");
this.ctx = ctx;
}
/**
* This method corresponds to the create method in
* the home interface HelloHome.java.
* The parameter sets of the two methods are
* identical. When the client calls
* HelloHome.create(), the container allocates an
* instance of the EJBean and calls ejbCreate().
*/
public void ejbCreate () {
if (verbose)
System.out.println("ejbCreate called");
}
//以下業務邏輯的實現
public String getStr()
throws RemoteException
{
return("...My First EJB Test??Lenper_xie...!");
}
}

④會話Bean的代碼完成後,編寫客戶端,代碼如下:

package ejb.hello;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
import javax.ejb.*;
import java.rmi.RemoteException;
/**
*用weblogic
*/
public class HelloClient{
public static void main(String args[]){
String url = "t3://localhost:7001";
Context initCtx = null;
HelloHome hellohome = null;
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
initCtx = new InitialContext(env);
}catch(Exception e){
System.out.println("Cannot get initial context: " + e.getMessage());
System.exit(1);
}
try{
hellohome = (HelloHome)initCtx.lookup("HelloHome");
Hello hello = hellohome.create();
String s = hello.getStr();
System.out.println(s);
}catch(Exception e){
System.out.println(e.getMessage());
System.exit(1);
}
}
}

2、將代碼進行編譯

先在c:\ejbhello目錄下建一個目錄build,然後執行編譯命令如下:

javac ?Cd build *.java //-d build 表示編譯後的class放到build目錄下

編譯完之後會在build建立包的文件夾。

3、創建ejb-jar.xml部署描述文件

ejb-jar.xml文件是EJB的部署描述文件,包含EJB的各種配置信息,如是有狀態Bean(Stateful Bean) 還是無狀態Bean(Stateless Bean),交易類型等。以下是HelloBean的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<description>Sidney.Xie EJB Test example</description>
<display-name>>Sidney.Xie EJBTest</display-name>
<small-icon></small-icon>
<large-icon></large-icon>
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<home>ejb.hello.HelloHome</home>
<remote>ejb.hello.Hello</remote>
<ejb-class>ejb.hello.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Hello</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>

4、創建weblogic-ejb-jar.xml文件

此文件適用於weblogic部署是用的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>Hello</ejb-name>
<jndi-name>HelloHome</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>

5、創建jar文件用於部署到服務器上

在創建jar文件之前要將文件的目錄設定好,首先在ejbhello\build 建立一子目錄META-INF,將weblogic-ejb-jar.xml文件和ejb-jar.xml要放到該目錄下,然後制作jar文件.命令如下:

jar cvf Hello2.jar META-INF ejb //將META-INF和包ejb中的文件打包

6、創建能部署到weblogic上的jar文件

由於不同的廠商的應用服務器有不同的機制,所以要分別制作個服務器所識別的jar文件,試驗中使weblogic,使用以下命令:

java weblogic.ejbc -complier javac build\Hello2.jar build\Hello.jar

7、部署EJB到weblogic

首先要啟動weblogic服務,然後在浏覽器中輸入http://localhost:7001/console,打開網頁後輸入帳號和密碼進入weblogic的控制台,在控制台中可以部署EJB,畫面如下:

進入部署頁面後根據提示將Hello.jar文件部署到服務器上去,會有顯示部署成功。

8、測試結果

在命令行執行client端程序來測試,進入目錄build下,執行命令java ejb.hello.HelloClient

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved