`

在EJB中测试JTA

    博客分类:
  • EJB
阅读更多
1、首先在jboss 中mysql-ds.xml的配置文件中配置二个数据源
<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>admin</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>
  <local-tx-datasource>
    <jndi-name>MySqlDS2</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/ejb2</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>admin</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>

2、在建立好的ejb项目中的persistence.xml配置文件中做好相应的配置
<persistence-unit name="test" transaction-type="JTA">
  		<jta-data-source>java:/MySqlDS</jta-data-source>
  		<class>com.bjsxt.jpa.Person</class>
  		<exclude-unlisted-classes>true</exclude-unlisted-classes>
  		<properties>
  			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
  			<property name="hibernate.show_sql" value="true"/>
  			<property name="hibernate.hbm2ddl.auto" value="update"/>
  		</properties>
	</persistence-unit>
	
	<persistence-unit name="test2" transaction-type="JTA">
  		<jta-data-source>java:/MySqlDS2</jta-data-source>
  		<class>com.bjsxt.jpa.User</class>
  		<exclude-unlisted-classes>true</exclude-unlisted-classes>
  		<properties>
  			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
  			<property name="hibernate.show_sql" value="true"/>
  			<property name="hibernate.hbm2ddl.auto" value="update"/>
  		</properties>
	</persistence-unit>


3、具体编码
//为了测试不同的事物,下面编写了2个实体类
import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Person implements Serializable{
	@Id
	@GeneratedValue
	private int id;

	private String name;

	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}
import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User implements Serializable{
	@Id
	@GeneratedValue
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

//编写接口
public interface PersonService {	
	public void add(Person p, User u);
}

//编写实现
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
@Remote
@Local
public class PersonServiceImpl implements PersonService {
        //注意:下面的add方法中存储的二个对象是放在两个不同的数据库中的
	@PersistenceContext(unitName="test")
	private EntityManager entityManager;
	@PersistenceContext(unitName="test2")
	private EntityManager entityManager2;
	public void add(Person p, User u) {
		entityManager.persist(p);
		entityManager2.persist(u);
         //在此抛出一个异常,看事物能否回滚、
		throw new RuntimeException("Error");	}
}

//客户端调用
import javax.naming.InitialContext;

import com.bjsxt.jpa.Person;
import com.bjsxt.jpa.PersonService;
import com.bjsxt.jpa.User;

public class Client {
	public static void main(String[] args) throws Exception{
		InitialContext ctx = new InitialContext();
		PersonService ps = (PersonService)ctx.lookup("PersonServiceImpl/remote");
		
		Person p = new Person();
		p.setName("张三");
		
		User u = new User();
		u.setName("李四");
		
		ps.add(p, u);
   }
}

实验结果:在add方法中如果不抛出异常,那么二个数据库中的数据都能添加成功,而如果在在二个方法中有一个出现错误,事物便会回滚保证事物的一致性。
分享到:
评论
1 楼 潜心修炼 2011-01-28  
如果想要测试JTA,需要使用tx-datasource数据源
你的测试中只是使用了本地的事务管理器

相关推荐

    Wicket6.7_Spring3.2_Hibernate4.2_EJB全注解实例

    Wicket6.7 Spring3.2 Hibernate4.2 EJB全注解实例.采用JTA事务管理,配置ehcache为二级缓存,在glassfish3.2.2和postgresql9测试通过。参考网上的资料整理。

    java8看不到源码-ioc-unit:使用jpa、resteasy、ejb、jta、jms、validation为部署创建测试的工具箱,

    为避免在开发周期中部署服务器,加快新开发代码的检查/测试,如 TDD 中的要求。 以简单的方式启动 testdbms (H2),而不必在 test-persistence.xml-files 中摸索额外的持久性单元 ioc-unit-resteasy 在哪里可以提供...

    Java测试新技术TestNG和高级概念.part1

    展示了与测试有关的折衷考虑,这样您就能在测试什么和怎么测试方面做出更好的决定。 介绍了TestNG,说明了它的目标和功能,并展示了如何在真实的环境中应用这些功能。 展示了如何集成TestNG和已有的代码、开发框架...

    Java测试新技术TestNG和高级概念.part2

    展示了与测试有关的折衷考虑,这样您就能在测试什么和怎么测试方面做出更好的决定。 介绍了TestNG,说明了它的目标和功能,并展示了如何在真实的环境中应用这些功能。 展示了如何集成TestNG和已有的代码、开发框架...

    Wicket6.0_Spring3.1_Hibernate4.1_EJB全注解实例

    Wicket6.0_Spring3.1_Hibernate4.1_EJB全注解实例。采用JTA事务管理,在glassfish3.1.2和postgresql9测试通过。参考网上的资料整理。

    java高手真经 高级编程卷 卷4(4卷)

    (1)准备程序 eclipse.zip //01.Eclipse入门样例...emis04(EJB+MySQL+JTA+JAAS).zip //12.安全——为服务端增加JAAS安全验证功能 emis04(Struts2+Spring+EJB+JAAS).zip //12.安全——为客户端增加JAAS安全验证功能

    java高手真经 高级编程卷 光盘内容 卷1(4卷)

    (1)准备程序 eclipse.zip //01.Eclipse入门样例...emis04(EJB+MySQL+JTA+JAAS).zip //12.安全——为服务端增加JAAS安全验证功能 emis04(Struts2+Spring+EJB+JAAS).zip //12.安全——为客户端增加JAAS安全验证功能

    java高手真经 高级编程卷 卷3(4卷)

    (1)准备程序 eclipse.zip //01.Eclipse入门样例...emis04(EJB+MySQL+JTA+JAAS).zip //12.安全——为服务端增加JAAS安全验证功能 emis04(Struts2+Spring+EJB+JAAS).zip //12.安全——为客户端增加JAAS安全验证功能

    java高手真经 高级编程卷 卷2(4卷)

    (1)准备程序 eclipse.zip //01.Eclipse入门样例...emis04(EJB+MySQL+JTA+JAAS).zip //12.安全——为服务端增加JAAS安全验证功能 emis04(Struts2+Spring+EJB+JAAS).zip //12.安全——为客户端增加JAAS安全验证功能

    Ariproject:在Git上锻炼

    要测试此示例: 在username名字段中输入名称,然后单击“ Greet! 。 如果输入的用户名不在数据库中,则会收到一条消息,提示No such user exists! 。 如果输入有效的用户名,则会收到一条消息“ H

    Java高手真经 高级编程篇 part4/7

    本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...

    BEA WebLogic Server8.1大全 源码

    本书全面介绍了WebLogic在J2EE应用程序的各个方面所完成的任务:从使用servlet、JSP和EJB,到管理分布式系统,包括利用JTA的事务处理、利用JNDI的目录服务、利用JMS的消息系统,等等。本书作者还特别注意WebLogic中...

    java 面试题 总结

    但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 21、...

    Hibernate实战(第2版 中文高清版)

     9.5 在EJB组件中使用Java Persistence   9.5.1 注入EntityManager   9.5.2 查找EntityManager   9.5.3 访问EntityManagerFactory   9.6 小结   第10章 事务和并发   10.1 事务本质   10.1.1 数据库...

    Java高手真经 高级编程篇part2/7

    本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...

    Java高手真经 高级编程篇 part7/7

    本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...

    Java高手真经 高级编程篇 part5/7

    本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...

    Java高手真经 高级编程篇 part6/7

    本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...

    Java高手真经 高级编程篇part3/7

    本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

Global site tag (gtag.js) - Google Analytics