多个数据源到 Websphere Liberty Profile
Multiple DataSource into Websphere Liberty Profile
是否可以在 Websphere Liberty Profile 中声明多个数据源 server.xml?有什么例子吗?
我试着去做,但我只能看到一个。当查找第二个时,我收到一条错误消息,指出未找到 jndi 名称。
我的server.xml:
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>webProfile-7.0</feature>
<feature>jndi-1.0</feature>
<feature>jdbc-4.0</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint id="defaultHttpEndpoint"
httpPort="9080"
httpsPort="9443" />
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<!-- Configuration for DSPB -->
<jndiEntry jndiName="dspb/configuration/files" value="classpath:properties/dspb.properties,classpath:properties/dspb_db_connector.properties" />
<dataSource id="ds1" jndiName="DB_DSPB_ACTIVITI" connectionManagerRef="connectionManager1" jdbcDriverRef="MyJDBCDriver">
<properties.oracle driverType="thin" databaseName="xe"
serverName="localhost" portNumber="1521"
user="dspb_activiti" password="dspb_activiti"/>
</dataSource>
<dataSource id="ds2" jndiName="DB_DSPB" connectionManagerRef="connectionManager2" jdbcDriverRef="MyJDBCDriver">
<properties.oracle driverType="thin" databaseName="xe"
serverName="localhost" portNumber="1521"
user="dspb" password="dspb"/>
</dataSource>
<connectionManager id="connectionManager1" maxPoolSize="20" minPoolSize="5"
connectionTimeout="10s" agedTimeout="30m"/>
<connectionManager id="connectionManager2" maxPoolSize="20" minPoolSize="5"
connectionTimeout="10s" agedTimeout="30m"/>
<jdbcDriver id="MyJDBCDriver">
<library>
<fileset dir="C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/" includes="ojdbc6.jar"/>
</library>
</jdbcDriver>
</server>
以及web.xml中的定义:
<resource-ref>
<res-ref-name>DB_DSPB</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<res-ref-name>DB_DSPB_ACTIVITI</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<res-ref-name>dspb/configuration/files</res-ref-name>
<res-auth>Container</res-auth>
</resource-ref>
而且我只能在 jconsole 视图中看到 DSPB:http://i.stack.imgur.com/euN8e.jpg
怎么了?
所以,ibm-web-bnd.xml 不见了,作弊的东西...
<web-bnd
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
version="1.0">
<resource-ref name="DB_DSPB" binding-name="DB_DSPB"/>
<resource-ref name="DB_DSPB_ACTIVITI" binding-name="DB_DSPB_ACTIVITI"/>
埃里克
是的,这是可能的。只需在 server.xml.
中指定单独的 <dataSource>
元素
例如:
<dataSource id="ds1" jndiName="jdbc/ds1" jdbcDriverRef="MyJDBCDriver">
<properties ... />
</dataSource>
<dataSource id="ds2" jndiName="jdbc/ds2" jdbcDriverRef="MyJDBCDriver">
<properties ... />
</dataSource>
请注意,两个数据源上都有一个 jdbcDriverRef
,对应于 <jdbcDriver>
元素的 ID。这很方便,因此您不必在每次要声明 <dataSource>
.
时都指定另一个 JDBCDriver
<jdbcDriver id="MyJDBCDriver">
<library>
<fileset dir="${server.config.dir}/jdbcDrivers" includes="driver.jar"/>
</library>
</jdbcDriver>
或者,如果您愿意,可以在数据源下嵌套 <jdbcDriver>
个元素。如果您从不在多个 <dataSource>
元素之间共享 <jdbcDriver>
,这将是理想的选择。
<dataSource id="ds1" jndiName="jdbc/ds1">
<properties ... />
<jdbcDriver>
<library>
<fileset dir="${server.config.dir}/jdbcDrivers" includes="someJDBCDriver.jar"/>
</library>
</jdbcDriver>
</dataSource>
这里是 IBM 官方文档的 link:Configuring database connectivity in Liberty
是否可以在 Websphere Liberty Profile 中声明多个数据源 server.xml?有什么例子吗?
我试着去做,但我只能看到一个。当查找第二个时,我收到一条错误消息,指出未找到 jndi 名称。
我的server.xml:
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>webProfile-7.0</feature>
<feature>jndi-1.0</feature>
<feature>jdbc-4.0</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint id="defaultHttpEndpoint"
httpPort="9080"
httpsPort="9443" />
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<!-- Configuration for DSPB -->
<jndiEntry jndiName="dspb/configuration/files" value="classpath:properties/dspb.properties,classpath:properties/dspb_db_connector.properties" />
<dataSource id="ds1" jndiName="DB_DSPB_ACTIVITI" connectionManagerRef="connectionManager1" jdbcDriverRef="MyJDBCDriver">
<properties.oracle driverType="thin" databaseName="xe"
serverName="localhost" portNumber="1521"
user="dspb_activiti" password="dspb_activiti"/>
</dataSource>
<dataSource id="ds2" jndiName="DB_DSPB" connectionManagerRef="connectionManager2" jdbcDriverRef="MyJDBCDriver">
<properties.oracle driverType="thin" databaseName="xe"
serverName="localhost" portNumber="1521"
user="dspb" password="dspb"/>
</dataSource>
<connectionManager id="connectionManager1" maxPoolSize="20" minPoolSize="5"
connectionTimeout="10s" agedTimeout="30m"/>
<connectionManager id="connectionManager2" maxPoolSize="20" minPoolSize="5"
connectionTimeout="10s" agedTimeout="30m"/>
<jdbcDriver id="MyJDBCDriver">
<library>
<fileset dir="C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/" includes="ojdbc6.jar"/>
</library>
</jdbcDriver>
</server>
以及web.xml中的定义:
<resource-ref>
<res-ref-name>DB_DSPB</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<res-ref-name>DB_DSPB_ACTIVITI</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<res-ref-name>dspb/configuration/files</res-ref-name>
<res-auth>Container</res-auth>
</resource-ref>
而且我只能在 jconsole 视图中看到 DSPB:http://i.stack.imgur.com/euN8e.jpg
怎么了?
所以,ibm-web-bnd.xml 不见了,作弊的东西...
<web-bnd
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
version="1.0">
<resource-ref name="DB_DSPB" binding-name="DB_DSPB"/>
<resource-ref name="DB_DSPB_ACTIVITI" binding-name="DB_DSPB_ACTIVITI"/>
埃里克
是的,这是可能的。只需在 server.xml.
中指定单独的<dataSource>
元素
例如:
<dataSource id="ds1" jndiName="jdbc/ds1" jdbcDriverRef="MyJDBCDriver">
<properties ... />
</dataSource>
<dataSource id="ds2" jndiName="jdbc/ds2" jdbcDriverRef="MyJDBCDriver">
<properties ... />
</dataSource>
请注意,两个数据源上都有一个 jdbcDriverRef
,对应于 <jdbcDriver>
元素的 ID。这很方便,因此您不必在每次要声明 <dataSource>
.
<jdbcDriver id="MyJDBCDriver">
<library>
<fileset dir="${server.config.dir}/jdbcDrivers" includes="driver.jar"/>
</library>
</jdbcDriver>
或者,如果您愿意,可以在数据源下嵌套 <jdbcDriver>
个元素。如果您从不在多个 <dataSource>
元素之间共享 <jdbcDriver>
,这将是理想的选择。
<dataSource id="ds1" jndiName="jdbc/ds1">
<properties ... />
<jdbcDriver>
<library>
<fileset dir="${server.config.dir}/jdbcDrivers" includes="someJDBCDriver.jar"/>
</library>
</jdbcDriver>
</dataSource>
这里是 IBM 官方文档的 link:Configuring database connectivity in Liberty