程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Eclipse+JBoss+EJB3編寫第一個實體Bean程序

Eclipse+JBoss+EJB3編寫第一個實體Bean程序

編輯:J2EE

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved