我目前正在探索JakartaEE,有一个非常基本的应用程序,有几个jax-rs端点,一个服务和一个“存储库”,我的存储库使用EntityManger
写入数据库,因为我只是测试,所以我想使用内存数据库;为此我选择了hsqldb。
现在我通过EntityManagerFactory
自己创建EntityManger,因此,我还必须自己处理事务。
下一步,我想使用一个容器管理的EntityManager,该EntityManager使用@PersistenceContext
注解,并且还能够使用@Transactional
注解。
我为这种方法草拟的persistence.xml如下所示:
<persistence-unit name="test" transaction-type="JTA">
<jta-data-source>TODO</jta-data-source>
<class>demo.Jakarta.user.UserEntity</class>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:hsqldb:mem:testdb;DB_CLOSE_DELAY=-1"/>
<property name="jakarta.persistence.jdbc.user" value="sa"/>
<property name="jakarta.persistence.jdbc.password" value=""/>
<property name="jakarta.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
现在你可能已经知道了,我在jta-data-source方面遇到了一些麻烦,我找到了一些旧的参考(glasfish 4.5),在那里你可以创建一个特定于供应商的xml文件来声明数据源。
是否有一种编程方法来声明此资源并确保JNDI查找不会在启动时失败?
1条答案
按热度按时间f2uvfpb91#
作为直接在应用服务器中定义数据源的替代方法,您可以使用带有注解
jakarta.annotation.sql.DataSourceDefinition
的bean,例如:请参考javadoc来理解这个策略的所有警告,还要注意,这种数据源数据的编码锁会使你的项目不那么容易移植。
由于持久性单元数据源将使用
<jta-data-source>
获取,因此应该删除persistence.xml
的所有连接属性。