本文以 J2EE SDK 1.4 + WebLogic 8.1 為執行環境,示範無狀態 Session Bean 的完整開發、編譯、打包、部署與測試流程,適合初學者快速上手 EJB 2.x 開發。
HelloHome)package ejb.hello;
import javax.ejb.*;
import java.rmi.RemoteException;
public interface HelloHome extends EJBHome {
Hello create() throws CreateException, RemoteException;
}
Hello)package ejb.hello;
import javax.ejb.EJBObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends EJBObject, Remote {
String getHello() throws RemoteException;
String getStr() throws RemoteException;
}
HelloBean)package ejb.hello;
import javax.ejb.*;
import java.rmi.RemoteException;
public class HelloBean implements SessionBean {
private SessionContext ctx;
private static final boolean VERBOSE = true;
public void ejbCreate() { if (VERBOSE) System.out.println("ejbCreate"); }
public void ejbActivate() { if (VERBOSE) System.out.println("ejbActivate"); }
public void ejbPassivate() { if (VERBOSE) System.out.println("ejbPassivate"); }
public void ejbRemove() { if (VERBOSE) System.out.println("ejbRemove"); }
public void setSessionContext(SessionContext ctx) { this.ctx = ctx; }
public String getStr() throws RemoteException {
return "...My First EJB Test!!...";
}
}
package ejb.hello;
import javax.naming.*;
import javax.ejb.*;
import java.util.Hashtable;
import java.rmi.RemoteException;
public class HelloClient {
public static void main(String[] args) {
String url = "t3://localhost:7001";
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
Context ctx = new InitialContext(env);
HelloHome home = (HelloHome) ctx.lookup("HelloHome");
Hello hello = home.create();
System.out.println(hello.getStr());
} catch (Exception e) { e.printStackTrace(); }
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
<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>
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>Hello</ejb-name>
<jndi-name>HelloHome</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
javac -d build *.java 編譯至 build 目錄。build/META-INF,放入上述兩個 XML 檔。jar cvf Hello2.jar META-INF ejb 產生標準 EJB JAR。java weblogic.ejbc -compiler javac build/Hello2.jar build/Hello.jar 執行 WebLogic EJB 編譯器產生廠商專用 JAR。https://localhost:7001/console),部署 Hello.jar。cd build
java ejb.hello.HelloClient
主控台輸出 Bean 回傳字串即代表部署成功。
掌握 Home/Remote/Bean 三介面、標準與廠商描述檔、ejbc 編譯、Console 部署五大關鍵點,即能在 WebLogic 上順利運行 Session EJB。後續可延伸至有狀態 Bean、CMP Entity Bean 與交易屬性微調。