Tomee服务器和应用程序资源以及如何在JNDI中引用或使用@Resource

时间:2017-07-22 19:31:40

标签: java java-ee jdbc resources tomee

Tomee有几个可以定义资源的地方:

  • 继承自Tomcat / Catalina
    • 服务器
      • $ {CATALINA_HOME} /conf/server.xml
      • $ {CATALINA_HOME} /conf/context.xml
    • 应用
      • $ {CATALINA_HOME} /conf/Catalina/localhost/appcontext.xml
      • $ {web应用} /META-INF/context.xml
  • Tomee介绍
    • 服务器
      • $ {CATALINA_HOME} /conf/tomee.xml
      • $ {CATALINA_HOME} /system.properties
    • 应用
      • $ {web应用} /WEB-INF/resources.xml
      • 不确定,但我还假设每个应用程序属性。

这对我来说很困惑。我只想在java:comp/env/jdbc/mydb安装连接池。

我还想补充几点注意事项:

  • 我可能想考虑定义资源服务器端 - 因此密码不是部署的一部分。
  • 我可能想考虑选择每个部署的webapp实例化一个连接池,或者为所有webapp共享一个全局连接池。
  • 我可能只想为一个webapp限制一个连接池(使用给定的用户名/密码),尽管没有使用webapp部署(因此可以选择conf/Catalina/localhost/appcontext.xml)。
  • 我知道以下文档:

我测试了在WEB-INF / resources.xml中设置一个简单的资源,并且只能在jdbc/mydb中使用它WEB-INF/classes/META-INF/persistence.xml。在conf/Catalina/localhost/appcontext.xml中定义资源时,我没有取得同样的成功。

在我看来,Tomee还有一种特殊的方式可以选择部署服务和资源的根上下文。在启动期间,我看到尝试重新映射一些资源。示例输出:

[...].createRecipe Creating Resource(id=webapp/jdbc/mydb)
[...].AutoConfig.processResourceRef Auto-linking resource-ref 'openejb/Resource/webapp/jdbc/mydb' in bean MyService to Resource(id=webapp/jdbc/mydb)

来自Tomee Documentation

<Resource id="Derby Database"  type="DataSource">
  . . . . .
</Resource>
     

全局jndi名称为java:openejb / Resource / Derby Database

那么我如何以便携方式提及它呢?

似乎我可以通过简单地将其放入WEB-INF/web.xml

来解决这个问题
  <resource-ref>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
  </resource-ref>

这允许我在JNDI中以java:comp/env/jdbc/mydb访问它。

我很抱歉在这里插入部分答案 - 但我只是在找到它时添加信息。之后,我会将其移动到答案中,或者如果有人找到更满意的答案则保持原样。

我希望明白:

  • 实例化资源的机制(何时)
  • 如何访问它们(直接通过JNDI,persistence.xml和/或@Resource标记)。
  • 围绕这些资源的任何标准做法

0 个答案:

没有答案