MyEclipse开发EJB2之CMP实体bean - whistler - BlogJav...

来源:百度文库 编辑:神马文学网 时间:2024/04/28 16:47:19
MyEclipse开发EJB2之CMP实体bean
图改日加上,公司上网速度让人哪个汉阿
数据库表用的是oracle的scott示范帐号下dept
1 创建一个EJB工程
1.        File > New > Project.
或在Package Explorer 中点右键,单击new,选择Project
或ctrl+new 选择 EJB Project
2.        选择J2EE目录下 EJB Project
3.        选择 Next >.
输入工程名称,如dept ,单击finish完成。
2    创建一个CMP EJB2 Entity Bean
1.        主界面选择菜单File > New > Other,打开新建向导。
或在Package Explorer 中点右键,单击new,选择Other
或ctrl+new 选择 MyEclipse > ejb>EJB2 Entity Bean
2.        展开MyEclipse > ejb 文件夹,选择> EJB2 Entity Bean。
3.        选择Next>,界面如下。这里要注意,package建议用.ejb后缀,因为XDoclet工具默认ejb bean所在的文件夹以.ejb后缀,接口文件的文件夹以.interface为后缀,为了避免设置上的麻烦,建议按默认情况取名。当然你也可以通过设置XDoclet属性改变,详情请查看帮助文档。
4.             输入package : com.entity.cmp.ejb
5.             输入ejb name: dept
6.             选择是容器管理事务(CMP)还是bean自己管理事务(BMP),这里选择CMP 2.x。
7.             选择是远程(remote)还是本地(local),还是两者皆是(both),这里选择远程。
8.             选择Finish 完成操作,生成Dept.java:
9.             添加自己的代码:
第一步 添加实体bean与数据库表映射字段的读写方法
/**
*@ejb.interface-methodview-type   ="remote"
*@ejb.persistence      column-name="deptNo"
*/
publicabstract Integer getDeptNo();
/**
*@ejb.interface-methodview-type   ="remote"
*/
publicabstractvoid setDeptNo(Integer deptno);
/**
*@ejb.interface-methodview-type   ="remote"
*@ejb.persistence      column-name="dName"
*/
publicabstract String getDName();
/**
*@ejb.interface-methodview-type   ="remote"
*/
publicabstractvoid setDName(String name);
/**
*@ejb.interface-methodview-type   ="remote"
*@ejb.persistence      column-name="loc"
*/
publicabstract String getLoc();
/**
*@ejb.interface-methodview-type   ="remote"
*/
publicabstractvoid setLoc(String loc) ;
注解1:在每个方法前加@ejb.interface-methodview-type   ="remote"的作用是在自动生成remote接口时生成相应的方法,如:
public java.lang.Integer getDeptNo( )
throwsjava.rmi.RemoteException;
publicvoid setDeptNo( java.lang.Integer deptno )
throwsjava.rmi.RemoteException;
你也可以自己手动把这些方法加到remote接口里!
注解2:在某个方法前加@ejb.persistence      column-name="loc"的作用是在自动生成weblogic-cmp-rdbms-jar.xml和ejb-jar.xml两个部署文件时生成如下红色代码部分,你也可以自己手写红色代码部分。


Dept

Dept
 
deptNo
deptNo


dName
dName


loc
loc







Name for Dept
Dept
com.entity.cmp.interfaces.DeptHome
com.entity.cmp.interfaces.Dept
com.entity.cmp.ejb.Dept
Container
com.entity.cmp.interfaces.DeptPK

False
2.x
Dept



deptNo



dName



loc




第二步添加自己的 ejbCreate
/**
*用于实现数据持久化(插入数据库)
* @ejb.create-method
**/
public Integer ejbCreate(Integer deptid,String deptName,String deptLoc )
{
setDeptNo(deptid);
setDName(deptName);
setLoc(deptLoc);
returnnull;
}
第三步添加相应的参数相同的ejbPostCreateejbCreate
publicvoid ejbPostCreate(Integer deptid,String deptName,String deptLoc ){ }
3.     用XDoclet自动生成接口文件、部署描述文件
3.1.  为工程配置XDoclet
1.         右键单击工程名字,打开工程的properties窗口。
选择菜单Properties > MyEclipse > XDoclet。
2.        在build选项卡中选择 Use dynamic build specification 和 jdk1.4.2
3.        单击Add Standard,选择Standard EJB。
4.        单击Standard EJB,展开ejbdoclet树菜单,取消dataobject,entitycmp,entitypk和valueobject选项如下图:
5   为服务器配置XDoclet,该配置是为了自动生成weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml文件。
右击ejbdoclet 选择 Add 。
我这里用的是weblogic8.1,所以选择weblogic。
l         设置属性destDir = src/META-INF。 (weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml生成位置)
l         设置属性datasoruce =你在weblogic中配置的数据源jndi名称。
生成weblogic-cmp-rdbms-jar.xml中的:
aptechJNDI
5.3.  运行XDoclet生成文件
在工程上右键MyEclipse->Run XDoclet
生成前后工程目录应该类似为:
同时增加了weblogic-ejb-jar.xml,weblogic-cmp-rdbms-jar.xml,和ejb-jar.xml三个部署文件
生成远程接口,home接口和实用类。
l         注意:DeptHome.java即home接口前有个红色的叉,我们需要修改它,把com.entity.cmp.interfaces.DeptPK改成Integer,因为我们的bean的主键很简单就是deptno,在数据库中是个number(2)类型的,所以用Integer就可以了,而不用在定义一个com.entity.cmp.interfaces.DeptPK。
public com.entity.cmp.interfaces.Dept findByPrimaryKey(com.entity.cmp.interfaces.DeptPK pk)
throws javax.ejb.FinderException,java.rmi.RemoteException;
l         修改ejb-jar.xml:
1.       在中添加红色代码部分,指定某列为主键;把的值改成java.lang.Integer和主键的类型一致。


