# jndi & tomcat & datasource



## theomega (29. Jul 2005)

Hallo Leute,
ich habe hier eine Libary die ich gerne in meinem Servlet verwenden will. Die Libary ist "Quartz", ein Scheduler-Framework. Man kann Quartz angeblich an eine DataSource anbinden, damit es seine Daten aus einer Datenbank beziehen kann. Das würde ich auch gerne nutzen, da ich für mein Servlet sowiso schon eine DataSource erstellt habe. Leider versteh ich die Konfiguration nicht, evtl kann mir jemand helfen.

In der Konfiguration für die Libary soll ich folgendes eintragen (Einziges zu findendes Beispiel)

```
# "DB_JNDI_URL" is the JNDI URL for a DataSource that is managed by your
# application server.  Additionally, you can provide the class name of the 
# JNDI InitialContextFactory that you wish to use, the provider's URL, and
# a username & password for connecting to the JNDI provider, if it is not
# the default provider of your environment.
#
# "DB_JNDI_ALWAYS_LOOKUP" can be "true" or "false" - if the property is not
# set, the default is "false".  This option tells Quartz whether or not it
# should always lookup the DataSource under the JNDI tree each time it 
# needs to get a connection from it.  If set to (the default) "false", 
# Quartz will "hold on to" the DataSource after looking it up only once.
#
org.quartz.dataSource.myDS.jndiURL=jdbc/PAWS
org.quartz.dataSource.myDS.jndiAlwaysLookup=false
org.quartz.dataSource.myDS.java.naming.factory.initial=com.evermind.server.rmi.RMIInitialContextFactory
org.quartz.dataSource.myDS.java.naming.provider.url=ormi://localhost
org.quartz.dataSource.myDS.java.naming.security.principal=admin
org.quartz.dataSource.myDS.java.naming.security.credentials=123
```


In meiner server.xml von meinem Tomcat 5.5 habe ich folgendes für meinen COntext definiert:

```
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" 
				username="xxx" password="xxxx"  maxActive="100" maxIdle="30" maxWait="1000"
				driverClassName="com.mysql.jdbc.Driver"
				url="jdbc:mysql://127.0.0.1:3306/xxxx?autoReconnect=true" removeAbandoned="true" />
```

auf diese DataSource greife ich in meinem Servlet so zu:

```
javax.naming.Context initContext = new InitialContext();
			javax.naming.Context envContext  = (javax.naming.Context)initContext.lookup("java:/comp/env");
			datasource = (DataSource)envContext.lookup("jdbc/TestDB");
```

Wie müßen die Werte aus der Konfiguration gesetzt werden? 

Danke
TO


----------



## Bleiglanz (29. Jul 2005)

ich würds mal so versuchen

(vorausgesetzt jdbc/TestDB ist der globale JNDI Name, den du in der server.xml oder in context.xml gesetzt hast)


```
org.quartz.dataSource.myDS.jndiURL=jdbc/TestDB
#org.quartz.dataSource.myDS.jndiAlwaysLookup=false
#org.quartz.dataSource.myDS.java.naming.factory.initial=com.evermind.server.rmi.RMIInitialContextFactory
#org.quartz.dataSource.myDS.java.naming.provider.url=ormi://localhost
#org.quartz.dataSource.myDS.java.naming.security.principal=admin
#org.quartz.dataSource.myDS.java.naming.security.credentials=123
```


----------



## theomega (29. Jul 2005)

Hatte ich auch schon probiert, geht leider nicht, es gibt folgenden Fehler:

```
SCHWERWIEGEND: Error looking up datasource: Name jdbc is not bound in this Context
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
	at org.apache.naming.NamingContext.lookup(NamingContext.java:769)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:136)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at org.quartz.utils.JNDIConnectionProvider.init(JNDIConnectionProvider.java:135)
	at org.quartz.utils.JNDIConnectionProvider.<init>(JNDIConnectionProvider.java:111)
	at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:645)
	at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1047)
	at locator.Handler.start(Handler.java:114)
	at org.webmacro.servlet.WMServlet.init(WMServlet.java:143)
	at javax.servlet.GenericServlet.init(GenericServlet.java:211)
	at org.webmacro.servlet.WMServlet.init(WMServlet.java:92)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:750)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:130)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:307)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:385)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:748)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:678)
	at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:871)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
```

Wie gesagt, mit dem oben angegebenen Code verbinde ich Problemlos zu der Datasource, das diese nicht existiert kann also nicht sein!

Gruß und Danke
TO


----------



## Bleiglanz (30. Jul 2005)

HMM

definier die Ressource mal global in der server.xml

(nur als Test!)


----------

