Eclipse JBoss EJB3编写第一个实体Bean程序
创始人
2024-04-06 04:01:56
0

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

三、配置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.  
  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.     }  
  22. }  

其中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==

【编辑推荐】

  1. Eclipse+JBoss+EJB3配置文件发布Session Bean
  2. Eclipse+JBoss+EJB3编写有状态的SessionBean
  3. Eclipse+JBoss+EJB3的Session Bean注释方法
  4. Eclipse+JBoss+EJB3使用Session Bean的本地接口
  5. Eclipse+JBoss+EJB3编写第一个无状态的SessionBean

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...