Eclipse快速上手EJB -- 2. 设计一个实体Bean

这个系列文章我是根据 Rick Hightower 发表在 IBM 网站的文章 EJB - CMP/CMR 介绍》 改编而成的,看这篇文章前一定要参考一下,这样理解起来很方便。关于 CMP 方面的知识我不说了,我这里只是介绍如何使用 Lomboz 和 JBoss-IDE 在Eclipse 中开发 CMP。
在看这篇文章之前,需要对开发环境的配置了解清楚,这一点我在前篇文章《 Eclipse快速上手EJB -- 1. Lomboz + JBoss-IDE 配置1+2 》中已经详细介绍了,这篇文章就是以它为前提进行的。
一、JBoss相关配置
在《 快速上手 MySQL --图形化操作详解》 中谈到的mysql-connector-java-3.0.16-ga.zip现在有了用场,将其解压,会发现其中有一个文件 mysql-connector-java-3.0.16-ga-bin.jar,它就是 MySQL的驱动程序。把它复制到F:\java\jboss\server\default\lib 目录下,这里 F:\java\jboss 是JBoss的安装目录。
从jboss\docs\examples\jca\目录下复制mysql-ds.xml文件到jboss\server\default\deploy目录,需要做一点修改。

mysql-ds.xml

<? xml version="1.0" encoding= "UTF-8" ?>

<!-- $Id: mysql-ds.xml,v 1.3 2004/09/15 14:37:40 loubyansky Exp $ -->
<!-- Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
-->

< datasources >
< local-tx-datasource >
< jndi-name >MySqlDS </ jndi-name >
< connection-url >jdbc:mysql://localhost:3306/cmp_sample?useUnicode=true&amp;characterEncoding=GBK </ connection-url >
< driver-class >com.mysql.jdbc.Driver </ driver-class >
< user-name >root </ user-name >
< password >javamxj </ password >

<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
< metadata >
< type-mapping >mySQL </ type-mapping >
</ metadata >
</ local-tx-datasource >

