栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在persistence.xml的jta-data-source中放入什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在persistence.xml的jta-data-source中放入什么?

问题在于这

Persistence.createEntityManagerFactory("abc")
是“自己动手”
API,并且没有利用嵌入式EJB容器。您可以
EntityManager
非常轻松地在测试用例中管理一个容器。

与相关的jndi /
datasource问题一样,我建议您在examples.zip中查看示例。他们都是为了摆脱起步之苦而设计的。

这是该

testcase-injection
示例的片段,该示例显示了如何从容器中获取EntityManager和其他内容以用于测试。

首先,向测试中添加一个空的ejb-jar.xml或application-client.xml,以打开扫描测试代码的步骤:

  • src / test / resources / meta-INF / application-client.xml

然后,使用注释您的测试用例,

@org.apache.openejb.api.LocalClient
并将标准JavaEE注释用于实际注入。

@LocalClientpublic class MoviesTest extends TestCase {    @EJB    private Movies movies;    @Resource    private UserTransaction userTransaction;    @PersistenceContext    private EntityManager entityManager;    public void setUp() throws Exception {        Properties p = new Properties();        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");        p.put("movieDatabase", "new://Resource?type=DataSource");        p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");        p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");        InitialContext initialContext = new InitialContext(p);        // Here's the fun part        initialContext.bind("inject", this);    }

作为

movieDatabase
我们设置的唯一数据源,OpenEJB会自动将该数据源分配给您的持久性单元,而无需修改您的persistence.xml。您甚至可以将
<jta-data-source>
或留为
<non-jta-data-source>
空白,OpenEJB仍然会知道该怎么做。

但是为了完整起见,以下是此特定应用程序如何定义

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">  <persistence-unit name="movie-unit">    <jta-data-source>movieDatabase</jta-data-source>    <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>    <class>org.superbiz.testinjection.Movie</class>    <properties>      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>    </properties>  </persistence-unit></persistence>

然后是有趣的部分,在测试中一起使用

public void test() throws Exception {    userTransaction.begin();    try {        entityManager.persist(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));        entityManager.persist(new Movie("Joel Coen", "Fargo", 1996));        entityManager.persist(new Movie("Joel Coen", "The Big Lebowski", 1998));        List<Movie> list = movies.getMovies();        assertEquals("List.size()", 3, list.size());        for (Movie movie : list) { movies.deleteMovie(movie);        }        assertEquals("Movies.getMovies()", 0, movies.getMovies().size());    } finally {        userTransaction.commit();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号