【原創】eclipse + JBoss 5 + EJB3開發指南(6):編寫第一個實體Bean程式

銀河使者發表於2009-06-17
本文為原創,如需轉載,請註明作者和出處,謝謝!

     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檔案,內容如下:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtxml version="1.0" encoding="UTF-8"?>
<datasources>
  
<local-tx-datasource>
    
<jndi-name>MyPIMjndi-name>
    
<connection-url>jdbc:mysql://localhost:3306/pimconnection-url>
    
<driver-class>com.mysql.jdbc.Driverdriver-class>
    
<user-name>rootuser-name>
    
<password>1234password>
    
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorterexception-sorter-class-name>
    
<metadata>
       
<type-mapping>mySQLtype-mapping>
    
metadata>
  
local-tx-datasource>
datasources>

    mysql-ds.xml檔案用於配置mysql的資料來源。實際上,該檔案可以在\docs\examples\ jca目錄中找到,讀者只需要將資料庫名、使用者名稱和密碼以及jndi名改成自己的就可以了。最後將修改後的mysql-ds.xml檔案複製到 deploy目錄中(必須叫這個檔名)。
    連線mysql資料庫需要一個jdbc驅動(jar檔案),將該檔案複製到\server\default\lib目錄中。

二、編寫實體Bean

    User類是一個實體Bean,程式碼如下:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtpackage entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name 
= "t_users")
public class User 
{
    
private int id;
    
private String name;
    
private String password;
    @Id
    
public int getId()
    {
        
        
return id;
    }
    
public void setId(int id)
    {
        
this.id = id;
    }
    
public String getName()
    {
        
return name;
    }
    
public void setName(String name)
    {
        
this.name = name;
    }
    @Column(name 
= "password_md5")
    
public String getPassword()
    {
        
return password;
    }
    
public void setPassword(String password)
    {
        
this.password = password;
    }
    
}

三、配置persistence.xml檔案

   
在META-INF目錄中建立一個persistence.xml檔案,程式碼如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtxml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"

    version
="1.0">
    
<persistence-unit name="myentity">
        
<jta-data-source>java:/MyPIMjta-data-source>
        
<properties>
            
<property name="hibernate.hbm2ddl.auto" value="none" />
            
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        
properties>
    
persistence-unit>
persistence>

    其中元素的值就是mysql-ds.xml檔案中配置的資料來源名。如果使用註釋配置session bean,META-INF目錄下只有兩個檔案即可:MANIFEST.MF和persistence.xml。

四、在session bean中呼叫實體bean

   
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtpackage service;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import entity.User;

@Stateless
public class UserBean implements UserBeanRemote
{
    @PersistenceContext(unitName
="myentity")
    
protected EntityManager em;

    @Override
    
public String getPassword()
    {

        User user 
= em.find(User.class1);       
        
return user.getPassword();
    }
}

    其中UserBeanRemote為遠端介面。要注意的是,@PersistenceContext註釋的unitName屬性值必須和persistence.xml檔案中的元素的name屬性值相同。

五、客戶端呼叫session bean

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtInitialContext 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。
    執行上面的程式碼後,將輸出如下的字串:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtTaokQpoNJQb02eafO/JgYw==

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-606601/,如需轉載,請註明出處,否則將追究法律責任。

相關文章