第一步:建表,在Northwind下建立一个Users表:
create table Users(
id int identity primary key,
name varchar(20) not null,
password varchar(20) not null
)
第二步:配置数据源
我用的数据库是SQL Server 2005,驱动是JTDS。
首先,将jtds-1.2.jar拷贝到JBOSS_HOME/server/all/lib下,然后在JBOSS_HOME/docs/examples/jca目录下找到mysql-ds.xml,这是JBoss用来配置SqlServer数据源的模板。编辑它:
<datasources>
<local-tx-datasource>
<!--数据源的JNDI名称-->
<jndi-name>MSSQLDS</jndi-name>
<!--JDBC连接URL-->
<connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url>
<!--驱动程序的完整类名-->
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<!--用户名-->
<user-name>sa</user-name>
<!--密码-->
<password>abc</password>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>MS SQLSERVER2005</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
然后将编辑好的数据源配置文件拷贝到JBOSS_HOME/server/all/deploy部署。
现在可以开始编写实体Bean了
我用的是Eclipe,在项目下要建立一个META-INF目录,在里面创建一个persistence.xml。
编辑persistence.xml,放入如下内容:
<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">
<!--持久化单元,我觉得这个好比Hibernate配置中的SessionFactory-->
<persistence-unit name="User">
<!--数据源,这里就用钢材配置的那个-->
<jta-data-source>java:SS2005</jta-data-source>
<!--其他属性,和Hibernate一样-->
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
然后创建一个实体Bean,注意一定要实现java.io.Serializable接口
package com.ejb3.simple.entry;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
//标识实体Bean
@Entity
//标识实体Bean对应的表名
@Table(name = "users")
//命名一个主键生成器。这里将identity生成策略命名为hibernate-identity。
@org.hibernate.annotations.GenericGenerator(
name = "hibernate-identity",
strategy = "identity"
)
public class Users implements Serializable{
private Integer userId;
private String name;
private String password;
//指定主键,以及生成策略
@Id
@GeneratedValue(generator = "hibernate-identity")//引用上边定义的生成器名称
@Column(name="id")//指定列名
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
//如果不显式定义@Column,默认对应同名列
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
接下来定义一个DAO借口并实现它
public interface UserDAO {
public void addUser(Users user);
}
实现类:
import java.util.Date;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@Remote ({UserDAO.class})
public class UserDAOImpl implements UserDAO{
@PersistenceContext//注入EntityManager
private EntityManager em;
public void addUser(Users user) {
em.persist(user);//持久化对象,呵呵巨简单
}
}
接下来就可以打包了
用Eclipse的Export将类包和META-INF目录一起打入jar包,然后将这个jar包拷贝到
JBOSS_HOME/server/all/deploy
OK!
写程序测试一下:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx;
ctx = new InitialContext(props);
UserDAO userDAO=(UserDAO)ctx.lookup("UserDAOImpl/remote");
Users user=new Users();
user.setName("admin");
user.setPassword("123");
userDAO.addUser(user);
JBoss控制台输出:
16:03:39,171 INFO [STDOUT] Hibernate:
insert
into
users
(name, password)
values
(?, ?)
到数据库里看看结果
select * from Users
id name password
----------- -------------------- --------------------
1 admin 123
大功告成!这就是我的第一个EJB3.0 实体Bean。