有没有一种标准方法来定义Java EE容器的JDBC数据源?

2022-09-02 01:18:37

我知道对于 JBoss,您需要在相应实例的 /deploy 子目录中有一个 [name]-ds.xml 文件。我对其他Java EE容器没有任何经验,但我试图尽可能地坚持标准。有没有一种标准的方法来定义JDBC数据源并部署它?如果可能的话,我想将我的数据源包含在*.ear文件中(例如,用于演示目的的嵌入式内存中HSQLDB数据源)?

如果没有标准的方式,其他容器至少会接受jboss的方式吗?(/deploy/*-ds.xml)


答案 1

有没有一种标准的方法来定义JDBC数据源并部署它?

是的,有。这是通过元素完成的,您可以将其放入 和 。如果您不喜欢 XML,也可以为此使用批注:@DataSourceDefinition<data-source>web.xmlejb-jar.xmlapplication.xml

网页.xml条目示例

<data-source>
    <name>java:app/myDS</name>
    <class-name>org.postgresql.xa.PGXADataSource</class-name>
    <server-name>pg.myserver.com</server-name>
    <database-name>my_db</database-name>
    <user>foo</user>
    <password>bla</password>
    <transactional>true</transactional>
    <isolation-level>TRANSACTION_READ_COMMITTED</isolation-level>
    <initial-pool-size>2</initial-pool-size>
    <max-pool-size>10</max-pool-size>
    <min-pool-size>5</min-pool-size>
    <max-statements>0</max-statements>
</data-source>

延伸阅读:

p.s. 我很惊讶所有其他答案都说这不存在,而它显然存在,即使在最初提出这个问题的时候也是如此。


答案 2

有没有一种标准的方法来定义JDBC数据源并部署它?

不,这是特定于容器的。作为应用程序组件提供程序,您应该记录所需的资源,应用程序部署人员和管理员将配置它们。

如果没有标准的方式,其他容器至少会接受JBoss的方式吗?

不,因为这是JBoss的方式,因此JBoss是特定的。

  • 使用Tomcat,您必须使用上下文.xml文件。
  • 有了码头,.jetty-env.xml
  • 使用WebSphere,您可以创建一个所谓的WebSphere Enhanced EAR
  • 使用 WebLogic,您可以在应用程序中打包 JDBC 模块
  • 使用 GlassFish,您可以使用该命令添加 XML 文件中描述的数据源(此处的示例)。asadmin add-resources my.xml
  • 等等,等等。

请注意,有一些项目试图以通用的方式实现这一目标,如jndi-resourcesCargo。还有更复杂的解决方案,如ControlTierChef

现在,在你的情况下(据我所知,您希望使用将与您的应用程序捆绑在一起的嵌入式数据库),我认为您不应该在应用程序服务器级别配置数据源。您应该使用独立的连接池(如 c3p0 或 DBCP)将数据库 jar 打包到应用程序中。


推荐