2016-07-07 5 views
1

Я новичок в JNDI, и я пытаюсь подключиться к своему подключению к db. Пока не повезло. Я либо получаю сообщение с сообщением: «Имя [java: comp/env] не связано в этом контексте. Невозможно найти [java: comp]» или я получил тайм-аут.Конфигурация JSDI DataSource в Tomcat 7

Вот информация о моей текущей конфигурации.

Tomcat: Apache Tomcat/7.0.29

JMV: 1.7.0_06-b24

ОС: Win 10 Pro

Tomcat \ конф \ web.xml

<resource-ref> 
<description>DB Connection</description> 
<res-ref-name>jdbc/myDatabaseName</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 

Tomcat \ conf \ context.xml

<ResourceLink type="javax.sql.DataSource" 
name="jdbc/localRemarket" 
global="jdbc/remarket" 
/> 

Я также попытался поставить ресурс в context.xml, чтобы убедиться, что это доступно для поиска:

<Resource 
type="javax.sql.DataSource" 
name="jdbc/myDatabaseName" 
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/myDatabaseName" 
username="myUsername" 
password="myPassword" 
maxActive="1500" 
maxIdle="200" 
maxwait="-1" 
testOnBorrow="true" 
testOnReturn="true" 
testWhileIdle="true" 
validationQuery="SELECT 1" 
timeBetweenEvictionRunsMillis="2000" 
minEvictableIdleTimeMillis="15000" 
removeAbandoned="true" 
removeAbandonedTimeout="5" 
/> 

Tomcat \ конф \ server.xml

<Resource 
type="javax.sql.DataSource" 
name="jdbc/myDatabaseName" 
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/myDatabaseName" 
username="myUsername" 
password="myPassword" 
maxActive="1500" 
maxIdle="200" 
maxwait="-1" 
testOnBorrow="true" 
testOnReturn="true" 
testWhileIdle="true" 
validationQuery="SELECT 1" 
timeBetweenEvictionRunsMillis="2000" 
minEvictableIdleTimeMillis="15000" 
removeAbandoned="true" 
removeAbandonedTimeout="5" 
/> 

код Java:

Connection conn; 

public void openMyConnection() { 

try { 

Properties props = new Properties(); 
props.put("java.naming.factory.initial", "org.apache.naming.java.javaURLContextFactory"); 

InitialContext ctx = new InitialContext(props); 
Context envCtx = (Context) ctx.lookup("java:comp/env"); // <<<<< PRB HERE 
// error message : Name [java:comp/env] is not bound in this Context. Unable to find [java:comp] 

org.apache.tomcat.jdbc.pool.DataSource ds = (org.apache.tomcat.jdbc.pool.DataSource) envCtx.lookup("jdbc/localDB"); 

conn = ds.getConnection(); 

} catch (Exception e) { 
System.out.println(e.getMessage()); 
} 

} 

если Я меняю

props.put("java.naming.factory.initial", "org.apache.naming.java.javaURLContextFactory"); 

для

props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); 

я получаю:

Receive таймаут

Я просмотрел много должностей, связанных с JNDI, включая следующие два, которые были наиболее полезны:

http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html и https://examples.javacodegeeks.com/enterprise-java/tomcat/tomcat-datasource-jndi-example/

Обратите внимание, что я прочитал How to configure jndi DataSource in Tomcat 7, но это не дает решения для моей проблемы.

Может ли кто-нибудь помочь решить эту проблему?

ответ

0

Он работал для меня, когда я настроил источник данных непосредственно в веб-приложение (файл META-INF/context.xml):

<Context > 
<Resource name="jdbc/EmployeeDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="scott" 
      password="tiger" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="jdbc:oracle:thin:@127.0.0.1:1521:mysid" 
      maxActive="8" 
      maxIdle="4"/> 
</Context> 
Смежные вопросы