Eclipse+JBoss+EJB3编写第一个实体Bean程序

2009-12-1     作者:   编辑:崔晓帆        点击进入论坛
关键词:Eclipse  JBoss  EJB3

  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的数据库连接池

  在\server\default\deploy目录中建立一个mysql-ds.xml文件,内容如下:

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

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

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

  二、编写实体Bean

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

  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. return id;
  17. }
  18. public void setId(int id)
  19. {
  20. this.id = id;
  21. }
  22. public String getName()
  23. {
  24. return name;
  25. }
  26. public void setName(String name)
  27. {
  28. this.name = name;
  29. }
  30. @Column(name = "password_md5")
  31. public String getPassword()
  32. {
  33. return password;
  34. }
  35. public void setPassword(String password)
  36. {
  37. this.password = password;
  38. }
  39. }

三、配置persistence.xml文件

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

  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:/MyPIMjta-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>

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

四、在session bean中调用实体bean

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

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

五、客户端调用session bean

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

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

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

TaokQpoNJQb02eafO/JgYw==

寻找产品:
姓       名: 电   话:
公       司: E-mail:
描       述: