我知道对于JBoss,您需要在相应实例的/ deploy子目录中使用[name] -ds.xml文件。 我没有任何其他Java EE容器的经验,但我试图尽可能地坚持标准。 有没有一种标准的方法来定义JDBC数据源并进行部署?如果可能的话,我想将我的数据源包含在* .ear文件中(例如,用于演示目的的嵌入式内存HSQLDB数据源)?
如果没有标准方式,其他容器至少会接受jboss方式吗? (/部署/ * - ds.xml中)
答案 0 :(得分:25)
是否有标准方法来定义JDBC数据源并进行部署?
是的,有。它是通过<data-source>
元素完成的,您可以将其放入web.xml
,ejb-jar.xml
和application.xml
。如果您不喜欢XML,您也可以使用注释:@DataSourceDefinition
web.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。令我感到惊讶的是,所有其他答案都说这不存在,但很明显,即使在最初问这个问题的时候也是如此。
答案 1 :(得分:3)
是否有标准方法来定义JDBC数据源并进行部署?
不,这是特定于容器的。作为Application Component Provider,您应该记录所需的资源,Application deployer and Administrator将对其进行配置。
如果没有标准方式,其他容器是否至少会接受JBoss方式?
不,因为这是JBoss的方式,因此JBoss具体。
context.xml
文件。 jetty-env.xml
。 asadmin add-resources my.xml
添加XML文件中描述的数据源(例如here)。请注意,有些项目试图以jndi-resources或Cargo等通用方式实现此目标。还有更复杂的解决方案,例如ControlTier或Chef。
现在,在您的情况下(据我所知,您希望使用将与您的应用程序捆绑在一起的嵌入式数据库),我认为您不应该在应用程序服务器级别配置数据源。您应该使用独立的连接池(如c3p0或DBCP)将数据库的jar打包到应用程序中。
答案 2 :(得分:0)
Sun的Java EE理念定义了企业应用程序的设计,开发和部署中的几个角色。 Java EE设计适应并反映了这些关注点的分离。
特别是Sun希望将开发人员与应用程序的管理员分开,这是一个好主意。开发人员以与容器无关的方式编写企业组件。例如,在web.xml中,您确实以标准方式声明了DataSource:
<resource-ref>
<res-ref-name>jdbc/myDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
这说“应用程序需要这个数据库的东西,通过'jdbc / myDB'中的标准JNDI,让它可供我使用,无论数据库是什么以及你运行它的任何容器”。这与开发人员可以做的一样多 - 其余部分必然是容器特定的,因此不是标准化的。
然后“myDB”实际配置的方式取决于另一个角色,即容器的管理员。
所以我重复上面的正确答案:不。但原因是,否则,您将应用程序编写到特定主机和端口上的特定类型的数据库,关键是您不应该这样做,因此没有标准支持目的