Name for Dept
Dept
com.entity.cmp.interfaces.DeptHome
com.entity.cmp.interfaces.Dept
com.entity.cmp.ejb.Dept
Container
java.lang.Integer
False
2.x
Dept


deptNo



dName



loc

deptNo

2.在中添加红色部分,配置事务属性



Dept
*

Required


5.4.  部署EJB
1.        MyEclipse >Add and Remove Project Deployments
2.        点击add,添加部署服务器weblogic。
Entity Bean编写到此结束
编写客户端程序
1.         新建一个java project。
2.         为工程配置classpath
l         右键单击该工程名 > build path > configer builder path > add class folder 选择
上面创建的ejb工程的classes目录点击ok。

右击上面创建的ejb工程的src目录 > 选择export(导出)> 选择jar file >如下图单击select the export destination 栏目的browse选择存储地址。然后右键单击该工程名 > build path > configer builder path > add external jars 选择你刚导出的jar文件,加入到classpath
l         然后右键单击该工程名 > build path > configer builder path > add external jars 选择D:"Program Files"bea"weblogic81"server"lib"weblogic.jar,加入到java class path中
3.         创建一个class:Client.java
publicclass Client {
protected String serverUrl;
protected String jndiName;
protected DeptHome home;
/**
*构造方法:根据服务器地址端口和ejb部署的jndiname初始化类域,获得EJBHome
*@paramurl
*@paramjndiName
*@throwsNamingException
*/
public Client(String url, String jndiName) throws NamingException {
this.jndiName = jndiName;
this.serverUrl = url;
home = lookupHome();
}
/**
*获得初始化上下文环境(javax.naming.Context)实例从服务器JNDItree.
*/
private Context getInitialContext() throws NamingException {
try {
// Get an InitialContext
Hashtable h = new Hashtable();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, serverUrl);
returnnew InitialContext(h);
} catch (NamingException ne) {
log("我们无法通过该地址:"
+ serverUrl
+ "获得一个到 WebLogic server 的连接!/"
+ "We were unable to get a connection to the WebLogic server at "
+ serverUrl);
log("请确保该服务器是启动的。/Please make sure that the server is running.");
throw ne;
}
}
/**
*通过JNDI服务查找bean的home接口,并返回/Lookupthebean'shomeinterfaceusingJNDI.
*/
private DeptHome lookupHome() throws NamingException {
Context ctx = getInitialContext();
try
{
Object home = (DeptHome) ctx.lookup(jndiName);
return (DeptHome) PortableRemoteObject.narrow(home, DeptHome.class);
} catch (NamingException ne) {
log("客户端无法获得EJBHome。"
+ "请确保你已经用"""+ jndiName+"""这个JNDI name在"
+ serverUrl
+ "的WebLogic server上部署了此ejb");
log("The client was unable to lookup the EJBHome. Please make sure " +
"that you have deployed the ejb with the JNDI name " +
"ejb/DeptHome on the WebLogic server at "+serverUrl);
throw ne;
}
}
/**
*打印日志
*
*@params
*/
privatestaticvoid log(String s) {
System.out.println(s);
}
publicstaticvoid main (String args[])
{
log("开始客户端测试:");
String url = "t3://localhost:7001";
String jndi = "ejb/Dept"; // 来自weblogic-ejb-jar.xml的ejb/Dept
Client client = null;
// 如果给了main参数则用main方法的参数
if(args.length==1)
{
url = args[0];
}
try
{
client = new Client(url,jndi);
DeptHome home = client.home;
log("获得DeptHome!");
PortableRemoteObject.narrow(home.create(new Integer(1),"java","zhengzhou"), Dept.class);
log("成功创建编号为1的部门!");
log("开始执行home.findByPrimaryKey根据主键(部门编号)1执行部门查询!");
Dept dept;
dept = (Dept) PortableRemoteObject.narrow(home.findByPrimaryKey(new Integer(1)),Dept.class);
Integer no = dept.getDeptNo();
String name = dept.getDName();
String loc = dept.getLoc();
log("部门编号"t部门名字"t位置");
log(no +""t"+name +""t"+loc);
log("game over");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassCastException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CreateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FinderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
发表于 2008-04-08 19:13whistler 阅读(1275)评论(5)  编辑  收藏
360pskdocImg_0