EJB的bean类型

于Ejb3的Ejb bean类型介绍,有三种类型:Session bean,Entity Bean和MessageDriven bean(Mbean)。

Session Bean定义 
用于实现业务逻辑,分为stateful bean(有状态的Session Bean)和Stateless Bean(无状态的Session Bean)。每当Client发出request时,容器就会查找对应的Session Bean来做响应。

Stateful Bean 
  1.特点 
可以保持每个客户端在请求处理中调用所有方法的状态。对于复杂业务的处理,尤其重要。例如:在在线购物系统中,每个客户都拥有购物车(Stateful bean),而装载的货物和货物的数量在Session Bean中通过方法来操作。因此,对于Stateful bean而言,系统需要用更多的内存来分配给bean,在性能不如Stateless Bean.  

Stateless bean 
   1. 特点 
    不能保留处理过程中状态。所有的事务处理在一个方法中处理完成,并且能与其它用户共享信息。正因为如此,其性能较高。一般在实际应用中,都会进行序列化(Searialize). 


JBOSS+EJB的例子

首先配置好JBoss,使其可用。安装后可需要需要配置一下JBOSS_HOME使其指向JBoss安装目录 
JBOSS_HOME:D:\jboss-4.0.5.GA 
在运行里将JBoss启动,输入D:\jboss-4.0.5.GA\bin\run -c all 
新建一个Java EE项目,EJB模块,这个例子只建一个SessionBean 
建一个Util包,包里建一个接口Session一个类SessionBean。类实现接口的方法。

  1. package Util;  
  2. import java.util.List;  
  3. public interface Session {  
  4.     public List select();  
  1. package Util;  
  2.   
  3. import javax.ejb.Remote;  
  4. import javax.ejb.Stateless;  
  5.   
  6. @Stateless  
  7. @Remote({Session.class})  
  8. public class SessionBean implements Session {  
  9.     public List select() {  
  10.         List list = new ArrayList();  
  11.         String sql = "select * from NewOrder";  
  12.         Connection cn = null;  
  13.         PreparedStatement pst = null;  
  14.         ResultSet rs = null;  
  15.         try {  
  16.             cn = getConnection();  
  17.             pst = cn.prepareStatement(sql);  
  18.             rs = pst.executeQuery();  
  19.             while(rs.next()){  
  20.                 List list1 = new ArrayList();  
  21.                 list1.add(rs.getString(1));  
  22.                 list1.add(rs.getString(2));  
  23.                 list1.add(rs.getString(3));  
  24.                 list1.add(rs.getString(4));  
  25.                 list1.add(rs.getString(5));  
  26.                 list1.add(rs.getString(6));  
  27.                 list.add(list1);  
  28.             }  
  29.         } catch (SQLException ex) {  
  30.             Logger.getLogger(SessionBean.class.getName()).log(Level.SEVERE, null, ex);  
  31.         } finally{  
  32.             closeResultSet(rs);  
  33.             closePreparedStatement(pst);  
  34.             closeConnection(cn);  
  35.         }  
  36.         return list;  
  37.     }  
  38. }  
搞定之后生成jar包 
导入到$JBOSS_HOME\server\all\deploy里面 
写一个测试类 

  1. import Util.Session;  
  2. import java.util.List;  
  3. import java.util.Properties;  
  4. import java.util.logging.Level;  
  5. import java.util.logging.Logger;  
  6. import javax.naming.InitialContext;  
  7. import javax.naming.NamingException;  
  8.   
  9. public class NewJFrame {  
  10.     Session se;  
  11.   
  12.     public NewJFrame() {  
  13.         se = getSession();  
  14.     }  
  15.     public Session getSession(){  
  16.         Session session = null;  
  17.         Properties prop = new Properties();  
  18.         prop.setProperty("java.naming.factory.initial""org.jnp.interfaces.NamingContextFactory");  
  19.         prop.setProperty("java.naming.provider.url""10.10.10.199:1099");  
  20.         prop.setProperty("java.naming.factory.url.pkgs""org.jboss.naming");  
  21.         InitialContext ict;  
  22.         try {  
  23.             ict = new InitialContext(prop);  
  24.             session = (Session) ict.lookup("SessionBean/remote");  
  25.         } catch (NamingException ex) {  
  26.             Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);  
  27.         }  
  28.         return session;  
  29.     }  
  30.     public static void main(String args[]) {  
  31.         NewJFrame nf = new NewJFrame();  
  32.         List list = nf.se.select();  
  33.     }  
  34.   
  35. }  


你可能感兴趣的:(EJB的bean类型)