@Konstantin, thanks much for your quick reply. I will try the
META-INF/context.xml resource. I'll also try running under 7.0.32, although
configuring Liferay to run can be a bit tedious and error prone (that's why
I normally use a bundle). And thanks for the closeMethod suggestion.

Bob

-----Original Message-----
From: Konstantin Kolinko [mailto:knst.koli...@gmail.com] 
Sent: Saturday, October 27, 2012 3:28 PM
To: Tomcat Users List
Subject: Re: JNDI datasource error upgrading from Tomcat 7.0.23 to 7.0.27

2012/10/28 Bob Dietrich <b...@bobd.biz>:
> Greetings,
> I've researched this problem for several days, but I must be doing 
> something wrong. I'm trying to upgrade from Tomcat 7.0.23 to 7.0.27 
> (actually running Liferay). I'm getting the following exception when 
> trying to access a datasource via Hibernate:
>
>     16:28:27,694 ERROR
> [http-bio-8080-exec-1][DatasourceConnectionProvider:110] Could not 
> find
> datasource: java:/comp/env/jdbc/MySqlDS
>     javax.naming.NameNotFoundException: Name 
> [java:/comp/env/jdbc/MySqlDS] is not bound in this Context. Unable to find
[java:].
>             at
> org.apache.naming.NamingContext.lookup(NamingContext.java:820)
>         at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
>             at
> org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
>         at javax.naming.InitialContext.lookup(InitialContext.java:392)
>             at
> org.hibernate.connection.DatasourceConnectionProvider.configure(Dataso
> urceCo
> nnectionProvider.java:75)
>         at
> org.hibernate.connection.ConnectionProviderFactory.newConnectionProvid
> er(Con
> nectionProviderFactory.java:143)
>             at
> org.hibernate.connection.ConnectionProviderFactory.newConnectionProvid
> er(Con
> nectionProviderFactory.java:84)
>         at
> org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFac
> tory.j
> ava:459)
>             at
> org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:90)
>         at
> org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.ja
> va:286
> 3)
>             at
> org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859)
>         at
> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java
> :1870)
>
> The exact same code runs fine in 7.0.23 (I can drop the WAR file in 
> either instance).
>
> Here is my $CATALINA_HOME/conf/context.xml file (comments removed):
>
>     <?xml version='1.0' encoding='utf-8'?>
>     <!-- The contents of this file will be loaded for each web 
> application
> -->
>     <Context>
>
>         <!-- Default set of monitored resources -->
>         <WatchedResource>WEB-INF/web.xml</WatchedResource>
>
>       <Resource name="jdbc/MySqlDS" auth="Container"
>                 type="javax.sql.DataSource"
>                         driverClassName="com.mysql.jdbc.Driver"
>                             username="xxx"
>                         password="xxx"
>
> url="jdbc:mysql://localhost:3306/xx?useUnicode=true&amp;characterEncod
> ing=UT
> F-8&amp;relaxAutoCommit=true"
>                 maxActive="200" maxIdle="30" maxWait="10000"
>                             minIdle="3"
>                         testWhileIdle="true" testOnBorrow="true"
>                             timeBetweenEvictionRunsMillis="120000"
>                         minEvictableIdleTimeMillis="600000"
>                             validationQuery="select 1"
>             />
>     </Context>
>
> The web.xml from the application:
>
>     <?xml version="1.0"?>
>         <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
> http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";>
>             <servlet>
>                     <servlet-name>HibernateServlet</servlet-name>
>
> <servlet-class>com.liferay.samplehibernate.servlet.HibernateServlet</s
> ervlet
> -class>
>             </servlet>
>         <servlet-mapping>
>                     <servlet-name>HibernateServlet</servlet-name>
>                 <url-pattern>/servlet/*</url-pattern>
>             </servlet-mapping>
>         <jsp-config>
>                     <taglib>
>
> <taglib-uri>http://java.sun.com/portlet_2_0</taglib-uri>
>                         <taglib-location>
>                                     /WEB-INF/tld/liferay-portlet.tld
>                             </taglib-location>
>                     </taglib>
>             </jsp-config>
>         <resource-ref>
>                 <description>data source</description>
>                 <res-ref-name>jdbc/MySqlDS</res-ref-name>
>                 <res-type>javax.sql.DataSource</res-type>
>                 <res-auth>Container</res-auth>
>         </resource-ref>
>     </web-app>
>
> And finally the the hibernate.cfg.xml file:
>
>     <?xml version="1.0"?>
>         <!DOCTYPE hibernate-configuration PUBLIC 
> "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
> "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd";>
>
>     <hibernate-configuration>
>                 <session-factory>
>                         <property
> name="current_session_context_class">thread</property>
>
>                         <!-- Mappings -->
>                         <property
> name="connection.datasource">java:/comp/env/jdbc/MySqlDS</property>
>                         <property name="dialect">
>                                 org.hibernate.dialect.MySQLDialect
>                         </property>
>
>                         <mapping
>
> resource="com/liferay/samplehibernate/model/FoodItem.hbm.xml" />
>                 </session-factory>
>     </hibernate-configuration>
>
> Did a bit more research. On vanilla versions of Tomcat 7.0.27 and the 
> corresponding Liferay bundle, I can make a global definition using the 
> same resource in server.xml. I can see the connection pool using 
> psi-probe and run queries. However, as soon as I introduce a 
> resource-ref, either in the app or in the global web.xml, psi-probe 
> complains that the resource is not configured correctly.
>
> Any suggestions about what I'm missing? Thanks.
>

Do you know that $CATALINA_HOME/conf/context.xml does not define a "global"
resource, but is used as the parent for webapps' own META-INF/context.xml
files?

Essentially, each web application gets its own copy of the pool.

I wonder whether "resource-ref" in web.xml is treated as a <Resource> in
app's own context.xml file and thus overwrites the default one.

1. Does it work in the current release, 7.0.32 ?
2. Does it work if you use META-INF/context.xml in your web application to
define the Resource?
3. There were many changes between 7.0.23 and 7.0.27, but none seems as a
possible cause for such change in behaviour.

BTW, I usually add closeMethod="close" attribute when configuring a database
pool.

Best regards,
Konstantin Kolinko

---------------------------------------------------------------------
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

Reply via email to