免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1456 | 回复: 0
打印 上一主题 下一主题

EJB 3.0 会话BEAN [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-18 14:53 |只看该作者 |倒序浏览
                            我们 一起 开始 接触 EJB 3.0的 学习过程

   EJB 是 基于组件开发的 一个 平台 : 全称 Enterprise Java Bean 企业级的 JAVA baen
   EJB 有三种BEAN 组成:会话BEAN,消息驱动BEAN,实体BEAN
   开发工具:MyEclipse+JBoss 4.0.2
   下面 我们通过实例来讲解:
          会话bean, 我们在了解 会话bean的时候 必须 弄清楚的一个  概念 就是 :本地和远程
   本地 你 所运行的程序和 EJB部署服务器 运行在一个 JVM下面,比如 一个 WEB 工程 你要部署到 JBOSS 下面,你的 EJB也是部署到 JBOSS下面 所以 这样 就 是 使用的 一个 JVM 属于本地 ,其他则是 属于 远程(Remote)的

   使用 本地 的使用  设置 attribute name="UseJBossWebLoader">trueattribute> 意思 是 不使用 tomcat来启动 WEB加载 而使用 jboss 这个时候 就保证了 EJB 和 WEB工程 都 在 JBOSS下面 保证了本地调用的正确
   
  编写会话BEAN 的 步骤:
   第一:开发接口
   第二:开发BEAN
   第三:发布到 服务器
   第四:开发客户端 (需要加入JAR包 在 jboss/client目录下面的全部JAR包都拷贝进去)
   第五:开启服务 调用
会话bean分类 :
         有状态的(stateful)和  无状态的(stateless)
         有状态是指每一次 取得的bean都保存了自己的状态 对应与 spring的 原型bean,而无状态的不保存自己的状态 对应于spring的单态bean
下面 开发第一个 EJB:
第一步:

   
package com.ly;
import javax.ejb.Remote;
@Remote
public interface RemoteInterface_1 {
   public void setName(String name);
   public String getName();
}
package com.ly;
import javax.ejb.Local;
@Local
public interface LocalInterface_2 {
   public int getAge();
}
把接口开发号拉
第二:
  开发bean

package com.ly.impl;
import javax.ejb.Stateless;
import com.ly.LocalInterface_2;
import com.ly.RemoteInterface_1;
@Stateless(name="HE") //指定JNDI 名字 默认的是 HelloImpl/remote 和HelloImpl/local
public class HelloImpl implements RemoteInterface_1,LocalInterface_2{
    String name;
    int age;
    public String getName() {
        return this.name;
    }
    public int getAge() {
            return 20;
    }
    public void setName(String name){
        this.name=name;        
    }
}
第三步:
   部署 到jboss
第四步:
   jndi.properties 拷贝到 工程的 classpath里面
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.ly.RemoteInterface_1;
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

     try {
            
            Context context = new InitialContext(); //创建 JNDI 上下文
            
            RemoteInterface_1 remote=(RemoteInterface_1)context.lookup("HE/remote");
            remote.setName("今天 是个好日子");
            System.out.println(remote.getName());
            
            RemoteInterface_1 remote_1=(RemoteInterface_1)context.lookup("HE/remote");
            System.out.println(remote.getName());        
            //这个 就是 无状态的 会话BEAN 它不记录 状态 也就相当与 spring 的 单例bean
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
第五步:
运行结果是:

DEBUG [main] (SecurityAssociation.java:143) - Using ThreadLocal: false
DEBUG [main] (MicroSocketClientInvoker.java:243) - SocketClientInvoker[14a55f2, socket://127.0.0.1:3873] constructed
DEBUG [main] (MicroRemoteClientInvoker.java:240) - SocketClientInvoker[14a55f2, socket://127.0.0.1:3873] connecting
DEBUG [main] (MicroRemoteClientInvoker.java:245) - SocketClientInvoker[14a55f2, socket://127.0.0.1:3873] connected
DEBUG [main] (ClientSocketWrapper.java:169) - reset timeout: 0
DEBUG [main] (InvokerRegistry.java:595) - removed SocketClientInvoker[14a55f2, socket://127.0.0.1:3873] from registry
DEBUG [main] (MicroSocketClientInvoker.java:276) - SocketClientInvoker[14a55f2, socket://127.0.0.1:3873] disconnecting ...
DEBUG [main] (SocketWrapper.java:123) - ClientSocketWrapper[Socket[addr=/127.0.0.1,port=3873,localport=1125].19e15c] closing
DEBUG [main] (MicroSocketClientInvoker.java:243) - SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] constructed
DEBUG [main] (MicroRemoteClientInvoker.java:240) - SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] connecting
DEBUG [main] (MicroRemoteClientInvoker.java:245) - SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] connected
DEBUG [main] (ClientSocketWrapper.java:169) - reset timeout: 0
DEBUG [main] (InvokerRegistry.java:595) - removed SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] from registry
DEBUG [main] (MicroSocketClientInvoker.java:276) - SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] disconnecting ...
DEBUG [main] (SocketWrapper.java:123) - ClientSocketWrapper[Socket[addr=/127.0.0.1,port=3873,localport=1126].1d62270] closing
今天 是个好日子
DEBUG [main] (MicroSocketClientInvoker.java:243) - SocketClientInvoker[e1899b, socket://127.0.0.1:3873] constructed
DEBUG [main] (MicroRemoteClientInvoker.java:240) - SocketClientInvoker[e1899b, socket://127.0.0.1:3873] connecting
DEBUG [Finalizer] (MicroSocketClientInvoker.java:276) - SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] disconnecting ...
DEBUG [main] (MicroRemoteClientInvoker.java:245) - SocketClientInvoker[e1899b, socket://127.0.0.1:3873] connected
DEBUG [Finalizer] (MicroSocketClientInvoker.java:276) - SocketClientInvoker[11a75a2, socket://127.0.0.1:3873] disconnecting ...
DEBUG [main] (ClientSocketWrapper.java:169) - reset timeout: 0
DEBUG [main] (InvokerRegistry.java:595) - removed SocketClientInvoker[e1899b, socket://127.0.0.1:3873] from registry
DEBUG [main] (MicroSocketClientInvoker.java:276) - SocketClientInvoker[e1899b, socket://127.0.0.1:3873] disconnecting ...
DEBUG [main] (SocketWrapper.java:123) - ClientSocketWrapper[Socket[addr=/127.0.0.1,port=3873,localport=1127].c39a20] closing
今天 是个好日子

我们开发的是一个 无状态的 会话BEAN 所以  第二次 从EJB容器 取出 BEAN的时候 得到的结果也是 “今天 是个好日子”
错误 提示:
    注意  如果 EJB没有指定 JNDI名字 则为 EJB名字/remote|local
    如果  指定 stateless(name="HE") 就是 HE/remote 这样用的 远程bean


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93826/showart_1903258.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP