eclipse + JBoss 5 + EJB3开发指南(6):编写第一个实体Bean程序

  1. 云栖社区>
  2. 博客>
  3. 正文

eclipse + JBoss 5 + EJB3开发指南(6):编写第一个实体Bean程序

geekori 2009-06-08 08:28:00 浏览536
展开阅读全文

本文为原创,如需转载,请注明作者和出处,谢谢!

     EJB3容器通过EntityManager对象管理实体Bean,该类最主要的功能就是在记录和JavaBean之间进行互相映射。例如,我们从数据库 中查出一条记录,这条记录有field1和field2两个字段,假设有一个JavaBean,也包含了field1和field2属性。那么 EntityManager可以将这条记录中的值映射到JavaBean的field1和field2属性中。也就是说,在数据库中的一条记录就对应于一 个JavaBean的对象实例。下面将给出一个简单的例子来演示如何来实现一个应用实体Bean的程序。在这个例子中使用无状态的session bean通过EntityManager对象从数据表中查找一条记录,将该记录映射成实体Bean的对象实例,最后通过session bean的方法返回该记录的某个字段值。
   
    表名:t_users
    表中的字段和记录
    id    name    password_md5
     1     bill    TaokQpoNJQb02eafO/JgYw==

一、配置JBoss的数据库连接池

在<jboss安装目录>/server/default/deploy目录中建立一个mysql-ds.xml文件,内容如下:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <datasources>  
  3.   <local-tx-datasource>  
  4.     <jndi-name>MyPIM</jndi-name>  
  5.     <connection-url>jdbc:mysql://localhost:3306/pim</connection-url>  
  6.     <driver-class>com.mysql.jdbc.Driver</driver-class>  
  7.     <user-name>root</user-name>  
  8.     <password>1234</password>  
  9.     <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>  
  10.     <metadata>  
  11.        <type-mapping>mySQL</type-mapping>  
  12.     </metadata>  
  13.   </local-tx-datasource>  
  14. </datasources> 

    mysql-ds.xml文件用于配置mysql的数据源。实际上,该文件可以在<jboss安装目录>/docs/examples/ jca目录中找到,读者只需要将数据库名、用户名和密码以及jndi名改成自己的就可以了。最后将修改后的mysql-ds.xml文件复制到 deploy目录中(必须叫这个文件名)。

    连接mysql数据库需要一个jdbc驱动(jar文件),将该文件复制到<jboss安装目录>/server/default/lib目录中。

二、编写实体Bean

    User类是一个实体Bean,代码如下:

Code:
  1. package entity;  
  2. import javax.persistence.Column;  
  3. import javax.persistence.Entity;  
  4. import javax.persistence.Id;  
  5. import javax.persistence.Table;  
  6. @Entity  
  7. @Table(name = "t_users")  
  8. public class User   
  9. {  
  10.     private int id;  
  11.     private String name;  
  12.     private String password;  
  13.     @Id  
  14.     public int getId()  
  15.     {  
  16.           
  17.         return id;  
  18.     }  
  19.     public void setId(int id)  
  20.     {  
  21.         this.id = id;  
  22.     }  
  23.     public String getName()  
  24.     {  
  25.         return name;  
  26.     }  
  27.     public void setName(String name)  
  28.     {  
  29.         this.name = name;  
  30.     }  
  31.     @Column(name = "password_md5")  
  32.     public String getPassword()  
  33.     {  
  34.         return password;  
  35.     }  
  36.     public void setPassword(String password)  
  37.     {  
  38.         this.password = password;  
  39.     }  
  40.       
  41. }  


三、配置persistence.xml文件


在META-INF目录中建立一个persistence.xml文件,代码如下:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  
  5.     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"  
  6.     version="1.0">  
  7.     <persistence-unit name="myentity">  
  8.         <jta-data-source>java:/MyPIM</jta-data-source>  
  9.         <properties>  
  10.             <property name="hibernate.hbm2ddl.auto" value="none" />  
  11.             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />  
  12.         </properties>  
  13.     </persistence-unit>  
  14. </persistence> 

    其中<jta-data-source>元素的值就是mysql-ds.xml文件中配置的数据源名。如果使用注释配置session bean,META-INF目录下只有两个文件即可:MANIFEST.MF和persistence.xml。

四、在session bean中调用实体bean

Code:
  1. package service;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import javax.ejb.Stateless;  
  6. import javax.persistence.EntityManager;  
  7. import javax.persistence.PersistenceContext;  
  8. import entity.User;  
  9.   
  10. @Stateless  
  11. public class UserBean implements UserBeanRemote  
  12. {  
  13.     @PersistenceContext(unitName="myentity")  
  14.     protected EntityManager em;  
  15.   
  16.     @Override  
  17.     public String getPassword()  
  18.     {  
  19.         User user = em.find(User.class1);         
  20.         return user.getPassword();  
  21.     }  

    其中UserBeanRemote为远程接口。要注意的是,@PersistenceContext注释的unitName属性值必须和persistence.xml文件中的<persistence-unit>元素的name属性值相同。

五、客户端调用session bean

Code:
InitialContext ctx = new InitialContext();   UserBeanRemote userBeanRemote = (UserBeanRemote) ctx.lookup("MyEnterprise/UserBean/remote");   System.out.println(userBeanRemote.getPassword()); 

    由于本书的程序都在一个ear包中,因此,默认的jndi名是MyEnterprise/UserBean/remote,如果直接发布包含EJB的jar包,默认的jndi名称为UserBean/remote。

    运行上面的代码后,将输出如下的字符串:

TaokQpoNJQb02eafO/JgYw==

网友评论

登录后评论
0/500
评论
geekori
+ 关注