jdbc jndi websphere-liberty

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>