我的第一个EJB程序

一个简单的HELLO例子

1、安装Weblogic
     
使用的EJB服务是BEAweblogic8.1,下载BEAweblogic8.1,然后安装。安装步骤省略。  

2、定义EJB远程接口(Remote Interface):
      
任何一个EJB都是通过Remote Interface被调用,EJB开发者首先要在Remote Interface中定义这个EJB可以被外界调用的所有方法。执行Remote Interface的类由EJB生成工具生成。
  以下是HelloBeanRemote Inteface程序:

package com.leo
import java.rmi.RemoteException

import java.rmi.Remote

import javax.ejb.*

public interface Hello extends EJBObject, Remote {
//this method just get "Hello EJB" from HelloEJB.
public String getHello
() throws RemoteException

}

3、定义Home Interface

EJB容器通过EJBHome Interface来创建EJB实例,和Remote Interface一样,执行Home Interface的类由EJB生成工具生成。 以下是HelloEJB Home Interface程序:

package com.leo

import javax.ejb.*
import java.rmi.Remote

import java.rmi.RemoteException

import java.util.*

/**
* This interface is extremely simple it declares only
* one create method.
*/
public interface HelloHome extends EJBHome {

public Hello create() throws CreateException,
RemoteException

}

4、写EJB

EJB类中,编程者必须给出在Remote Interface中定义的远程方法的具体实现。EJB类中还包括一些 EJB规范中定义的必须实现的方法,这些方法都有比较统一的实现模版,编程者只需花费精力在具体业务方法的实现上。

以下是HelloEJB的代码:

package com.leo;
import javax.ejb.*;
public class HelloEJB implements SessionBean{
    public void ejbCreate(){}
    public void ejbRemove(){}
    public void ejbActivate(){}
    public void ejbPassivate(){}
    public void setSessionContext(SessionContext ctx){}
    public String getHello() {
         return new String("Hello,EJB");
    }
}

5、创建ejb-jar.xml文件

  ejb-jar.xml文件是EJB的部署描述文件,包含EJB的各种配置信息,如是有状态BeanStateful Bean 还是无状态BeanStateless Bean),交易类型等。ejb-jar.xml文件的详细信息请参阅EJB规范。以下是HelloBean的配置文件:

?xml version="1.0"?
!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.2//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_2.dtd"
ejb-jar
enterprise-beans
session
ejb-nameHello/ejb-name
homecom.leo.HelloHome/home
remotecom.leo.Hello/remote
ejb-classcom.leo.HelloEJB/ejb-class
session-typeStateless/session-type
transaction-typeContainer/transaction-type
/session
/enterprise-beans
/ejb-jar

6、创建weblogic-ejb-jar.xml

 <?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>
 <description><![CDATA[Generated by XDoclet]]></description>
   <weblogic-enterprise-bean>
      <ejb-name>Hello</ejb-name>
      <stateless-session-descriptor>
      </stateless-session-descriptor>
      <reference-descriptor>
      </reference-descriptor>

      <jndi-name>Hello</jndi-name>
      <local-jndi-name>HelloLocal</local-jndi-name>
   </weblogic-enterprise-bean>

</weblogic-ejb-jar>

7、部署和编译

          EJBjar包是由class文件和描述文件组成,对于weblogic服务器来说还要增加weblogic-ejb-jar.xml描述文件。编译Java源文并将编译后classejb-jar.xmlweblogic-ejb-jar.xml打包到Hello.jar

7.1:创建目录build

7.2:在build下新建目录META-INF,把文件ejb-jar.xmlweblogic-ejb-jar.xml拷到META-INF下。

7.3:把编译好的class文件拷到build目录下(此时为com/leo/Hello.class,HelloEJB.class,HelloHome.class)。

7.4:打包成jar文件: jar -cvf hello.jar *.*

7.5:再将hello.jar文件部署到weblogic服务器中。

8、写客户端调用程序

您可以从Java ClientJSPServlet或别的EJB调用HelloBean
调用EJB有以下几个步骤:
通过JNDIJava Naming Directory Interface)得到EJB Home Interface
通过EJB Home Interface 创建EJB对象,并得到其Remote Interface
通过Remote Interface调用EJB方法

以下是一个从Java Client中调用HelloBean的例子:

package ejb.hello
import javax.naming.Context

import javax.naming.InitialContext

import java.util.Hashtable

import javax.ejb.*

import java.rmi.RmoteException

/**
* @author Copyright
c 2000 by Apusic, Inc. All Rights Reserved.
*/
public class HelloClient {
    public static void main
String args[]{
        String url = "rmi://localhost:7100"

          Context initCtx = null

          HelloHome hellohome = null

          try {
                  Hashtable env = new Hashtable
();
                  env.put
Context.INITIAL_CONTEXT_FACTORY,"com.apusic.jndi.InitialContextFactory");
                  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 {
                  Object obj=ctx.lookup("Hello");
                  HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
                  Hello hello = hellohome.create
();
                  String s = hello.getHello
();
                  System.out.println
s);
         }catch
Exception e{
                  System.out.println
e.getMessage());
                  System.exit
1);
        }
    }
}

  运行HelloClient,可得到以下输出:
  Hello EJB

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值