ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【原创】eclipse + JBoss 5 + EJB3开发指南(6):编写第一个实体Bean程序

【原创】eclipse + JBoss 5 + EJB3开发指南(6):编写第一个实体Bean程序

原创 Linux操作系统 作者:银河使者 时间:2009-06-17 15:20:08 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文件,内容如下:
<!--

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

-->xml 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/

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

<!--

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

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

-->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.class1);       
        
return user.getPassword();
    }
}

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

五、客户端调用session bean

<!--

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

-->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。
    运行上面的代码后,将输出如下的字符串:

<!--

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

-->TaokQpoNJQb02eafO/JgYw==

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12921506/viewspace-606601/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-02-08

  • 博文量
    169
  • 访问量
    1057245