ejb开发实例

 刚开始学习ejb,依据基本原理编写一个ejb小例子,有想学习ejb的欢迎大家一块学习指导!

my QQ

243067750

 


1 新建ejb项目
   1、Remote(或Local)接口

package com.terry.ejbsample;

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface Hello extends EJBObject {
 
 public String getHello(String s) throws RemoteException;//远程调用的接口方法


}


   2、Home(或LocalHome)接口

package com.terry.ejbsample;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface HelloHome extends EJBHome {

 

 Hello create() throws RemoteException, CreateException;

 

}


   3、企业Bean ,具体的业务实现类

package com.terry.ejbsample;

import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class HelloBean implements SessionBean {


 public String getHello(String s) {     //具体的业务实现方法
  return s;
  
 }

 public void ejbCreate() throws CreateException {
  System.out.println("Bean created");
 }

 public void ejbRemove() {
 }

 public void ejbActivate() {
 }

 public void ejbPassivate() {
 }

 public void setSessionContext(SessionContext ctx) {
 }
}


编写配置文件(放在ejb项目的meta-inf文件夹下面)
ejb-jar.xml

http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
 version="2.1">
 
  
   HelloName                                 //ejb名称
   com.terry.ejbsample.HelloHome           //ejb本地接口类
   com.terry.ejbsample.Hello               //ejb远程接口类
   com.terry.ejbsample.HelloBean   //ejb具体业务实现类

   Stateful
   Container
  
 

配置文件jboss.xml
 


 
   
        HelloName            //ejb名称

        HelloHome          //JNDI名称

   

 


打包ejb项目,使用myeclipse打包。生成ejb.jar


编写测试项目:


  新建web项目testEJB

   测试项目中加入jar。
     1 首先把ejb包加入。
原因是:

   
   
  在生成ejb后应该已经建立了本地接口和远程接口,在部署ejb时websphere或

其他ejb容器会根据这两个接口自动生成本地接口类和远程接口类。  
   
  所以你不用实现这两个接口类,但必须在开发客户端的时候将这两个接口的类

文件放到你的客户端工程中。  
   
  客户端申请本地接口时,web容器根据自己生成的本地接口类返回一个类实例

,本地接口类实现了本地接口。通过本地接口,你可以建立远程接口的实例,通

过本地接口的create方法,此时web容器会根据自己生成的远程接口类返回一个

类实例,远程接口类实现了远程接口。  
   
  而本地接口类和远程接口类的实例其实是存在于服务器中,你的客户端只是远

程调用这些类的商业方法


   2 把jboss下面的client里面的jar包全部引用到测试项目的lib下面。

 

 

 

 编写测试类

package com.lovo.servlet;
import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

import com.terry.ejbsample.Hello;
import com.terry.ejbsample.HelloHome;

public class HelloClient {
 
 public static void main(String[] args)
   {

 
        try {
   java.util.Properties p = new

java.util.Properties();
   p.put(Context.INITIAL_CONTEXT_FACTORY,
      

"org.jnp.interfaces.NamingContextFactory");
   p.put(Context.URL_PKG_PREFIXES,

"jboss.naming:org.jnp.interfaces");
   p.put(Context.PROVIDER_URL, "localhost:1099");
   
   Context jndiContext = new InitialContext(p);
   Object ref = jndiContext.lookup("HelloHome");
   HelloHome home = (HelloHome)

PortableRemoteObject.narrow(ref, HelloHome.class);


   Hello hh = home.create();
   
   String  s = hh .getHello("springking你真棒");
     System.out.println("ejb " + s);
   
  } catch (ClassCastException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NamingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (CreateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 

   }
}

 

你可能感兴趣的:(WEB)