</ datasources >
这是修改后的文件,很简单,注意用户名和密码替换成自己的,还有就是使用的数据库是“ cmp_sample”, 如果没有这个数据库,那么先在MySQL中建立它。使用GBK进行编码,解决了中文问题(结合《 快速上手 MySQL --图形化操作详解》中 MySQL 的配置)。
二、建立项目
新建一个 Lomboz J2EE Project:
·项目名:CMP_Sample
·EJB Modules:cmpEJB
·Targeted Server: JBoss 4.0.0
继续在 CMP_Sample 项目中,右击“src” ->新建 ->Lomboz EJB Creation Wizard :
·包(K) :javamxj.ejb.cmp
·名称(M): User
·EJB Type:选择ContainerManaged EntityEJB
点击下一步。
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第1张图片
同样,再增加一个密码栏:
·Field: password,
· Field Type: java.lang.String,
· Database Column: 密码,
· SQL Type: varchar
这个不要使它成为主键。
最后点击完成。
三、验证配置
· 现在修改生成的 UserBean.java 文件,先添加自动创建表的语句
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第2张图片
· 注意:如果使用自动创建表的语句,这里有个bug:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第3张图片
好了,现在来试验一下各种配置有没有问题:
· 先将 UserBean.java 添加到 cmpEJB 模块中,然后 lomboz -> Generate EJB Classes 生成其它ejb类文件(建议看看生成的文件,弄清楚 XDoclet 的原理)。
· 运行 MySQl 服务,再通过 Lomboz启动 JBoss 服务器。
· 然后通过 Deploy Module 部署 cmpEJB 模块,再打开MySql的客户端,会发现在 cmp_sample 数据库中已经自动生成了一个 usertable 的数据表,如图:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第4张图片
如果能顺利进行到这一步,那么各种配置都没问题,再开始下一阶段。
完成 ejbCreate 和 ejbPostCreate 方法:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第5张图片
在上面的 @ejb.bean 中添加 view-type = "local"
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第6张图片
保存,UserBean 暂时告一段落。
四、创建会话Bean
右击 javamxj.ejb.cmp包,还是选择Lomboz EJB Creation Wizard :
·包(K) :javamxj.ejb.cmp
·名称(M): UserManagement
·EJB Type:选择Stateless
然后,点击“完成”,这时会生成一个 UserManagementBean.java 的文件
首先,增加一个 UserLocalHome 的变量 userHome,
private UserLocalHome userHome = null;
然后右击 UserManagementBean ->J2EE ->AddCreate Method(这是 JBossv-IDE 附带的):
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第7张图片
下一步:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第8张图片
在生成的代码框中添加语句:
userHome = UserUtil.getLocalHome();
如下图:需要手工输入的语句已经标出来了:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第9张图片
添加业务方法
· 增加 addUser 方法,向上面操作一样,右击 UserManagementBean ->J2EE -> AddBusiness Method
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第10张图片
在生成的代码框中添加语句:
UserLocal user = userHome.create(email, password);
· 增加 removeUser 方法
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第11张图片
在生成的代码框中添加语句:
userHome.remove(email);
· 增加verifyPassword 方法
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第12张图片
在生成的代码框中添加语句:
UserLocal user = userHome.findByPrimaryKey(email);
return user.getPassword().equals(password);
为了将 UserBean 与 UserManagementBean 联系起来,在上面注释中添加:
* view-type = "remote"
* @ejb.ejb-ref ejb-name = "User"
* view-type = "local"
* ref-name = "ejb/UserLocal"
*
* @jboss.ejb-local-ref ref-name = "UserLocal"
* jndi-name = "UserLocal"
如图:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第13张图片
好了,UserManagementBean 暂时完成了。
将 UserManagementBean 加入到 cmpEJB 模块中,
·然后 lomboz -> Generate EJB Classes
· 运行 MySQl 服务,再通过 Lomboz启动 JBoss 服务器。
· 然后通过 Deploy Module 部署 cmpEJB 模块
如果一切正常,那么开始创建客户端。
五、创建客户端
· 右击 src文件夹 ->新建 ->Lomboz EJB Test Client Wizard:
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第14张图片
· 修改生成的 CMPClient1.java
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第15张图片
· 运行客户端程序,则客户端控制台会输出:Login =true
· 同时,用 MySQL 客户端软件查看 cmp_sample 表,则如下,显示3条数据。
Eclipse快速上手EJB -- 2. 设计一个实体Bean_第16张图片
六、完整的源码

UserBean.java

/*
 * 创建日期 2005-1-14
 *
 * 作者:javamxj(分享java快乐)
 */
package javamxj.ejb.cmp;
/**
 *
 * <!-- begin-user-doc --> You can insert your documentation for '<em><b>UserBean</b></em>'. <!-- end-user-doc --> *
 <!--  begin-lomboz-definition -->
 <?xml version="1.0" encoding="UTF-8"?>
 <lomboz:EJB xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:lomboz="http://lomboz.objectlearn.com/xml/lomboz">
 <lomboz:entity>
 <lomboz:entityEjb>
 <j2ee:display-name>User</j2ee:display-name>
 <j2ee:ejb-name>User</j2ee:ejb-name>
 <j2ee:ejb-class>javamxj.ejb.cmp.UserBean</j2ee:ejb-class>
 <j2ee:persistence-type>Container</j2ee:persistence-type>
 <j2ee:prim-key-class>java.lang.String</j2ee:prim-key-class>
 <j2ee:cmp-version>2.x</j2ee:cmp-version>
 <j2ee:abstract-schema-name>userSchema</j2ee:abstract-schema-name>
 <j2ee:primkey-field>eamil</j2ee:primkey-field>
 </lomboz:entityEjb>
 <lomboz:fieldMappings>
 <lomboz:fieldName>email</lomboz:fieldName>
 <lomboz:fieldType>java.lang.String</lomboz:fieldType>
 <lomboz:columnName>电子邮件</lomboz:columnName>
 <lomboz:jdbcType>VARCHAR</lomboz:jdbcType>
 <lomboz:sqlType>varchar</lomboz:sqlType>
 <lomboz:readOnly>false</lomboz:readOnly>
 <lomboz:primaryKey>true</lomboz:primaryKey>
 </lomboz:fieldMappings>
 <lomboz:fieldMappings>
 <lomboz:fieldName>password</lomboz:fieldName>
 <lomboz:fieldType>java.lang.String</lomboz:fieldType>
 <lomboz:columnName>密码</lomboz:columnName>
 <lomboz:jdbcType>VARCHAR</lomboz:jdbcType>
 <lomboz:sqlType>varchar</lomboz:sqlType>
 <lomboz:readOnly>false</lomboz:readOnly>
 <lomboz:primaryKey>false</lomboz:primaryKey>
 </lomboz:fieldMappings>
 <lomboz:tableName>userTable</lomboz:tableName>
 <lomboz:dataSourceName></lomboz:dataSourceName>
 </lomboz:entity>
 </lomboz:EJB>
 <!--  end-lomboz-definition -->
 *
 * <!-- begin-xdoclet-definition -->
 * @ejb.bean name="User"
 * jndi-name="User"
 * type="CMP"
 *  primkey-field="email" 
 *  schema="userSchema" 
 *  cmp-version="2.x"
 *  view-type = "local"
 *  data-source=""
 * 
 *  @ejb.persistence 
 *   table-name="userTable" 
 * 
 * @ejb.finder 
 *    query="SELECT OBJECT(a) FROM userSchema as a"  
 *    signature="java.util.Collection findAll()"  
 * 
 * @jboss.persistence create-table = "true"
 *                    remove-table = "false"
 *
 * @ejb.pk class="java.lang.String"
 * <!-- end-xdoclet-definition -->
 * @generated
 **/
