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

eclipse + JBoss 5 + EJB3開發指南(6):編寫第一個實體Bean程序

編輯:關於JAVA

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文件,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>MyPIM</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/pim</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>1234</password>
    <exception-sorter-class- name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter- class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

mysql-ds.xml文件用於配置mysql的數據源。實際上,該文件可以在<jboss安裝目錄 >\docs\examples\jca目錄中找到,讀者只需要將數據庫名、用戶名和密碼以及jndi名改成自己的就可 以了。最後將修改後的mysql-ds.xml文件復制到deploy目錄中(必須叫這個文件名)。

連接mysql數據庫需要一個jdbc驅動(jar文件),將該文件復制到<jboss安裝目錄 >\server\default\lib目錄中。

二、編寫實體Bean

User類是一個實體Bean,代碼如下:

package 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文件,代碼如下:

<?xml 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:/MyPIM</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="none" />
            <property name="hibernate.dialect"  value="org.hibernate.dialect.MySQL5Dialect" />
        </properties>
    </persistence-unit>
</persistence>

其中<jta-data-source>元素的值就是mysql-ds.xml文件中配置的數據源名。如果使用注釋配置 session bean,META-INF目錄下只有兩個文件即可:MANIFEST.MF和persistence.xml。

四、在session bean中調用實體bean

package 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.class, 1);
        return user.getPassword();
    }
}

其中UserBeanRemote為遠程接口。要注意的是,@PersistenceContext注釋的unitName屬性值必須和 persistence.xml文件中的<persistence-unit>元素的name屬性值相同。

五、客戶端調用session bean

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

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