举两个随处可见的例子说说 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());
}
}
<?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;
}
/** *//**
*TestEJB组件的本地接口,
*/
public interface TestLocal extends java.ejb.EJBLocalObject...{
//用于返回成功消息的方法
public String test();
}
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;
}
package com.ejb2.test
/** *//**
*TestEJB组件的本地Home接口
*/
public interface TestLocalHome extends javax.ejb.EJBLocalHome...{
//创建EJB对象
TestLocal create() throws javax.ejb.CreateException;
}
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---------";
}
}
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("
本文对比了EJB2.x与EJB3.0的开发步骤,EJB3.0简化了许多复杂的接口定义和配置,使得开发者可以更专注于业务逻辑的编写。通过具体代码示例展示了两者的不同。
50

被折叠的 条评论
为什么被折叠?



