于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。类实现接口的方法。
- package Util;
- import java.util.List;
- public interface Session {
- public List select();
- }
- package Util;
-
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
-
- @Stateless
- @Remote({Session.class})
- public class SessionBean implements Session {
- public List select() {
- List list = new ArrayList();
- String sql = "select * from NewOrder";
- Connection cn = null;
- PreparedStatement pst = null;
- ResultSet rs = null;
- try {
- cn = getConnection();
- pst = cn.prepareStatement(sql);
- rs = pst.executeQuery();
- while(rs.next()){
- List list1 = new ArrayList();
- list1.add(rs.getString(1));
- list1.add(rs.getString(2));
- list1.add(rs.getString(3));
- list1.add(rs.getString(4));
- list1.add(rs.getString(5));
- list1.add(rs.getString(6));
- list.add(list1);
- }
- } catch (SQLException ex) {
- Logger.getLogger(SessionBean.class.getName()).log(Level.SEVERE, null, ex);
- } finally{
- closeResultSet(rs);
- closePreparedStatement(pst);
- closeConnection(cn);
- }
- return list;
- }
- }
搞定之后生成jar包
导入到$JBOSS_HOME\server\all\deploy里面
写一个测试类
- import Util.Session;
- import java.util.List;
- import java.util.Properties;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
-
- public class NewJFrame {
- Session se;
-
- public NewJFrame() {
- se = getSession();
- }
- public Session getSession(){
- Session session = null;
- Properties prop = new Properties();
- prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
- prop.setProperty("java.naming.provider.url", "10.10.10.199:1099");
- prop.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
- InitialContext ict;
- try {
- ict = new InitialContext(prop);
- session = (Session) ict.lookup("SessionBean/remote");
- } catch (NamingException ex) {
- Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
- }
- return session;
- }
- public static void main(String args[]) {
- NewJFrame nf = new NewJFrame();
- List list = nf.se.select();
- }
-
- }