前面一节介绍了ejb的环境搭建与helloworld的例子,这节就不介绍ejb的环境了,直接EntityBean(实体bean)
一、环境配置
1、在jboss-4.2.3.GA\docs\examples\jca目录下的mysql-ds.xml(采用的是mysql数据库)复制到桌面,修改里面的内容为:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>xuDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/jpa</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>123456</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>
2、将mysql-ds.xml复制到jboss-4.2.3.GA\server\default\deploy目录下
3、新建一个EntityBean的java工程,然后在src下面新建一个META-INF文件
4、然后在META-INF文件下面建一个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">
<persistence-unit name="xu" transaction-type="JTA">
<jta-data-source>java:xuDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
二、EJB代码编写
1、编写一个Person.java实体类
package com.xu.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person implements Serializable{
private static final long serialVersionUID = 1026640919507025930L;
private Integer id;
private String name;
public Person() {
}
public Person(String name) {
super();
this.name = name;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=20,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2、编写一个PersonService.java接口
package com.xu.service;
import java.util.List;
import com.xu.entity.Person;
public interface PersonService {
public void save(Person person);
public void delete(Integer id);
public void update(Person person);
public Person getPerson(Integer id);
public List<Person> getAllPerson();
}
3、编写一个PersonServiceBean.java实现类
package com.xu.serviceImpl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.xu.entity.Person;
import com.xu.service.PersonService;
@Stateless
@Remote(PersonService.class)
public class PersonServiceBean implements PersonService{
@PersistenceContext(unitName="xu")//注意:这里要跟persistence.xml中的name一致
EntityManager em;
@Override
public void delete(Integer id) {
em.remove(em.getReference(Person.class, id));
}
@Override
public Person getPerson(Integer id) {
return em.find(Person.class, id);
}
@Override
public void save(Person person) {
em.persist(person);
}
@Override
public void update(Person person) {
em.merge(person);
}
@SuppressWarnings("unchecked")
@Override
public List<Person> getAllPerson() {
return em.createQuery(" from Person").getResultList();
}
}
4、将EntityBean工程打包到jboss-4.2.3.GA\server\default\deploy目录下
5、运行jboss中的run.bat
三、测试
1、编写一个PersonServiceTest.java测试类
package com.test;
import java.util.List;
import javax.naming.InitialContext;
import org.junit.Before;
import org.junit.Test;
import com.xu.entity.Person;
import com.xu.service.PersonService;
public class PersonServiceTest{
private PersonService personService;
@Before
public void before() throws Exception{
InitialContext ctx = new InitialContext();
personService = (PersonService) ctx.lookup("PersonServiceBean/remote");
}
@Test
public void testSave(){
personService.save(new Person("小明"));
}
@Test
public void testUpdate(){
Person person = personService.getPerson(1);
person.setName("小王");
personService.update(person);
}
@Test
public void testGetPerson(){
Person person = personService.getPerson(1);
System.out.println(person.getName());
}
@Test
public void testGetAllPerson(){
List<Person> list = personService.getAllPerson();
for(Person person : list){
System.out.println(person.getName());
}
}
}