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

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

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

是否有标准方法来定义JDBC数据源并进行部署?

就在这里。 它是通过元素完成的,您可以将其放在web.xmlejb-jar.xmlapplication.xml 。 如果您不喜欢XML,您也可以使用注释: @DataSourceDefinition

web.xml条目的示例

  java:app/myDS org.postgresql.xa.PGXADataSource pg.myserver.com my_db foo bla true TRANSACTION_READ_COMMITTED 2 10 5 0  

进一步阅读:

  • 介绍DataSourceDefinition批注
  • Java EE中@DataSourceDefinition的状态
  • 示例应用程序使用标准数据源

ps我很惊讶所有其他答案都表示这不存在,但很明显,即使在最初问这个问题的时候也是如此。

是否有标准方法来定义JDBC数据源并进行部署?

不,这是特定于容器的。 作为应用程序组件提供程序 ,您应该记录所需的资源,并且应用程序部署者和管理员将对其进行配置。

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

不,因为这是JBoss的方式,因此JBoss具体。

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

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

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

Sun的Java EE理念定义了企业应用程序的设计,开发和部署中的几个角色。 Java EE设计适应并反映了这些关注点的分离。

特别是Sun希望将开发人员与应用程序的管理员分开,这是一个好主意。 开发人员以与容器无关的方式编写企业组件。 例如,在web.xml中,您可以以标准方式声明DataSource:

  jdbc/myDB javax.sql.DataSource Container  

这说“应用程序需要这个数据库的东西,让它可供我使用,无论数据库是什么,以及你运行它的任何容器,通过’jdbc / myDB’上的标准JNDI”。 这与开发人员可以做的一样多 – 其余部分必然是容器特定的,因此不是标准化的。

然后,“myDB”实际配置的方式取决于容器管理员的不同角色。

所以我在重复上面的正确答案:不。 但原因是,否则,您将应用程序编写到特定主机和端口上的特定类型的数据库,关键是您不应该这样做,因此没有标准支持目的。