Datenbank Resource wird nicht gefunden

messmar

Erfahrenes Mitglied
Hallo zusammen,

Ich schreibe einen Jersey REST API Service, der von einer Java Klasse (Subresource) aus, Zugriff und Verbindung auf lokale Datenbank steuert.. der Code scheint zunächst Fehlerfrei zu laufen bis auf die Meldung, dass die angegebene datasource nicht gefunden wird.

In Context.xml unter WEB-INF Verzeichnis, habe ich die Node Resource eingebettet und die nötigen Informationen eingetragen. Der Fehler taucht weiterhin auf.

Context.xml:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/userProfile">
<Resource
  auth="Container"
  driverClassName="org.postgresql.Driver"
  maxActive="100"
  maxIdle="30"
  maxWait="10000"
  name="apiUserProfile"
  password="postgres"
  type="javax.sql.DataSource"
  url="jdbc:postgresql://localhost:5432/apiUserProfile"
  username="postgres"/>
</Context>

Apache Tomcat Log Error:
HTML:
javax.naming.NameNotFoundException: Name [apiUserProfile] is not bound in this Context. Unable to find [apiUserProfile].
   at org.apache.naming.NamingContext.lookup(NamingContext.java:818)
   at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
   at org.apache.naming.SelectorContext.lookup(SelectorContext.java:157)
   at javax.naming.InitialContext.lookup(InitialContext.java:411)
   at net.rest.dao.DbConn.apiUserProfileConn(DbConn.java:23)
   at net.rest.service.userProfile.returnDatabaseStatus(userProfile.java:51)

Verwendet wird:
Ubuntu 14.04
Apache Tomcat 8.0
Jersey 1.9
Netbeans 8.1

Ich gehe davon aus, dass man auch in server.xml von Tomcat die Resource für DB eintragen muss, aber ich bin mir nicht ganz sicher, ob das die Ursache ist.

Hat bitte Jemand eine Idee oder Tipp, woran es legen könnte?

Danke
Messmar
 
Morgen,

gefixt.. da es für das allgemeine Interesse, hierbei meine Lösung..

Folgendes, erstmal war die Apache Tomcat doc sehr hilfreich und die findet man unter:

HTML:
http://localhost:yourPort/docs/jndi-datasource-examples-howto.html
http://localhost:yourPort/docs/jndi-datasource-examples-howto.html#PostgreSQL

dann die context.xml (unter META-INF) und web.xml (unter WEB-INF) folgendes einfügen:

context.xml:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/YourContextApp">
  <Resource name="jdbc/apiUserProfile" auth="Container"
  type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
  url="jdbc:postgresql://127.0.0.1:5432/apiUserProfile"
  username="postgres" password="postgres" maxTotal="20" maxIdle="10"
maxWaitMillis="-1"/>
</Context>

web.xml:
HTML:
<resource-ref>
  <description>postgreSQL Datasource example</description>
  <res-ref-name>jdbc/apiUserProfile</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>

dann folgendes in der Java Class, die die DB connection erstellt:

HTML:
...
DbConn = (DataSource) context.lookup("java:/comp/env/jdbc/apiUserProfile");
...

Damit hat es für mich funkt.

Grüße
Messmar
 
Zurück