EJB3.0实现跨数据库进行存取
环境:MySQL5.1/JBoss5.1
1.加入跨数据库的数据源,由于JBoss没有提供mysql的配置文件,所以要手工加入:
mysql-xa-ds.xml:(注意:不是mysql-ds.xml)
MySqlXADS1
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
jdbc:mysql://localhost/ejb?useUnicode=true&characterEncoding=UTF-8
root
root
root
root
5
20
5000
15
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
mySQL
MySqlXADS2
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
jdbc:mysql://localhost/ejb2?useUnicode=true&characterEncoding=UTF-8
root
root
root
root
5
20
5000
15
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
mySQL
2.加入数据库驱动jar到JBOSS_HOME/server/default/lib下
mysql-connector-java-5.0.2.jar
注意:不要加入过低的版本,如mysql-connector-java-2.0.14.jar,否则JBoss找不到相关类也不能进行加载
3.persistence.xml
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">
java:/MySqlXADS1
com.pojo.User
true
java:/MySqlXADS2
com.pojo.Person
true
4.Bean的实现类:
@Stateless
@Remote(UserManager.class)
public class UserManagerImpl implements UserManager {
@PersistenceContext(unitName="JTA_DatabasesPU")
private EntityManager em;
@PersistenceContext(unitName="JTA_DatabasesPU2")
private EntityManager em2;
public void addDatas() {
User user = new User();
user.setId(1);
user.setName("Chuyang");
em.persist(user);
Person person = new Person();
person.setId(1);
person.setName("WuMeng");
em2.persist(person);
//测试跨数据库回滚
//throw new RuntimeException("测试跨数据库回滚 异常");
}
}
5.然后在建立一个测试类进行测试就可以了。
注:代码省略了实体bean,接口等部分