微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

已解决 TomEE:在 tomee.xml 中创建的数据源在 persistence.xml

如何解决已解决 TomEE:在 tomee.xml 中创建的数据源在 persistence.xml

更新:我找到了解决方案。

注意:“MyApp”是项目创建的war文件名称,例如。 MyApp.war。

  1. tomee.xml 在 war 文件解压到 webapps/ 之前执行。将 DB 文件夹放在 webapps/MyApp/WEB-INF/ 中时,文件夹 webapps/MyApp/ 不为空,这可能会阻止提取 war 文件。日志中没有“org.apache.openejb.util.JarExtractor.extract Extracting jar”证实了这一点。

提取war/jar之前执行tomee.xml的证据来自“org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=DBDataSource)”发生在提取war/jar之前。

解决方案:如果使用 tomee.xml 作为数据源,需要将 db 文件夹放在 webapps/MyApp/ 之外。

  1. 但是,如果我们使用resources.xml,我们可以将db文件夹放在webapps/MyApp/b/c中,resources.xml中定义的数据源在使用之前不会创建。我发现仅仅在resources.xml 和persistence.xml 中定义数据源本身并不会导致资源被定义。

链接 [1] 表示可以在 conf/tomee.xml 或 WEB-INF/resources.xml 中配置数据源。但是persistence.xml好像没有看到tomee.xml中配置的数据源。

数据源定义:

        <Resource id="DBDataSource" type="DataSource">
                JdbcDriver org.apache.derby.jdbc.EmbeddedDriver
                JdbcUrl jdbc:derby:directory:webapps/webapp/WEB-INF/lab11DB;create=true;user=app;password=app
                JtaManaged true
        </Resource>

(1) 将我的数据源放在 WEB-INF/resources.xml 中可使persistence.xml 工作。通过resources.xml 配置数据源生成使用tomee.xml 配置时缺少的以下日志行。

25-May-2021 18:47:59.127 INFO [main] org.apache.openejb.config.AutoConfig.deploy 配置 PersistenceUnit(name=DBPersistenceUnit) 2021 年 5 月 25 日 18:47:59.128 INFO [main] org.apache.openejb.config.AutoConfig.logautocreateResource 自动创建一个 id 为 'webapp/DBDataSourceNonJta' 的类型为 'DBPersistenceUnit' 的数据源的资源。 25-May-2021 18:47:59.129 INFO [main] org.apache.openejb.config.AutoConfig.deploy 配置服务(id=webapp/DBDataSourceNonJta,type=Resource,provider-id=webapp/DBDataSource) 25-May-2021 18:47:59.129 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe 创建资源(id=webapp/DBDataSourceNonJta) 2021 年 5 月 25 日 18:47:59.166 信息 [main] org.apache.openejb.config.AutoConfig.setJtaDataSource 将 PersistenceUnit DBPersistenceUnit 调整为来自“DBDataSource”的资源 ID“webapp/DBDataSource” 2021 年 5 月 25 日 18:47:59.167 信息 [main] org.apache.openejb.config.AutoConfig.setNonJtaDataSource 将 PersistenceUnit DBPersistenceUnit 从“null”调整为资源 ID“webapp/DBDataSourceNonJta”

(2) 将我的数据源放入 conf/tomee.xml 似乎添加数据库,因为 lib/import-DBDataSource.sql 用于向数据库添加条目。我使用 DBeaver 验证了结果。但是 JPA 持久化不起作用。

(3) 我尝试将 openejb:openejb/Resource/DBDataSource 作为 jta 源添加到 persistence.xml 中,但没有任何区别。


[1] https://www.tomitribe.com/blog/tomee-configuration-techniques/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。