Hi Filip,

I found the problem. It had to do with how a datasource is retrieved from
the data context.

I found this out after digging in the source code of Hibernate. It seems,
like when I wrote a simple servlet to get a connection like this:

String datasourceName = "jdbc/workout_logger"
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup(datasourceName);
Connection conn = ds.getConnection();

Everything worked great. However, the Hibernate people try to retrieve the
datasource similar to this:
String datasourceName = "jdbc/workout_logger"
DataSource ds = (DataSource)new InitialContext().lookup(datasourceName);

Then when I changed my datasource name from my persistence.xml to
"java:/comp/env/jdbc/workout_logger", then everything started working fine.
Note that in server.xml the resource is still called "jdbc/workout_logger"

I guess what really threw me off was that having the datasource in
persistence.xml as "jdbc/workout_logger" worked fine in Glassfish. So I
don't know if Glassfish's implementation tries to find Datasources by the
provided lookup name, and if that fails, maybe try again by prepending
"java:/comp/env/" or something.

Thanks for the help though.

Arturo Guedez




However, in their 
It seems like when using Glassfish, when you make a call to "




Filip Hanik - Dev Lists wrote:
> 
> check the logs earlier, if you havent moved the mysql-xxx.jar into 
> TC_HOME/lib, then tomcat can't create the connection pool, and the JDBC 
> name will not exist
> 
> Filip
> 
> arturoguedez wrote:
>> The error hasn't actually changed from the one I posted originally. Is
>> there
>> any way of changing Tomcat's logging to display more information? I know
>> there is a reference to a Ejb3Configuration.buildEntityManagerFactory but
>> i
>> am not actually using EJB3's. I am just using the
>> EntityManagers/EntityManagerFactory that uses config from
>> persistence.xml, a
>> file in which you can tell it what datasource to make your persistence
>> unit
>> to use. I tell it to use "jdbc/workout_logger".
>>
>> I guess I can try writing a simple Servlet that tries to get the context
>> using the example in Tomcat's docs. I just thought that in the end, all
>> ways
>> call the same InitialContext.lookup method.
>>
>> Arturo 
>>
>> - I have copied the same stacktrace that I am getting. It's almost as if
>> the
>> config changes haven't done anything. Just to make sure that it's loading
>> the files, I tried to start tomcat with a "broken" xml and it fails to
>> start, so I know that it's loading the right config files.
>>
>> 1 17:32:17 ERROR ceConnectionProvider: Could not find datasource:
>> jdbc/workout_logger
>>  javax.naming.NameNotFoundException: Name jdbc is not bound in this
>> Context
>>      at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
>>      at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
>>      at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
>>      at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>      at
>>
>> org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
>>  
>> at
>>
>> org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
>>  
>> at
>>
>> org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
>>  
>> at
>>  org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89) 
>> at
>>  org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101) 
>> at
>>
>> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325) 
>> at
>>
>> org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
>>  
>> at
>>
>> org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
>>  
>> at
>>
>> org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
>>  
>> at
>>
>> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
>>  ....
>>
>>
>> Filip Hanik - Dev Lists wrote:
>>   
>>> post the actual error you see with the new config
>>>
>>> arturoguedez wrote:
>>>     
>>>> Thanks for the help. I just tried it and it still does work.
>>>>
>>>> Here is the exact content of my current server.xml and my context.xml 
>>>>
>>>> Server.xml:
>>>>
>>>> <?xml version='1.0' encoding='utf-8'?>
>>>> <Server port="8005" shutdown="SHUTDOWN">
>>>>
>>>>   <Listener className="org.apache.catalina.core.AprLifecycleListener"
>>>> SSLEngine="on" />
>>>>   <Listener className="org.apache.catalina.core.JasperListener" />
>>>>   <Listener
>>>> className="org.apache.catalina.mbeans.ServerLifecycleListener"
>>>> />
>>>>   <Listener
>>>> className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
>>>> />
>>>>
>>>>   <GlobalNamingResources>
>>>>     <Resource name="UserDatabase" auth="Container"
>>>>               type="org.apache.catalina.UserDatabase"
>>>>               description="User database that can be updated and saved"
>>>>              
>>>> factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
>>>>               pathname="conf/tomcat-users.xml" />
>>>>
>>>>     <Resource name="jdbc/workout_logger" auth="Container"
>>>> type="javax.sql.DataSource"
>>>>                maxActive="100" maxIdle="30" maxWait="10000"
>>>>                username="user" password="password"
>>>> driverClassName="com.mysql.jdbc.Driver"
>>>>               
>>>> url="jdbc:mysql://localhost:3306/workout_logging?autoReconnect=true"/>
>>>>
>>>>   </GlobalNamingResources>
>>>>
>>>>   <Service name="Catalina">
>>>>     <Connector port="8080" protocol="HTTP/1.1" 
>>>>                connectionTimeout="20000" 
>>>>                redirectPort="8443" />
>>>>
>>>>     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
>>>>
>>>>     <Engine name="Catalina" defaultHost="localhost">
>>>>
>>>>       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
>>>>              resourceName="UserDatabase"/>
>>>>
>>>>       <Host name="localhost"  appBase="webapps"
>>>>             unpackWARs="true" autoDeploy="true"
>>>>             xmlValidation="false" xmlNamespaceAware="false">
>>>>       </Host>
>>>>
>>>>     </Engine>
>>>>   </Service>
>>>> </Server>
>>>>
>>>>
>>>>
>>>> Context.xml
>>>>
>>>> <?xml version='1.0' encoding='utf-8'?>
>>>> <Context>
>>>>
>>>>     <WatchedResource>WEB-INF/web.xml</WatchedResource>
>>>>     <ResourceLink name="jdbc/workout_logger"
>>>> global="jdbc/workout_logger"/>
>>>>
>>>> </Context>
>>>>
>>>>
>>>>
>>>> I check and my db user "user" has full access to the DB it's trying to
>>>> use.
>>>> Is it possible that I am missing a library or something in the
>>>> classpath
>>>> of
>>>> tomcat? I already have the mysql connector library ( I had my DB
>>>> connections
>>>> working fine without datasources before, but I am trying to switch to
>>>> using
>>>> datasources).
>>>>
>>>> Thanks again
>>>>
>>>> Arturo
>>>>
>>>>
>>>>
>>>>
>>>> Filip Hanik - Dev Lists wrote:
>>>>   
>>>>       
>>>>> put this
>>>>>
>>>>>  <Resource name="jdbc/workout_logger
>>>>> " auth="Container"
>>>>>    type="javax.sql.DataSource"
>>>>>    maxActive="100" maxIdle="30" maxWait="10000"
>>>>>    username="user" password="password"
>>>>>    driverClassName="com.mysql.jdbc.Driver"
>>>>>   
>>>>> url="jdbc:mysql://localhost:3306/database_name?autoReconnect=true"/>
>>>>>
>>>>> inside the <GlobalNamingResources> in server.xml
>>>>>
>>>>> Put this
>>>>>
>>>>>  <ResourceLink name="jdbc/workout_logger"
>>>>> global="jdbc/workout_logger"/>
>>>>>
>>>>> inside the <Context> elemement in conf/context.xml
>>>>>
>>>>>
>>>>> and try again
>>>>>
>>>>> Filip
>>>>>
>>>>> arturoguedez wrote:
>>>>>     
>>>>>         
>>>>>> hey, sorry about that. The actual string I have in my app is
>>>>>> "workout_logger"
>>>>>> I just tried to replace my strings for "my_jdbc_name" for the
>>>>>> posting.
>>>>>> I
>>>>>> guess I forgot to rename the in the error.
>>>>>>
>>>>>> other than that, do you see anything else wrong?
>>>>>>
>>>>>>
>>>>>>
>>>>>> Filip Hanik - Dev Lists wrote:
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>>> here is the name you specify
>>>>>>>
>>>>>>> <res-ref-name>jdbc/my_jdbc_name</res-ref-name>
>>>>>>>
>>>>>>> and here is your error
>>>>>>> Could not find datasource:jdbc/workout_logger
>>>>>>>
>>>>>>> as you can see, somewhere you have configured the string
>>>>>>> workout_logger, 
>>>>>>> and that one doesn't exist
>>>>>>>
>>>>>>> Filip
>>>>>>>
>>>>>>> arturoguedez wrote:
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>>> Hi!
>>>>>>>>
>>>>>>>> I have been reading how to setup datasources for Tomcat 6.0.18 in
>>>>>>>> http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
>>>>>>>> and nothing I have done has allowed my web application to view the
>>>>>>>> datasource i have created.
>>>>>>>>
>>>>>>>> Here are some snippets of my web.xml, and my server.xml 
>>>>>>>>
>>>>>>>> In the web.xml
>>>>>>>>
>>>>>>>> <resource-ref>
>>>>>>>>         <description>DB Connection</description>
>>>>>>>>         <res-ref-name>jdbc/my_jdbc_name</res-ref-name>
>>>>>>>>         <res-type>javax.sql.DataSource</res-type>
>>>>>>>>         <res-auth>Container</res-auth>
>>>>>>>> </resource-ref>
>>>>>>>>
>>>>>>>> In server.xml
>>>>>>>> I have tried to place the following snip it anywhere I saw in the
>>>>>>>> docs
>>>>>>>> it
>>>>>>>> could belong to (ei, in the GlobalNamingResources, inside the Host
>>>>>>>> tag,
>>>>>>>> or
>>>>>>>> inside the Context tag in all possible locations (under
>>>>>>>> META-INF/context.xml, under
>>>>>>>> $CATALINA_BASE/conf/[engine]/[host]/[path].xml)
>>>>>>>> and I haven't been successful.
>>>>>>>>
>>>>>>>>  <Resource name="jdbc/my_jdbc_name" auth="Container"
>>>>>>>> type="javax.sql.DataSource"
>>>>>>>>                maxActive="100" maxIdle="30" maxWait="10000"
>>>>>>>>                username="user" password="password"
>>>>>>>> driverClassName="com.mysql.jdbc.Driver"
>>>>>>>>               
>>>>>>>> url="jdbc:mysql://localhost:3306/database_name?autoReconnect=true"/>
>>>>>>>>
>>>>>>>>
>>>>>>>> I am using Entity Managers to get my connections opened, here is
>>>>>>>> the
>>>>>>>> snip
>>>>>>>> it
>>>>>>>> of my persistence.xml
>>>>>>>>
>>>>>>>>        <persistence-unit name="my_pu_name"
>>>>>>>> transaction-type="RESOURCE_LOCAL">
>>>>>>>>                
>>>>>>>> <non-jta-data-source>jdbc/my_jdbc_name</non-jta-data-source>
>>>>>>>>        </persistence-unit>
>>>>>>>>
>>>>>>>> Here is what I get in my tomcat logs:
>>>>>>>>
>>>>>>>> 08/12/21 17:32:17 ERROR ceConnectionProvider: Could not find
>>>>>>>> datasource:
>>>>>>>> jdbc/workout_logger
>>>>>>>> javax.naming.NameNotFoundException: Name jdbc is not bound in this
>>>>>>>> Context
>>>>>>>>        at 
>>>>>>>> org.apache.naming.NamingContext.lookup(NamingContext.java:770)
>>>>>>>>        at 
>>>>>>>> org.apache.naming.NamingContext.lookup(NamingContext.java:153)
>>>>>>>>        at
>>>>>>>> org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
>>>>>>>>        at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>>>>>>>        at
>>>>>>>> org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
>>>>>>>>        at
>>>>>>>> org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
>>>>>>>>        at
>>>>>>>> org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
>>>>>>>>        at
>>>>>>>> org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
>>>>>>>>        at
>>>>>>>> org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
>>>>>>>>        at
>>>>>>>> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
>>>>>>>>        at
>>>>>>>> org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
>>>>>>>>        at
>>>>>>>> org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
>>>>>>>>        at
>>>>>>>> org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
>>>>>>>>        at
>>>>>>>> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
>>>>>>>> ....
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Does anybody know what I am doing wrong? Is there any way to check
>>>>>>>> which
>>>>>>>> resources Tomcat makes avaiable? I am having a really hard time
>>>>>>>> understanding what I am doing wrong.
>>>>>>>>   
>>>>>>>>       
>>>>>>>>           
>>>>>>>>               
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>   
>>>>>>       
>>>>>>           
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>
>>>>>
>>>>>
>>>>>     
>>>>>         
>>>>   
>>>>       
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>
>>>
>>>
>>>     
>>
>>   
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Tomcat-6-JDBC-connection-not-found-tp21120259p21156036.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to