`
squall140
  • 浏览: 140882 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

EJB2.x和EJB3.0开发步骤的不同之处

    博客分类:
  • EJB
 
阅读更多

举两个随处可见的例子说说 EJB2.x和EJB3.0开发步骤的不同之处,这两个例子只是为了清楚的说明它们开发步骤的不同之处,不保证能够运行,例子的显示输出结果在eclipse的控制台中显示。

        先说说EJB3.0吧: 

        EJB3.0,不需要创建Home和对象接口,不需要组件接口(javax.ejb.SessionBean和javax.ejb.MessageDrivenBean),使用java元数据注释(@?  其中“?“表示注释名),简化了EJB环境的API。

       EJB3.0开发步骤:
       1. 编写业务代码,Bean类
       2. 生成部署描述符
       3. 将2,3打包成Ejb-jar文件
       4. 部署Ejb-jar文件到容器,查看EJB容器看是否部署成功
       5. 编写执行客户应用
       与其相关的小例子:
1.创建一个业务接口 Test.java类
package com.ejb.interface
/**
   * Test的业务接口
   
*/

public interface Test {
           
/**
              * @return返回成功消息给用户 
              
*/

            
public String test();
}

2.创建一个无状态会话bean     TestBean.java类

package com.ejb.bean
import javax.ejb.Remote;
import javax.ejb.Stateless;
/**
   * 无状态会话Bean
   
*/

@Stateless
@Remote(Test.
class)
public class TestBean implements Test {
    
public String test() {
        System.
out.println("test()");
        
return "------sucess------";
    }

}

3.调用test()方法    TestClient.java

package com.ejb.bean.client
import javax.naming.Context;
import javax.naming.InitialContext;
/**
 * 调用远程的无状态会话bean
 
*/

 
public class TestClient{
      
public static void main(String[] args)throws Exception{
     
/**
         * 初始化上下文 jndi
         
*/

     Context c 
= new InitialContext();     
     Test test 
= (Test)c.lookup("com.ejb.interface.Test");
     
/**
        * 调用Bean实例的test()方法,并将结果在控制台输出
        
*/

     System.out.println(test.test());
        }

 }
4.部署描述符
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="3.0" 
xmlns
="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
>
</ejb-jar>

 

          下面看看EJB2.x的开发步骤吧,看完下面这个就会觉得EJB3.0真的简化了很多啊^_^。

1.远程接口 Test.java

package com.ejb2.test
/**
 *TestEJB组件的远程接口,
 
*/

public interface Test extends java.ejb.EJBObject{
    
//用于返回成功消息的方法
    public String test() throws java.rmi.RemoteException;
}
2.本地接口 TestLocal.java
/**
 *TestEJB组件的本地接口,
 
*/

public interface TestLocal extends java.ejb.EJBLocalObject{
    
//用于返回成功消息的方法
    public String test();
}
3.Home接口 TestHome.java
package com.ejb2.test
/**
 *TestEJB组件的Home接口,
 ×create()()方法方法对应于TestBean中的ejbCreate
 
*/

public interface TestHome extends javax.ejb.EJBHome{
    
//创建EJB对象
    Test create() throws java.rmi.RemoteException,javax.ejb.CreateException;
}
4.本地Home接口
package com.ejb2.test
/**
 *TestEJB组件的本地Home接口
 
*/

public interface TestLocalHome extends javax.ejb.EJBLocalHome{
    
//创建EJB对象
    TestLocal create() throws javax.ejb.CreateException;
}

5.Bean类 TestBean.java
package com.ejb2.test
/**
 *无状态会话Bean
 
*/

public class TestBean implements javax.ejb.SessionBean{
    
private javax.ejb.SessionContext ct;
    
//EJB规范要求的实现
    public void ejbCreate(){
        System.out.println(
"ejbCreate()");
    }

    
public void ejbRemove(){
        System.out.println(
"ejbRemove()");
    }
    
    
public void ejbActivate(){
        System.out.println(
"ejbActivate()");
    }
    
    
public void ejbPassivate(){
        System.out.println(
"ejbPassivate()");
    }
    
    
public void setSessionContext(javax.ejb.SessionContext ct){
      
this.ct=ct;
    }
    
    
//业务方法
    public String test(){
        System.out.println(
"test()");
        
return "--------sucess---------";
    }

}
6.EJB应用 TestClient.java
package com.ejb2.test
/**
 *客户端代码,调用TestEJB组件中的业务方法
 
*/

 
public class TestClient{
 
 
public static void main(String[] args)throws Exception{
     
//设定jndi属性信息
     Properties pp = System.getProperties();
     }
   
     
//初始化上下文
     Context ct =  new InitialContext(pp);
     
//引用到Home对象,创建EJB对象工厂
     Object obj = ct.lookup("package com.ejb2.test.TestHome");
     
// 转换成RMI-IIOP对象操作
     TestHome th = (TestHome)javax.rmi.PortableRemoteObject.narrow(obj,TestHome.class);
     
//创建Home EJB对象
     Test test = test.create();
     
//调用EJB对象的test()方法,并在控制台显示结果
     System.out.println(test.test());]
     
//销毁EJB对象
     test.remove();
}

7.部署描述符
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="3.0" 
xmlns
="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">
 <enterprise-Beans>
   
<session>
        
<ejb-name>TestEJB</ejb-name>
        
<home>com.ejb2.test.TestHome</home>
        
<local-home>com.ejb2.test.TestLocalHome</local-home>
        
<local>com.ejb2.test.Testbean</local>
        
<session-type>Stateless</session-type>
        
<transaction-type>Container</transaction-type>
    
</session> 
 
</enterprise-Beans>    
</ejb-jar>

 

        是不是发现EJB3.0的开发步骤简化了许多呢,我刚接触EJB2.1的时候,开它的开发步骤看的我晕乎乎的,不过幸好当时边做项目边学它,很快就把它的开发步骤给弄通了,当我接触到EJB3.0的时候,就放开始学习3.0而把2.1的学习基本上放弃了。个人认为,即使以前没有接触过EJB2.x,也不影响你学习EJB3.0,没有接触过EJB的人,完全可以直接学习EJB3.0,而不用先学EJB2.x在学EJB3.0。    

   从上面例子的比较可以看出EJB2.x ,EJB3.0业务方法调用变得不同了。

       2.x本地客户和远程客户通过home接口创建了本地(本地home接口)或远程(远程home接口)EJB对象引用,EJB对象会生成EJB Home接口和EJB对象接口对应的实现。 客户通过本地或远程EJB对象接口调用业务方法。调用EJB Bean类中的业务方法前,容器生成的EJB对象会调用容器专有的API来获得中间件服务,在调用EJB Bean类的业务方法后,容器生成的EJB对象会调用容器专有的API来获得中间件服务。

        3.0用业务接口来代替本地和远程的Home接口,本地客户和远程客户都通过业务接口调用EJB组件的业务方法。在调用EJB Bean类的业务方法时也做了改变,调用EJB Bean类的业务方法前,EJB容器会生成包裹类,调用EJB Bean类的业务方法前后,都会通过EJB容器成生的包裹类调用容器专有的API来获得中间件服务。

分享到:
评论

相关推荐

    EJB3.0快速入门项目开发步骤

    快速入门EJB的实例和介绍,通过环境安装配置介绍,特定的EJB实例以及容易出现问题的解决,可以快速入门使用EJB。

    EJB 3.0 学习资料

    轻松搞定EJB 3.0 详细描述了初学EJB 3.0时所需要的配置及开发步骤! 开发实例代码。

    演示EJB3.0 + JPA + MySQL5.0 + C3P0连接池技术实战编程(Top-Down的XP开发方式)

    如果运行一切正常,那么你会看到使用EJB 3.0组件与JPA技术层技术完成的Hello world演示应用。 注意:配置JBoss服务器和调试的动作参见readme.txt文档,有详细说明怎样匹配连接池,以及可能遇到的问题及解决办法。该...

    Java/JavaEE 学习笔记

    一、开发struts1应用的基本步骤...283 二、Struts的工作流程......................284 三、struts-config.xml配置文件中主要的元素和属性.........286 四、RequestProccessor.....................287 五、Struts1...

    J2EE学习笔记(J2ee初学者必备手册)

    一、开发struts1应用的基本步骤...283 二、Struts的工作流程......................284 三、struts-config.xml配置文件中主要的元素和属性.........286 四、RequestProccessor.....................287 五、Struts1...

    使用JBoss 4.2书写EJB3.0无状态会话Bean + JPA + MySql 5.0的Hello World Java EE应用

    使用Eclipse 3.4 Ganymede开发EJB3.0的JavaEE应用比较简化和方便。该示例使用EJB 3.0的无状态会话Bean呼叫JPA持久层完成数据库的操作,推荐广大企业级Java程序员项目中使用。 注意:连接池的配置参见上一个资源...

    Spring攻略(第二版 中文高清版).part2

    11.11.2 解决方案 472 11.11.3 工作原理 472 11.12 使用GORM查询 475 11.12.1 问题 475 11.12.2 解决方案 475 11.12.3 工作原理 475 11.13 创建自定义标记 477 11.13.1 问题 477 11.13.2 解决方案...

    J2EE应用开发详解

    208 11.7.1 基于容器管理事务 209 11.7.2 基于Bean管理的事务 210 11.8 EJB拦截器 212 11.9 EJB定时服务 214 11.10 EJB安全管理 214 11.11 小结 216 第12章 RMI 217 12.1 RMI简介 217 12.1.1 RMI的架构 218 12.1.2 ...

    Spring攻略(第二版 中文高清版).part1

    11.11.2 解决方案 472 11.11.3 工作原理 472 11.12 使用GORM查询 475 11.12.1 问题 475 11.12.2 解决方案 475 11.12.3 工作原理 475 11.13 创建自定义标记 477 11.13.1 问题 477 11.13.2 解决方案...

    使用Annotation并对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    现在Annotation越来越流行,最近一段时间也学了一些,EJB3.0、Hibernate、Spring等都很好地支持Annotation,而且熟悉了Annotation的话整个项目开发时间会缩短,代码封装比较好,但是封装带来的就是代码阅读就比较...

    整理后java开发全套达内学习笔记(含练习)

    Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的方法) [,әuvә'raid] polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) ...

    InstallAnywhere v5.5.1--专业、强大的安装工具

    摘要 用于制作应用软件的安装程序,支持任何开发平台,灵活性强,性能突出,对JAVA程序的支持也相当完善。 组件列表 技术特性 &#9830;;;;&nbsp;;;;通用安装、配置和客户化 ·在终端用户的系统上,将文件和...

    JAVA自学之路

    EJB3.0,java在走了很多弯路后的回归之作,值得研究。 SOA,业界铁定的未来趋势,要紧紧跟随。 在后面,我会告诉你每一步的学习方法和学习重点。 JAVA自学之路 三:要动手 无论如何,请坚持不懈的...

Global site tag (gtag.js) - Google Analytics