发信人: zjxyz(xyz) 
整理人: zjxyz(2001-06-16 10:29:38), 站内信件
 | 
 
 
WebLogic的研究之三--开发、部署EJB(1)
 
 这里不会讨论EJB的概念,只讨论如何编写一个简单EJB,部署EJB,Weblogic与JBuilder的整合,本文先把介绍仅用文本编辑器编写一个最简单的EJB所需要的一切,以让大家一览EJB的概貌,然后才介绍如何把Weblogic与JBuilder整合起来,使用JBuilder开发Weblogic的EJB,我相信这样会得到很好的学习效果,因为这是我学习的路径,当然我会把我遇到的问题告诉大家,以免大家走弯路。
 
 下面是一个最简单的EJB所需要的代码及XML说明,手工制作EJB的JAR包比较麻烦,在WIN2000下,我仿照例子制作了一个 build.cmd 批处理文件
 
 weblogic-ejb-jar.xml
 <?xml version="1.0"?>
 
 <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN' 'http://www.bea.com/servers/wls510/dtd/weblogic-ejb-jar.dtd'>
 
 <weblogic-ejb-jar>
 <weblogic-enterprise-bean>
 <ejb-name>HelloWorldBean</ejb-name>
 <caching-descriptor>
 <max-beans-in-free-pool>100</max-beans-in-free-pool>
 </caching-descriptor>
 <jndi-name>hello.HelloWorld</jndi-name>
 </weblogic-enterprise-bean>
 </weblogic-ejb-jar
 
 
 --------------------------------------------------------------------------------
 ejb-jar.xml 
 <?xml version="1.0" encoding="GBK"?> 
 <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
 
 <ejb-jar>
 <enterprise-beans>
 <session>
 <ejb-name>HelloWorldBean</ejb-name>
 <home>hello.HelloWorldHome</home>
 <remote>hello.HelloWorld</remote>
 <ejb-class>hello.HelloWorldBean</ejb-class>
 <session-type>Stateless</session-type>
 <transaction-type>Container</transaction-type>
 </session>
 </enterprise-beans>
 <assembly-descriptor>
 <container-transaction>
 <method>
 <ejb-name>HelloWorldBean</ejb-name>
 <method-name>*</method-name>
 </method>
 <trans-attribute>Required</trans-attribute>
 </container-transaction>
 </assembly-descriptor>
 </ejb-jar>
 
 
 
 --------------------------------------------------------------------------------
 package hello; 
 import java.rmi.*;
 import javax.ejb.*;
 
 public class HelloWorldBean implements SessionBean {
 private SessionContext sessionContext;
 public void ejbCreate() {
 }
 public void ejbRemove() {
 }
 public void ejbActivate() {
 }
 public void ejbPassivate() {
 }
 public void setSessionContext(SessionContext context) {
 sessionContext = context;
 }
 public String getHelloWorld(){
 return "Hello World!";
 }
 }
 
 
 --------------------------------------------------------------------------------
 HelloWorld.java 
 package hello; 
 import java.rmi.*;
 import javax.ejb.*;
 
 public interface HelloWorld extends EJBObject {
 public java.lang.String getHelloWorld() throws RemoteException;
 }
 
 
 
 --------------------------------------------------------------------------------
 HelloWorldHome.java 
 package hello; 
 import java.rmi.*;
 import javax.ejb.*;
 
 public interface HelloWorldHome extends EJBHome {
 public HelloWorld create() throws RemoteException, CreateException;
 }
 
 
 --------------------------------------------------------------------------------
 
 HelloWorldBean.java
 package hello; 
 import java.rmi.*;
 import javax.ejb.*;
 
 public class HelloWorldBean implements SessionBean {
 private SessionContext sessionContext;
 public void ejbCreate() {
 }
 public void ejbRemove() {
 }
 public void ejbActivate() {
 }
 public void ejbPassivate() {
 }
 public void setSessionContext(SessionContext context) {
 sessionContext = context;
 }
 public String getHelloWorld(){
 return "Hello World!";
 }
 }
 
 
 --------------------------------------------------------------------------------
 
 HelloWorldBeanClient1.java
 package hello;
 
 import javax.naming.*;
 import javax.rmi.PortableRemoteObject;
 
 public class HelloWorldBeanClient1 {
 private static final String ERROR_NULL_REMOTE = "Remote interface reference is null. It must be created by calling one of the Home interface methods first.";
 private static final int MAX_OUTPUT_LINE_LENGTH = 50;
 private boolean logging = true;
 private HelloWorldHome helloWorldHome = null;
 private HelloWorld helloWorld = null;
 
 /**Construct the EJB test client*/
 public HelloWorldBeanClient1() {
 long startTime = 0;
 if (logging) {
 log("Initializing bean access.");
 startTime = System.currentTimeMillis();
 }
 
 try {
 //get naming context
 Context ctx = new InitialContext();
 
 //look up jndi name
 Object ref = ctx.lookup("HelloWorld");
 
 //cast to Home interface
 helloWorldHome = (HelloWorldHome) PortableRemoteObject.narrow(ref, HelloWorldHome.class);
 if (logging) {
 long endTime = System.currentTimeMillis();
 log("Succeeded initializing bean access.");
 log("Execution time: " + (endTime - startTime) + " ms.");
 }
 
 HelloWorld hello=helloWorldHome.create();
 String str=hello.getHelloWorld();
 System.out.println(str);
 }
 catch(Exception e) {
 if (logging) {
 log("Failed initializing bean access.");
 }
 e.printStackTrace();
 }
 }
 
 //----------------------------------------------------------------------------
 // Methods that use Home interface methods to generate a Remote interface reference
 //----------------------------------------------------------------------------
 
 public HelloWorld create() {
 long startTime = 0;
 if (logging) {
 log("Calling create()");
 startTime = System.currentTimeMillis();
 }
 try {
 helloWorld = helloWorldHome.create();
 if (logging) {
 long endTime = System.currentTimeMillis();
 log("Succeeded: create()");
 log("Execution time: " + (endTime - startTime) + " ms.");
 }
 }
 catch(Exception e) {
 if (logging) {
 log("Failed: create()");
 }
 e.printStackTrace();
 }
 
 if (logging) {
 log("Return value from create(): " + helloWorld + ".");
 }
 return helloWorld;
 }
 
 //----------------------------------------------------------------------------
 // Methods that use Remote interface methods to access data through the bean
 //----------------------------------------------------------------------------
 
 public String getHelloWorld() {
 String returnValue = "";
 if (helloWorld == null) {
 System.out.println("Error in getHelloWorld(): " + ERROR_NULL_REMOTE);
 return returnValue;
 }
 long startTime = 0;
 if (logging) {
 log("Calling getHelloWorld()");
 startTime = System.currentTimeMillis();
 }
 
 try {
 returnValue = helloWorld.getHelloWorld();
 if (logging) {
 long endTime = System.currentTimeMillis();
 log("Succeeded: getHelloWorld()");
 log("Execution time: " + (endTime - startTime) + " ms.");
 }
 }
 catch(Exception e) {
 if (logging) {
 log("Failed: getHelloWorld()");
 }
 e.printStackTrace();
 }
 
 if (logging) {
 log("Return value from getHelloWorld(): " + returnValue + ".");
 }
 return returnValue;
 }
 
 //----------------------------------------------------------------------------
 // Utility Methods
 //----------------------------------------------------------------------------
 
 private void log(String message) {
 if (message.length() > MAX_OUTPUT_LINE_LENGTH) {
 System.out.println("-- " + message.substring(0, MAX_OUTPUT_LINE_LENGTH) + " ...");
 }
 else {
 System.out.println("-- " + message);
 }
 }
 /**Main method*/
 
 public static void main(String[] args) {
 HelloWorldBeanClient1 client = new HelloWorldBeanClient1();
 // Use the client object to call one of the Home interface wrappers
 // above, to create a Remote interface reference to the bean.
 // If the return value is of the Remote interface type, you can use it
 // to access the remote interface methods. You can also just use the
 // client object to call the Remote interface wrappers.
 }
 }
 
 
 
 --------------------------------------------------------------------------------
 
 build.cmd
 
 if "" == "%JAVA_HOME%" set JAVA_HOME=\java
 if "" == "%WL_HOME%" set WL_HOME=\weblogic
 set MYSERVER=%WL_HOME%\myserver
 set MYCLASSPATH=%JAVA_HOME%\lib\classes.zip;%WL_HOME%\classes;%WL_HOME%\lib\weblogicaux.jar;%MYSERVER%\clientclasses
 
 @REM Create the build directory, and copy the deployment descriptors into it
 mkdir build build\META-INF
 copy *.xml build\META-INF
 
 @REM Compile ejb classes into the build directory (jar preparation)
 javac -d build -classpath %MYCLASSPATH% HelloWorld.java HelloWorldHome.java HelloWorldBean.java
 
 @REM Make a standard ejb jar file, including XML deployment descriptors
 cd build
 jar cv0f std_ejb_HelloWorld.jar META-INF hello
 cd ..
 
 @REM Run ejbc to create the deployable jar file
 java -classpath %MYCLASSPATH% -Dweblogic.home=%WL_HOME% weblogic.ejbc -compiler javac build\std_ejb_HelloWorld.jar %MYSERVER%\ejb_Hello.jar
 
 @REM Compile ejb interfaces & client app into the clientclasses directory
 javac -d %MYSERVER%\clientclasses -classpath %MYCLASSPATH% HelloWorld.java HelloWorldHome.java HelloWorldBeanClient1.java
 
 
 --------------------------------------------------------------------------------
 
 
 
 
 作者:XYZ※版权所有,转载请注明来源【CGI编程设计室】
 
 
  ---- ############################
 【CGI编程设计室】
 http://zjxyz.yeah.net
 现在全力研究JAVA开发
 免费提供站长自行编写的CGI下载。
 OICQ:5452479 
 电子邮件:[email protected]
                      XYZ
 ############################    | 
 
 
 |