Я новичок в 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, но это не дает решения для моей проблемы.
Может ли кто-нибудь помочь решить эту проблему?