他山之石,可以攻玉

我向往淡蓝色的未来 我体味淡蓝色的静谧 我永远都要争取机会 我希翼创造光彩未来!

用户操作
[即时聊天] [发私信] [加为好友]
johnsonID:johnsonTj
222645次访问,排名302好友0人,关注者3
johnsonTj的文章
原创 118 篇
翻译 0 篇
转载 214 篇
评论 9 篇
johnson的公告

今日天气

公告


Automobile
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
debonair_wei:我想问一下此工具可以用在以oracle数据库为后台的权限管理中呢?如果可以,应该进行哪些相应的设置呢?
SUNLANDxiao:您好,可以再帮我解决一下这个问题么?我严格按照您的方式做了,但是在插入数据时,读入数据库的仍然是乱码。非常焦急,请您同我联系,帮我这个忙好么?感激不禁!
QQ:118180816
春暖花开
jingzi:好贴.
郁闷了N久:大哥,看了好多这方面的资料,好不容易转到您这里,可惜我的IE只能显示下面,上面是空白的,实在是调足了我的胃口,能给我发一篇完整的文章吗?谢谢!!
cz8961@163.com
文章分类
收藏
相册
ASP.Net 学习
Asp.Net官方站点学习
GotoDotnet学习站点
真实世界的 XML:使用 .NET 框架中集成的读取器和写入器很容易操作 XML 数据
cnBlog优秀Blog收藏
http://blog.csdn.net/zjcxc
http://blog.csdn.net/zjcxc
Struts环境配置手册
邹建
CSDN设计模式
CSDN设计模式学习
CSDN收藏的优秀Blog
bergn的Blog
younther的专栏
对象建模技术
IT经济
Java优秀文章收藏
Eclipse入门-- Eclipse的使用简介及插件开发
Elipse相关技术
Java设计模式学习
Josephus问题之Java乱弹篇(原创)
Spring - Java/J2EE Application Framework
用 IBM Holosofx 进行业务流程管理
简话设计模式
MSDN中文
如何快速实现HTML编辑器.NET组件
微软PetShop
微软中国社区
部署SQLServer数据安装程序
Oracle数据库学习
oracel学习
Oracle入门资料
PHP开发
PHP5 新函数
PHP5对象体系
Windows 环境下的PHP5 与 Apache 服务器的配置
基于面向对象技术的异构系统整合
龙头雏形渐显长江三角
编程资源网站收藏
中国软件网
程序人生
IT人网站
一个IT毕业生的挣扎----相当好的文章,未毕业或者即将毕业的学友该好好看看(完结篇)
一个IT毕业生的挣扎----相当好的文章,未毕业或者即将毕业的学友该好好看看(完结篇)
一个程序员真实的一天(ZT)
关注程序员健康,刻不容缓
职业经理自修手册
计算机族必喝的健康饮品
身体健康
五禽操帮电脑族找回活力
爱立信中国总裁杨迈猝死 爱立信中国惊魂48小时
电脑前的护眼窍门
程序员身体健康
数据结构
数据结构
业务建摸设计
RationalRose2003 安装破解说明
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

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

新一篇: 立即释放.net下的com组件  | 旧一篇: 微软Bug管理

    这个系列文章我是根据 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: 选择 Container Managed Entity EJB
   点击下一步。
 
 
同样,再增加一个密码栏:
· Field: password,
· Field Type: java.lang.String,
· Database Column: 密码,
· SQL Type: varchar
  这个不要使它成为主键。
  最后点击完成。
 
 
三、验证配置
 
· 现在修改生成的 UserBean.java 文件,先添加自动创建表的语句
 
· 注意:如果使用自动创建表的语句,这里有个bug:
 
 
●  好了,现在来试验一下各种配置有没有问题:
 
· 先将 UserBean.java 添加到 cmpEJB 模块中,然后 lomboz ->Generate EJB Classes 生成其它ejb类文件(建议看看生成的文件,弄清楚 XDoclet 的原理)。
 
· 运行 MySQl 服务,再通过 Lomboz 启动 JBoss 服务器。
 
· 然后通过 Deploy Module  部署 cmpEJB 模块,再打开MySql的客户端,会发现在 cmp_sample 数据库中已经自动生成了一个 usertable 的数据表,如图:
如果能顺利进行到这一步,那么各种配置都没问题,再开始下一阶段。
 
 
完成 ejbCreate 和 ejbPostCreate 方法:
 
在上面的 @ejb.bean 中添加  view-type = "local" 
 
保存,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 ->Add Create Method(这是 JBossv-IDE 附带的):
 
 
下一步:
在生成的代码框中添加语句:
userHome = UserUtil.getLocalHome();
 
如下图:需要手工输入的语句已经标出来了:
 
 
 
●  添加业务方法
 
· 增加 addUser 方法,向上面操作一样,右击 UserManagementBean ->J2EE ->Add Business Method
 
在生成的代码框中添加语句:
UserLocal user = userHome.create(email, password);
 
· 增加 removeUser 方法
在生成的代码框中添加语句:
userHome.remove(email);
 
· 增加 verifyPassword 方法
在生成的代码框中添加语句:
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"
如图:
 
  好了,UserManagementBean 暂时完成了。
 
 将 UserManagementBean 加入到 cmpEJB 模块中,
 
·  然后 lomboz ->Generate EJB Classes
 
· 运行 MySQl 服务,再通过 Lomboz 启动 JBoss 服务器。
 
· 然后通过 Deploy Module  部署 cmpEJB 模块
 
  如果一切正常,那么开始创建客户端。
 
 
 
五、创建客户端
 
· 右击 src 文件夹 ->新建 ->Lomboz EJB Test Client  Wizard:
 
· 修改生成的 CMPClient1.java
 
· 运行客户端程序,则客户端控制台会输出:Login =true
 
· 同时,用 MySQL 客户端软件查看 cmp_sample 表,则如下,显示3条数据。
 
 
 
六、完整的源码
 

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>Stateless</j2ee:session-type>
 <j2ee:transaction-type>Container</j2ee:transaction-type>
 </lomboz:sessionEjb>
 </lomboz:session>
 </lomboz:EJB>
 <!-- lomboz.endDefinition --<