一、部署Jboss数据源
mysql的jdbc驱动复制到jboss服务器的lib目录中
修改jboss数据源配置文件:到jboss-5.1.0.GA\docs\examples\jca目录下找到对应的数据源配置文件,我用的是mysql,所以只修改mysql-ds.xml文件
修改成自己的mysql地址
<jndi-name>MysqlDS</jndi-name> <connection-url>jdbc:mysql://localhost:3306/bbs?useUnicode=true&characterEncoding=UTF-8</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>123456</password>
修改完保存到目录jboss-5.1.0.GA\server\default\deploy下,启动Jboss(我用的是Myeclipse启动Jboss),命令控制台看到
部署成功提示 JNDI name 'java:MysqlDS';
二、开发实体Bean
使用Myeclipse新建EJB项目,JNDI Data Source填写Jboss的JNDI name,前面的控制台可以看到,Persistence Unit Name自己命名,如:MysqlUnit
完成
使用Myeclipse的Hibernate视图,EJB反向工程
三、编写业务逻辑接口
我们来写一个接口
public interface DuserService { public void delete(Integer id); public Duser getDuser(Integer id); public List<Duser> getDusers() ; public void save(Duser user); public void update(Duser user); }
无状态会话Bean
@Stateless//设置成无状态会话Bean @Remote(DuserService.class)//设置成远程Bean,公开“接口” public class DuserServiceBean implements DuserService{ /* * 注入EntityManager对象 * unitName要与persistence.xml文件中保持一致 */ @PersistenceContext(unitName = "MysqlUnit") EntityManager em; public void delete(Integer id) { /* * em.getReference(Duser.class, id) * 得到一个托管的实体对象 */ em.remove(em.getReference(Duser.class, id)); } public Duser getDuser(Integer id) { return em.find(Duser.class, id); } @SuppressWarnings("unchecked") public List<Duser> getDusers() { return em.createQuery("select o from Duser o").getResultList(); } public void save(Duser user) { /* * 保存新建状态对象,插入数据库,添加新纪录 */ em.persist(user); } public void update(Duser user) { /* * 实体Bean处于游离状态,可以删除 */ em.merge(user); /* * 托管状态,使用set方法就可以修改数据user.set*(); */ } }
我们发布到Jboss中,启动Jboss,在控制台中观察,
16:10:35,937 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI: DuserServiceBean/remote - EJB3.x Default Remote Business Interface DuserServiceBean/remote-cn.snailteam.entity.DuserService - EJB3.x Remote Business Interface
说明我们的DuserServiceBean无状态会话Bean已经部署成功。
四、测试
新建一个DuserService接口测试类
public class DuserServiceTest { public static DuserService service; @BeforeClass public static void setUpBeforeClass() throws Exception { /* * 参数来自于当前目录下的jndi.properties文件 *远程调用的话,通过jndi.properties找到会话Bean,如果在一个容器内的话 *(比如部署在同在一个EJB容器内既一个Jboss内),就不需要jndi.properties, *直接在容器中初始化上下文,找到EJB会话Bean */ javax.naming.InitialContext ctx = new javax.naming.InitialContext(); /* * Jboss启动控制台中可以观察到 * DuserServiceBean/remote - EJB3.x Default Remote Business Interface */ service = (DuserService) ctx.lookup("DuserServiceBean/remote"); System.out.println("初始化完成"); } @Test public void testDelete() { } @Test public void testGetDuser() { } @Test public void testGetDusers() { List<Duser> users = service.getDusers(); for(Duser user:users){ System.out.println(user.getUid()+"-------"+user.getUsername()); } } @Test public void testSave() { } @Test public void testUpdate() { } }
测试之前我们需要设置初始化上下文件jndi.properties (可以查文档)
#Jboss命名连接工厂 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory #Jboss命名连接工厂地址 java.naming.provider.url=localhost:1099
可以测试了。