`

在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

    2023年全国4月自考00898互联网软件应用与开发试题及答案.docx

    * J2EE关键技术包括EJB、JMS、JTA、RMI等 * RMI用于在远程对象上调用一些方法 九、JSP * JSP页面代码由普通的HTML语句和特殊的基于Java语言的嵌入式标记组成 * 在JSP中,声明的有效范围是仅在当前的JSP页面中有效 ...

    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高手真经 高级编程篇 part5/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高手真经 高级编程篇 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开发中的各种分布式与业务核心技术。...

Global site tag (gtag.js) - Google Analytics