EJB enterance

http://ajava.org/course/ejb/15636.html

http://davidgjy.javaeye.com/blog/672198

 

http://www.docin.com/p-66374394.html

http://www.docin.com/p-56736292.html

 

http://www.cn-doc.com/_soft_java_tech_doc/2006_02_23_16/20060223161000755.htm

 

下面有个简单的例子:

 

1 定义接口:
1.1 扩展EJBObject接口

1 package ejbtest01;
2 
3 import java.rmi.RemoteException;
4 import javax.ejb.EJBObject;
5 
6 public interface ConvertEjb extends EJBObject {
7     public double getRmb(double usd) throws RemoteException;
8 }

 


1.1 扩展 EJBHome接口

 

1 package ejbtest01;
2 
3 import java.rmi.RemoteException;
4 import javax.ejb.CreateException;
5 import javax.ejb.EJBHome;
6 
7 public interface ConvertEjbHome extends EJBHome {
8  public ConvertEjb create() throws CreateException, RemoteException; 
9 }


2 定义SessionBean,ejbCreate()至少要有一个

 1 package ejbtest01;
 2 
 3 import java.rmi.RemoteException;
 4 import javax.ejb.EJBException;
 5 import javax.ejb.SessionBean;
 6 import javax.ejb.SessionContext;
 7 
 8 public class ConvertEjbBean implements SessionBean {
 9  SessionContext sessionContext;
10 
11  // ejbCreate(…)方法 它可以初始化Enterprise Bean
12  // 可以定义不同的ejbCreate(…)方法,每个方法所带的参数不同
13  // 但是,必许要存在至少一种。
14  public void ejbCreate() {
15  }
16 
17  public void ejbActivate() throws EJBException, RemoteException {
18 
19  }
20 
21  public void ejbPassivate() throws EJBException, RemoteException {
22 
23  }
24 
25  public void ejbRemove() throws EJBException, RemoteException {
26 
27  }
28 
29  public void setSessionContext(SessionContext arg0) throws EJBException,
30    RemoteException {
31   this.sessionContext = sessionContext;
32  }
33 
34  //用于调用的方法
35  public double getRmb(double usd) {
36   double rate = 6.98;
37   double rmb = rate * usd;
38   return rmb;
39  }
40 
41 }


 

3 定义客户端JDK 使用1.4
3.1 定义一个工厂

 1 package ejbtest01;
 2 
 3 import java.util.Hashtable;   
 4 import javax.naming.Context;   
 5 import javax.naming.InitialContext;   
 6   
 7 public class EjbFactory {   
 8   public static Object getEjbHome(String jndiName) throws Exception {   
 9     //连接到Weblogic   
10     Hashtable map = new Hashtable();   //JDK 使用1.4
11     map.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");   
12     //指定了weblogic服务器的名称(IP),远程调用体现在这里   
13     map.put(Context.PROVIDER_URL,"t3://localhost:7001");   
14     map.put(Context.SECURITY_PRINCIPAL,"weblogic");   
15     map.put(Context.SECURITY_CREDENTIALS,"weblogic");   
16   
17     Context context = new InitialContext(map);   
18     //根据JNDI名称查找,查到的就是home接口   
19     Object obj = context.lookup(jndiName);   
20   
21     return obj;   
22   }   
23 }  


 

3.2 定义客户端

 1 package ejbtest01;
 2 
 3 import ejbtest01.ConvertEjb;   
 4 import ejbtest01.ConvertEjbHome;   
 5 import javax.rmi.PortableRemoteObject;   
 6   
 7 public class Client{   
 8   public static void main(String args[]) throws Exception {   
 9     Object obj = EjbFactory.getEjbHome("jndi/ConvertEjb");
10   
11     //ConvertEjbHome home = (ConvertEjbHome)obj; 性能不好   
12     ConvertEjbHome home = (ConvertEjbHome)PortableRemoteObject.narrow(obj,ConvertEjbHome.class);   
13     ConvertEjb remote = home.create();   
14   
15     double usd = 456;   
16     double rmb = remote.getRmb(usd);   
17     System.out.println("人民币数量: " + rmb);   
18   
19   }   
20 }  



4 配置ejb-jar.xml和weblogic-ejb-jar.xml
4.1 配置ejb-jar.xml

 

<?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>
  
<display-name>EjbTestModule1</display-name>
  
<enterprise-beans>
    
<session>
      
<display-name>ConvertEjb</display-name>
      
<ejb-name>ConvertEjb</ejb-name>
      
<home>ejbtest01.ConvertEjbHome</home>
      
<remote>ejbtest01.ConvertEjb</remote>
      
<ejb-class>ejbtest01.ConvertEjbBean</ejb-class>
      
<session-type>Stateless</session-type>
      
<transaction-type>Container</transaction-type>
    
</session>
  
</enterprise-beans>
  
<assembly-descriptor>
    
<container-transaction>
      
<method>
        
<ejb-name>ConvertEjb</ejb-name>
        
<method-name>*</method-name>
      
</method>
      
<trans-attribute>Required</trans-attribute>
    
</container-transaction>  
  
</assembly-descriptor>
</ejb-jar>


 

4.2 配置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>
  
<weblogic-enterprise-bean>
    
<ejb-name>ConvertEjb</ejb-name>
    
<stateless-session-descriptor>
      
<pool>
        
<max-beans-in-free-pool>42</max-beans-in-free-pool>
      
</pool>
      
<stateless-clustering>
        
<stateless-bean-is-clusterable>true</stateless-bean-is-clusterable>
        
<stateless-bean-methods-are-idempotent>true</stateless-bean-methods-are-idempotent>
      
</stateless-clustering>
    
</stateless-session-descriptor>
    
<transaction-descriptor>
      
<trans-timeout-seconds>20</trans-timeout-seconds>
    
</transaction-descriptor>
    
<enable-call-by-reference>true</enable-call-by-reference>
    
<jndi-name>jndi/ConvertEjb</jndi-name>
  
</weblogic-enterprise-bean>
  
<idempotent-methods>
    
<method>
      
<ejb-name>ConvertEjb</ejb-name>
      
<method-name>getRmb</method-name>
      
<method-params>
        
<method-param>double</method-param>
      
</method-params>
    
</method>
  
</idempotent-methods>
</weblogic-ejb-jar>


 打成jar包之后再放到domain中application文件夹中,并通过weblogic来部署,这样就可以执行客户端程序了。

 

posted @ 2011-02-23 16:09  kelin1314  阅读(317)  评论(0编辑  收藏  举报