Friday, June 1, 2012

Re: GWT + Hibernate + MySQL inside Eclipse

See this thread.

On Sunday, May 20, 2012 5:42:49 PM UTC-6, Bill Compton wrote:
Our Hibernate setup works fine in non-GWT projects. I'm using Eclipse Indigo, Google Suite Plugin 2.5, Google GWT Designer 2.4.2.

The short-short version is that the MysqlConnectionPoolDataSource class from jetty-env.xml is evidently not getting instantiated, causing the resource reference from web.xml to fail.

Here are the steps I took and excerpts of files that I think matter. (Apologies in advance - this is a bit verbose but wanted to be sure my question is complete and clear.)

My war/WEB-INF/classes/hibernate.cfg.xml includes:
        <property name="hibernate.connection.datasource">
            java:comp/env/jdbc/nndb
        </property>

A service class AuthenticateServiceImpl.authenticate(Credentials c) calls DAOFactory.getDefaultInstance().getCustomerDAO();
The above works fine in my pure tomcat (non-GWT project). But in the GWT project it fails with:
    SEVERE: Could not find datasource: java:comp/env/jdbc/nndb
    javax.naming.NameNotFoundException; remaining name 'jdbc/nndb'
So, I added following entry to web.xml:
    <resource-ref>
        <description>NN Database Connection Pooling</description>
        <res-ref-name>jdbc/nndb</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
and also created CustomJettyLauncher as described here.
and added Eclipse run config to use it (Run Config Arguments -server com....CustomJettyLauncher)
This results in:
jetty-6.1.x
[WARN] Configuration problem at <resource-ref><description>NN Database Connection Pooling</description><res-ref-name>jdbc/nndb</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth><res-sharing-scope>Shareable</res-sharing-scope></resource-ref>
java.lang.IllegalStateException: Nothing to bind for name javax.sql.DataSource/default

Presumably at this point I need an entry in either the jetty-env.xml or jetty-web.xml file (which?) defining the resource. I tried jetty-env.xml:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <New id="nndb" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>jdbc/nndb</Arg>
    <Arg> <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
           <Set name="Url">jdbc:mysql://dbserver/dbname</Set>
           <Set name="User">dbuser</Set>
           <Set name="Password">dbpasswd</Set>
        </New>
    </Arg>
   </New>
</Configure>

But the above error (Nothing to bind for name javax.sql.DataSource/default) remains. Interestingly, if I intentionally bugger up the datasource classname (e.g. NOSUCH.com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource) there's no gripe, so it may not even be trying to instantiate that class. (Similar "tracer" errors for WebAppContext and Resource DO produce gripes, so it's only ConnectionPoolDataSource that it's not trying to instantiate.)

I also tried using a jetty-web.xml file but that is evidently not getting read at all.

Whew!

Does anyone see what's wrong? Any recommendations would be greatly appreciated.

Thanks in advance!

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/hG_myikwZxgJ.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

No comments:

Post a Comment