JBoss + EJB3 + MySql : 开发第一个EJB
JBoss开发Bean并不困难,而对于不知道的人来说,数据库配置才是比较棘手的问题。现在我们就来一步一步开发一个EJB3 + MySql的Bean。
一、MySql数据库的配置
1. 配置数据源
在 %JBOSS_HOME%/docs/examples/jca 目录下找到一个名叫 “mysql-db.xml” 的文件,这个是官方为我们写好的针对mysql的数据源配置文件,我们改改它就行了。
将 mysql-db.xml 复制到 /server/default/deploy 目录下,并将文件内容修改为:
- <?xml version=”1.0″ encoding=”UTF-8″?>
- <!– $Id: mysql-ds.xml 41017 2006-02-07 14:26:14Z acoliver $ –>
- <!– Datasource config for MySQL using 3.0.9 available from:
- http://www.mysql.com/downloads/api-jdbc-stable.html
- –>
- <datasources>
- <local-tx-datasource>
- <jndi-name>MySqlDS</jndi-name>
- <connection-url>jdbc:mysql://localhost:3306/ejb</connection-url>
- <driver-class>com.mysql.jdbc.Driver</driver-class>
- <user-name>root</user-name>
- <password>0000</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>
<user-name>是你的mysql数据库用户名,同理<password>是连接密码。
2. 配置persistence.xml
persistence.xml 是 Java Persistence 规范要求我们定义的一个部署描述文件,作用是配置一些基本信息,如EntityManager服务的名称。我们在项目目录的 METAINF/ 目录下创建这个文件:
- <?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″>
- <!– entity就是EntityManager服务名 –>
- <persistence-unit name=”entity” transaction-type=”JTA”>
- <!– 这里必须跟mysql-db.xml文件中的<jndi-name>一样,即MySqlDs –>
- <jta-data-source>java:/MySqlDS</jta-data-source>
- <!– 以下是hibernate的相关配置,可省略 –>
- <properties>
- <property name=”hibernate.dialect” value=”org.hibernate.dialect.MySQLDialect”/>
- <property name=”hibernate.hbm2ddl.auto” value=”update”/>
- <property name=”hibernate.connection.characterEncoding” value=”UTF-8″ />
- </properties>
- </persistence-unit>
- </persistence>
至此数据库配置完毕。
二、开发Bean
1. 开发Entity Bean
我们创建一个名为 User 的实体Bean, 用来保存一个用户的基本信息,如用户名,密码。
- package dev.entity;
- import java.io.Serializable;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Entity
- @Table(name = “DB_USER”)
- public class User implements Serializable {
- @Id
- @Column(name = “C_ID”)
- private int id;
- @Column(name = “C_NAME”)
- private String name;
- @Column(name = “C_PASSWORD”)
- private String pwd;
- //get() and set()
- }
然后编写以下语句创建数据表 DB_USER:
- create table DB_USER(
- C_ID int key,
- C_NAME varchar(40),
- C_PASSWORD varchar(40)
- );
2. 开发Session Bean
我们的Session Bean将包括2个功用:一是创建并持久化一个User类,二是从数据库中取回一个User对象。
首先创建远程接口 UserBeanRemote :
- package dev.bean;
- import javax.ejb.Remote;
- import dev.entity.*;
- @Remote
- public interface UserBeanRemote {
- void createUser(User user); //创建User
- User getUser(int id); //查询并获取User
- }
然后创建会话Bean : UserBean
- package dev.bean;
- import javax.ejb.Stateless;
- import javax.persistence.EntityManager;
- import javax.persistence.PersistenceContext;
- import dev.entity.*;
- @Stateless
- public class UserBean implements UserBeanRemote {
- @PersistenceContext(unitName = “entity”)
- private EntityManager manager;
- public void createUser(User user) {
- manager.persist(user);
- }
- public User getUser(int id) {
- return manager.find(User.class, id);
- }
- }
至此 Bean开发完毕。
三、部署 EJB
Eclipse中,在项目名上右击,选择 Export. 在弹出的向导中选择 EJB JAR file. 然后按照提示即可完成部署。
四、编写测试代码
- public class Client {
- public static void main(String[] args) {
- try {
- Context context = initContext();
- UserBeanRemote ubr = (UserBeanRemote)context.lookup(“UserBean/remote”);
- User user = new User();
- user.setId(4);
- user.setName(“bruce lee”);
- user.setPwd(“123456”);
- ubr.createUser(user);
- /*User user = (User)ubr.getUser(2);
- System.out.println(user.getName());*/
- System.out.println(“success!”);
- }
- catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- /*
- * 这一部分是写死的
- * 固定写法
- */
- public static Context initContext() throws javax.naming.NamingException {
- Properties prop = new Properties();
- prop.put(Context.INITIAL_CONTEXT_FACTORY,”org.jnp.interfaces.NamingContextFactory”);
- prop.put(Context.URL_PKG_PREFIXES,”org.jboss.naming:org.jnp.interfaces”);
- prop.put(Context.PROVIDER_URL, “jnp://localhost:1099”);
- return new javax.naming.InitialContext(prop);
- }
- }
至此一个简单的EJB3已经开发完成。