本文为原创,如需转载,请注明作者和出处,谢谢!
上一篇:
eclipse + JBoss 5 + EJB3开发指南(5):使用配置文件发布Session Bean
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文件,内容如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
<?
xmlversion="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,代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
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
Stringname;
private
Stringpassword;
@Id
public
int
getId()
{
return
id;
}
public
void
setId(
int
id)
{
this
.id
=
id;
}
public
StringgetName()
{
return
name;
}
public
void
setName(Stringname)
{
this
.name
=
name;
}
@Column(name
=
"
password_md5
"
)
public
StringgetPassword()
{
return
password;
}
public
void
setPassword(Stringpassword)
{
this
.password
=
password;
}
}
三、配置persistence.xml文件
在META-INF目录中建立一个persistence.xml文件,代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
<?
xmlversion="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
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
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
EntityManagerem;
@Override
public
String getPassword()
{
Useruser
=
em.find(User.
class
,
1
);
return
user.getPassword();
}
}
其中UserBeanRemote为远程接口。要注意的是,@PersistenceContext注释的unitName属性值必须和persistence.xml文件中的<persistence-unit>元素的name属性值相同。
五、客户端调用session bean
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
InitialContextctx
=
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。
运行上面的代码后,将输出如下的字符串:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
TaokQpoNJQb02eafO
/
JgYw
==
下一篇:eclipse + JBoss 5 + EJB3开发指南(7):实现Entity Bean的一对一(one-to-one)映射
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!
《银河系列原创教程》发布
《Java Web开发速学宝典》出版,欢迎定购