我知道对于 JBoss,您需要在相应实例的 /deploy 子目录中创建一个 [name]-ds.xml 文件。我对其他 Java EE 容器没有任何经验,但我试图尽可能地遵守标准。是否有定义 JDBC 数据源并部署它的标准方法?如果可能的话,我想在 *.ear 文件中包含我的数据源(例如,用于演示目的的嵌入式内存 HSQLDB 数据源)?
如果没有标准方式,其他容器至少会接受jboss方式吗?(/部署/*-ds.xml)
我知道对于 JBoss,您需要在相应实例的 /deploy 子目录中创建一个 [name]-ds.xml 文件。我对其他 Java EE 容器没有任何经验,但我试图尽可能地遵守标准。是否有定义 JDBC 数据源并部署它的标准方法?如果可能的话,我想在 *.ear 文件中包含我的数据源(例如,用于演示目的的嵌入式内存 HSQLDB 数据源)?
如果没有标准方式,其他容器至少会接受jboss方式吗?(/部署/*-ds.xml)
是否有定义 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>
进一步阅读:
ps 我很惊讶所有其他答案都说这不存在,虽然它显然存在,即使在最初提出这个问题时也是如此。
是否有定义 JDBC 数据源并部署它的标准方法?
不,这是特定于容器的。作为应用程序组件提供者,您应该记录您需要的资源,应用程序部署者和管理员将配置它们。
如果没有标准的方式,其他容器至少会接受JBoss的方式吗?
不,因为这是 JBoss 方式,因此是 JBoss 特有的。
context.xml
文件。jetty-env.xml
.asadmin add-resources my.xml
添加 XML 文件中描述的数据源(此处为示例)。请注意,有些项目试图以通用方式实现此目标,例如jndi-resources或Cargo。还有更复杂的解决方案,如ControlTier或Chef。
现在,在您的情况下(据我所知,您希望使用将与您的应用程序捆绑在一起的嵌入式数据库),我认为您不应该在应用程序服务器级别配置数据源。您应该使用独立的连接池(如 c3p0 或 DBCP)将数据库的 jar 打包到应用程序中。
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>
这表示“应用程序需要的这个数据库,通过标准 JNDI 在 'jdbc/myDB' 提供给我,无论是什么数据库,无论你在什么容器中运行它”。这是开发人员所能做的——其余的必须是特定于容器的,因此不是标准化的。
然后如何实际配置“myDB”取决于另一个角色,即容器的管理员。
所以我重复上面的正确答案:不。但原因是,否则,您会将您的应用程序编码到特定主机和端口上的特定类型的数据库,关键是您不应该这样做,因此没有对此的标准支持目的。