1、创建EJB服务端项目,右键->EJB PROJECT : ejbserver_jboss
2、创建实体类User:
package ejbtest01.entity; import java.io.Serializable; import javax.persistence.*; @Entity //注明是实体类型 @Table(name="ejb_user") //设置要映射的表名 public class User implements Serializable{ private int id; private String name; private int age; private String address; @Id //将id设为该实体的主键 //@GeneratedValue(strategy=GenerationType.AUTO) //生成数据表时才需要,表已存在,则不需要 // @GeneratedValue() @Column(nullable=false,name="id") public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(nullable=false,name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(nullable=true,name="age") public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Column(nullable=true,name="address") public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
3、创建操作数据库接口类:UserDao
package ejbtest01.dao; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.ejb.EJBObject; import javax.persistence.Query; import ejbtest01.entity.User; public interface UserDao extends Serializable{ public void insertUser(User user); public void updateUser(String name,int id); public void mergeUser(User user); public void deleteUser(int id); public User findUserByID(int id); public List<User> findAll(); public String hello(); }
4、创建操作数据库的实现类:UserDaoBean
package ejbtest01.dao; import java.io.Serializable; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.ejb.EJBHome; import javax.ejb.EJBObject; import javax.ejb.Handle; import javax.ejb.Remote; import javax.ejb.RemoveException; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceContext; import javax.persistence.Query; import ejbtest01.entity.User; @Stateless(name="hello") //name :改变Jndi的名称的, lookup("hello/remote"),默认是UserDaoBean/remote @Remote(UserDao.class) //指定远程调用的接口类 public class UserDaoBean implements UserDao{ //unitName:EJB_PU :与persistence.xml中配置的持久化单元名称一致 @PersistenceContext(unitName="ejbserver_jbossPU")public EntityManager em; // @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void insertUser(User user) { em.persist(user); } public void mergeUser(User user) { this.em.getTransaction().begin(); em.merge(user); } public void updateUser(String name,int id) { User user = em.find(User.class, id); if(null!=user){ user.setName(name); } } public String hello(){ System.out.println("hello........."); return "hello, "; } public void deleteUser(int id) { // TODO Auto-generated method stub } public List<User> findAll() { Query query = em.createQuery("from User u"); List<User> list = (ArrayList<User>)query.getResultList(); return list; } public User findUserByID(int id) { return em.find(User.class, id); } }
5、配置数据源:
在JBOSS目录:E:installjboss-5.1.0.GAdocsexamplesjca 下找到mysql-ds.xml文件,(数据源的配置文件命名是:*-ds.xml),将mysql-ds.xml文件拷贝到
E:installjboss-5.1.0.GAserverdefaultdeploy目录下,然后在服务端项目ejbserver_jboss/src/META-INF目录下创建persistence.xml文件:
<?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="ejbserver_jbossPU" transaction-type="JTA"> <jta-data-source>java:/MySqlDS</jta-data-source> <!-- MySqlDS与数据源配置文件mysql-ds.xml文件中的名称对应 --> <!-- <provider>org.hibernate.ejb.HibernatePersistence</provider> --> <class>ejbtest01.entity.User</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="false"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
6、导入需要的jar包:mysql-connector-java-5.0.4-bin.jar,并将服务端项目打成jar包:ejbserver.jar,
7、新建一个客户端web项目:ejbclientdemo
8、将JBOSS目录下:E:installjboss-5.1.0.GAclient文件夹中的jar全部导入到客户端项目中+mysql-connector-java-5.0.4-bin.jar。+ 服务端项目jar包(ejbserver.jar)
9、在SRC下创建jndi.properties文件:
# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING
###new factory name远程实例化工厂的名字
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
##remote package path远程调用类的包路径
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
###remote class server path调用类的服务器路径
##localhost:8080 is not run , must locahost
java.naming.provider.url=localhost
10、配置客户端web.xml文件的数据源:
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/test</res-ref-name><!-- test:是对应的数据库名称,不是连接名称 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
11、在客户端的main方法中测试调用接口:
package ejb.client; import java.io.Serializable; import java.util.List; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; import ejbtest01.dao.UserDao; import ejbtest01.dao.UserDaoBean; import ejbtest01.entity.User; public class Client implements Serializable{ public static void main(String[] args) { try{ InitialContext ctx = new InitialContext(); UserDao dao = (UserDao)ctx.lookup("hello/remote"); //1、先新增数据 User user = new User(); user.setId(10); user.setName("10000"); user.setAge(30); user.setAddress("呵呵111"); dao.insertUser(user); //2、再查询数据 List<User> users = dao.findAll(); for(User u : users){ System.out.println("===="+u.getName()); } }catch(Exception e){ e.printStackTrace(); } } }
12、启动JBOSS,运行客户端Main方法,输出查询结果,即测试成功。