我用的是 mysql 數(shù)據(jù)庫(kù), EJB3.0 相對(duì)于2.0 變化蠻大的,真的是迫于 Spring+Hibernate 的逼式,ejb 3.0 已經(jīng)出現(xiàn)幾年了,自從她輕裝上陣,也不知道現(xiàn)在的應(yīng)用情況如何,不過(guò)本人認(rèn)為, ejb 3.0 是很有市場(chǎng)的。它的簡(jiǎn)潔和方便無(wú)疑是程序員的最佳選擇!
1. 配置 JBOSS 數(shù)據(jù)源:
如果你用默認(rèn)的數(shù)據(jù)源就不需要這么改動(dòng),默認(rèn)的是 Hsqldb。為了換成 mysql,而且把數(shù)據(jù)源的 JNDI 改成自己的名字,你需要如下配置:
一、拷貝驅(qū)動(dòng)
我啟動(dòng)的是 default !
所以請(qǐng)保證JBOSS_INSTALL\server\default\lib下面有mysql jdbc driver
二、修改 JBOSS 配置文件
1、將文件JBOSS_INSTALL/docs/examples/jca/mysql-ds.xml拷貝到JBOSS_INSTALL\server\default\deploy下
面
修改如下:
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>123</password>
2、將文件JBOSS_INSTALL/docs/examples/jms/mysql-jdbc2-service.xml拷貝到
JBOSS_INSTALL/server/default/deploy/jms下
修改如下:
<mbean code="org.jboss.mq.pm.jdbc2.PersistenceManager"
name="jboss.mq:service=PersistenceManager">
<depends optional-attribute-
name="ConnectionManager">jboss.jca:service=DataSourceBinding,name=MySqlDS</depends>
<attribute name="SqlProperties">
另外這個(gè)文件71行修改:
CREATE_TX_TABLE = CREATE TABLE JMS_TRANSACTIONS ( TXID INTEGER PRIMARY KEY NOT
NULL )
3、修改JBOSS_INSTALL/server/default/conf/standardjaws.xml如下:
<datasource>java:/MysqlDS</datasource>
<!-- <type-mapping>Hypersonic SQL</type-mapping> -->
<type-mapping>mySQL</type-mapping>
4、修改JBOSS_INSTALL/server/default/deploy/jms/hsqldb-jdbc-state-service.xml如下:
<depends optional-attribute-
name="ConnectionManager">jboss.jca:service=DataSourceBinding,name=MysqlDS</depends>
5、修改JBOSS_INSTALL/server/default/deploy/ejb-deployer.xml如下:
<mbean code="org.jboss.ejb.txtimer.DatabasePersistencePolicy"
name="jboss.ejb:service=EJBTimerService,persistencePolicy=database">
<!-- DataSource JNDI name -->
<depends optional-attribute-name="DataSource">jboss.jca:service=DataSourceBinding,name=MysqlDS</depends>
<!-- The plugin that handles database persistence -->
<attribute
name="DatabasePersistencePlugin">org.jboss.ejb.txtimer.GeneralPurposeDatabasePersistencePlugin</attribute>
</mbean>
6、修改JBOSS_INSTALL/server/default/config/ standardjbosscmp-jdbc.xml如下:
<defaults> <datasource>java:/MysqlDS</datasource>
7、修改JBOSS_INSTALL/server/default/deploy/ uuid-key-generator.sar下面的META-INF下面jboss-service.xml如
下:
<!-- DataSource JNDI name -->
<depends optional-attribute-name="DataSource">jboss.jca:service=DataSourceBinding,name=MysqlDS</depends>
好了數(shù)據(jù)源配置方面已經(jīng)完成!可以開(kāi)始動(dòng)手開(kāi)發(fā)了!
2.MyEclipse6 開(kāi)發(fā) EntityBean
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="testUnit">
<jta-data-source>java:/MysqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />//create-drop 如果有表結(jié)構(gòu)可以換成 update!
//相關(guān)詳細(xì)內(nèi)容請(qǐng)看書(shū)
</properties>
</persistence-unit>
</persistence>
3.PersonDAO 接口
import java.util.Date;
import java.util.List;
import org.jpa.test.Person;
public interface PersonDAO {
public boolean insertPerson(String name, boolean sex, short age,
Date birthday);
public String getPersonNameByID(int personid);
public boolean updatePerson(Person person);
public Person getPersonByID(int personid);
public List getPersonList(int max, int whichpage);
}
4.PersonDAOBean 無(wú)狀態(tài)的會(huì)話(huà)Bean
package org.jpa.dao;
import java.util.Date;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.jpa.test.Person;
@Stateless
@Remote( { PersonDAO.class })
public class PersonDAOBean implements PersonDAO {
@PersistenceContext
protected EntityManager em;
public String getPersonNameByID(int personid) {
Person person = em.find(Person.class, Integer.valueOf(personid));
return person.getName();
}
public boolean insertPerson(String name, boolean sex, short age,
Date birthday) {
try {
Person person = new Person();
person.setName(name);
person.setSex(sex);
person.setAge(Short.valueOf(age));
person.setBirthday(birthday);
em.persist(person);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public Person getPersonByID(int personid) {
return em.find(Person.class, Integer.valueOf(personid));
}
public boolean updatePerson(Person person) {
try {
em.merge(person);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public List getPersonList(int max, int whichpage) {
try {
int index = (whichpage - 1) * max;
Query query = em.createQuery("from Person p order by personid asc");
List list = query.setMaxResults(max).setFirstResult(index)
.getResultList();
em.clear();// 分離內(nèi)存中受EntityManager管理的實(shí)體bean,讓VM進(jìn)行垃圾回收
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
5.類(lèi)似 Hibernate 中開(kāi)發(fā) POJO 一樣開(kāi)發(fā) EntityBean,不同的就是把 ORM 的 mapping file 改用在 code 中加入注釋?zhuān)Ч?lèi)似!如果你學(xué)習(xí)過(guò) jdo,ojb,hibernate,ibatis 等等你很容易上手!
package org.jpa.test;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@SuppressWarnings("serial")
@Entity
@Table(name = "person")
public class Person implements Serializable {
private Integer personid;
private String name;
private boolean sex;
private Short age;
private Date birthday;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getPersonid() {
return personid;
}
public void setPersonid(Integer personid) {
this.personid = personid;
}
@Column(name = "PersonName", nullable = false, length = 32)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(nullable = false)
public boolean getSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
@Column(nullable = false)
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
@Temporal(value = TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見(jiàn)可給我留言,愿共同學(xué)習(xí)進(jìn)步。