public abstract class UserBean implements javax.ejb.EntityBean {
  /**
   * @ejb.create-method
   */
  public java.lang.String ejbCreate(String email, String password) throws javax.ejb.CreateException {
    // EJB 2.0 spec says return null for CMP ejbCreate methods.
 setEmail(email);
 setPassword(password);
 return null;
  }
  /**
   * The container invokes this method immediately after it calls ejbCreate.
   */
  public void ejbPostCreate(String email, String password) throws javax.ejb.CreateException {
  }
  /**
   * CMP Field email
   * @return the email
   * @ejb.persistent-field 
   * @ejb.persistence
   *    column-name="电子邮件"
   *     jdbc-type="VARCHAR"
   *     sql-type="varchar(64)"
   *     read-only="false"
   * @ejb.pk-field 
   *
   * @ejb.interface-method
   */
  public abstract java.lang.String getEmail();
  /**
   * @param java.lang.String the new email value
   * @ejb.interface-method
   */
  public abstract void setEmail(java.lang.String email);
  /**
   * CMP Field password
   * @return the password
   * @ejb.persistent-field 
   * @ejb.persistence
   *    column-name="密码"
   *     jdbc-type="VARCHAR"
   *     sql-type="varchar(64)"
   *     read-only="false" 
   *
   * @ejb.interface-method
   */
  public abstract java.lang.String getPassword();
  /**
   * @param java.lang.String the new password value
   * @ejb.interface-method
   */
  public abstract void setPassword(java.lang.String password);
}

UserManagementBean.java

/*
 * 创建日期 2005-1-14
 *
 * 作者:javamxj(分享java快乐)
 */
package javamxj.ejb.cmp;
/**
 *
 * <!-- begin-user-doc --> A generated session bean <!-- end-user-doc --> *
 <!-- lomboz.beginDefinition -->
 <?xml version="1.0" encoding="UTF-8"?>
 <lomboz:EJB xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:lomboz="http://lomboz.objectlearn.com/xml/lomboz">
 <lomboz:session>
 <lomboz:sessionEjb>
 <j2ee:display-name>UserManagement</j2ee:display-name>
 <j2ee:ejb-name>UserManagement</j2ee:ejb-name>
 <j2ee:ejb-class>javamxj.ejb.cmp.UserManagementBean</j2ee:ejb-class>
 <j2ee:session-type>
  
分享到:
评论
happmaoo
  • 浏览: 1291612 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

你可能感兴趣的:(eclipse,bean,mysql,jboss,ejb)