jdbc - Configuración de una fuente de datos con WebSphere Liberty Profile 8.5
jndi websphere-liberty (3)
Servidor WebSphere.xml
<server>
<featureManager>
<feature>jndi-1.0</feature>
<feature>jdbc-4.1</feature>
</featureManager>
<httpEndpoint id="defaultHttpEndpoint"
host="localhost"
httpPort="9080"
httpsPort="9443" />
<library id="oracle-lib">
<fileset dir="lib" includes="ojdbc6_g.jar"/>
</library>
<dataSource jndiName="jdbc/oracle">
<jdbcDriver libraryRef="oracle-lib"/>
<properties.oracle user="orbeon" password="password"
url="jdbc:oracle:thin:@//localhost:1521/orbeon"/>
</dataSource>
<application name="orbeon" location="war/orbeon" type="war">
<classloader commonLibraryRef="oracle-lib"/>
</application>
</server>
WEB-INF / ibm-web-bnd.xml
<web-bnd version="1.0"
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">
<virtual-host name="default_host"/>
<resource-ref name="jdbc/oracle" binding-name="jdbc/oracle"/>
</web-bnd>
WEB-INF / web.xml
<resource-ref>
<res-ref-name>jdbc/oracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Inyección de recursos (en lugar de web.xml + ibm-web-bnd.xml):
@Resource(lookup = "jdbc/oracle")
DataSource ds;
Mi aplicación web está obteniendo una fuente de datos de JNDI con:
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)
ctx.lookup("java:comp/env/jdbc/db");
En la aplicación WEB-INF/web.xml
, tengo:
<resource-ref>
<description>DataSource</description>
<res-ref-name>jdbc/db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
En la aplicación WEB-INF/ibm-web-bnd.xml
, tengo:
<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">
<virtual-host name="default_host"/>
<resource-ref name="jdbc/db" binding-name="jdbc/db"/>
</web-bnd>
En server.xml
WebSphere Liberty Profile, tengo (manteniendo las partes relevantes):
<server description="new server">
<featureManager>
<feature>jsp-2.2</feature>
<feature>jdbc-4.0</feature>
</featureManager>
<library id="oracle-lib">
<fileset dir="lib" includes="ojdbc5_g.jar"/>
</library>
<dataSource jndiName="jdbc/db" jdbcDriverRef="oracle-driver" type="javax.sql.DataSource">
<jdbcDriver libraryRef="oracle-lib" id="oracle-driver"/>
<connectionManager numConnectionsPerThreadLocal="10" id="ConnectionManager" minPoolSize="1"/>
<properties user="user" password="password"
url="jdbc:oracle:thin:@//db-server:1521/db"/>
</dataSource>
</server>
Cuando la aplicación intenta obtener el origen de datos de JNDI, falla con el siguiente error:
CWNEN0030E: The @Resource factory encountered a problem getting
the object instance jdbc/oracle binding object. The exception message was:
failed to resolve jdbc/oracle to javax.sql.DataSource:
javax.naming.NameNotFoundException:
Intermediate context does not exist: jdbc/oracle
¿Qué me falta aquí?
usamos DB2 en Liberty 8.5.5 y tenemos en server.xml
<dataSource id="db2" isolationLevel="TRANSACTION_READ_COMMITTED" jndiName="jdbc/db2" type="javax.sql.DataSource">
<jdbcDriver>
<library>
<fileset dir="/usr/lib/java/ibm-db2-universal-driver" includes="db2jcc4.jar, db2jcc_license_cisuz.jar, db2jcc_license_cu.jar"/>
</library>
</jdbcDriver>
<properties.db2.jcc databaseName="DB2T" portNumber="21020" serverName="db2t.lvm.de"/>
<containerAuthData password="{xor}KzspMC04" user="tdvorg"/>
</dataSource>
Quizás ayude eso.
Robert
En mi caso, la solución a continuación funciona bien para mí.
Creé un "Proyecto genérico" en Eclipse llamado "Recursos". Dentro de este proyecto creé un archivo dataSource.xml
con el siguiente contenido:
<server>
<dataSource id="ccm" jndiName="jdbc/ccm" type="javax.sql.DataSource">
<jdbcDriver id="oracle-driver" libraryRef="oracle-lib"/>
<connectionManager id="ConnectionManager" minPoolSize="1" numConnectionsPerThreadLocal="10"/>
<properties.oracle password="password" url="jdbc:oracle:thin:@128.1.30.150:1521:ccmdes" user="ccm"/>
</dataSource>
<library id="oracle-lib">
<fileset dir="C:/Oracle/product/10.1.0/Client_1/jdbc/lib" includes="ojdbc14_g.jar"/>
</library>
<jdbcDriver id="oracle" libraryRef="oracle-lib"/>
</server>
Y arrastro y coloco este archivo para la configuración del servidor en Eclipse o creo la línea en server.xml
:
<include location="${shared.config.dir}/dataSource.xml"/>
El archivo server.xml
era así:
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>jsp-2.3</feature>
<feature>adminCenter-1.0</feature>
<feature>jdbc-4.1</feature>
<feature>jndi-1.0</feature>
<feature>servlet-3.1</feature>
</featureManager>
<httpEndpoint host="localhost" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
<applicationMonitor updateTrigger="mbean"/>
<!-- Define your admin user name and password -->
<quickStartSecurity userName="admin" userPassword="password"/>
<!-- Define a keystore for the HTTPS port -->
<keyStore id="defaultKeyStore" password="Liberty"/>
<!-- Allows remote file access for config changes -->
<remoteFileAccess>
<writeDir>${server.config.dir}</writeDir>
</remoteFileAccess>
<!-- <applicationMonitor updateTrigger="mbean"/> -->
<webApplication id="TestPage" location="TestPage.war" name="TestPage"/>
<webApplication id="MonitoriaAtendimento" location="MonitoriaAtendimento.war" name="MonitoriaAtendimento"/>
<include location="${shared.config.dir}/dataSource.xml"/>
</server>