Hi Peter

Having looked at the exception you are getting and the your newly
posted persistence.xml file it seems that you might need to specify
the connection driver to be used. 

I have only used OpenJPA for embeded applications rather than web
applications. But I would have thought that you would still need to
supply the driver. I also know that you need supply certain
libraries for JPA to work with Tomcat.

Sorry can't be much more help.

David

On Sun, 17 May 2009 14:53:41
+0100 Peter Henderson <[email protected]> wrote:

> David,
> 
> Thanks for helping, although I don't think this issue is 
> HSQLDB related. The persisence.xml file i posted had those 
> items commented out. I've attached a cleaned up version [1]
> 
> Cheers
> 
> Peter.
> 
> 
> [1] persistence.xml
> 
> <?xml version="1.0"?>
> <persistence version="1.0" 
> xmlns="http://java.sun.com/xml/ns/persistence"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";>
>    <persistence-unit name="StarjarEnterpriseOpenjpaPU">
> 
>  
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>  
> <jta-data-source>jdbc/StarjarEnterprise5DS</jta-data-source>
> 
>  
> <class>com.starjar.starjarenterprise5.domain.AccountCategory</class>
>      <exclude-unlisted-classes>true</exclude-unlisted-classes>
> 
>      <properties>
>        <property name="openjpa.Log" value="DefaultLevel=INFO,
> Runtime=ERROR, Tool=ERROR, SQL=ERROR, DataCache=ERROR"/>
> 
>        <property name="openjpa.AutoDetach" value="close, 
> commit"/>
>        <property name="openjpa.DetachState" 
> value="loaded(DetachedStateField=false, 
> DetachedStateManager=false)"/>
>      </properties>
>    </persistence-unit>
> </persistence>
> 
> 
> 
> 
> David Beer wrote:
> > On Sun, 17 May 2009 12:19:19 +0100
> > Peter Henderson <[email protected]> wrote:
> > 
> >> I am having some problems getting OpenJPA to work under 
> >> tomcat 6.0.18.
> >>
> >> I've created a data source in tomcat/conf/context.xml [1]
> >> Referenced the data source in my web.xml [2]
> >> Tested using the data source in a servlet at start up [3] 
> >> which should prove my data source has been configured correctly.
> >>
> >> Yet when I try to initialize an entity manager factor using 
> >> my persistence.xml[4] I get an exception [5]
> >>
> >>
> >> So what have I missed?
> >>
> >>
> >> Peter.
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> [1] tomcat/conf/context.xml
> >>
> >> <Context>
> >>
> >>      <!-- Default set of monitored resources -->
> >>      <WatchedResource>WEB-INF/web.xml</WatchedResource>
> >>    
> >>
> >>
> >>      <Resource name="jdbc/StarjarEnterprise5DS" auth="Container"
> >>              type="javax.sql.DataSource" 
> >> driverClassName="org.postgresql.Driver"
> >>              url="jdbc:postgresql://127.0.0.1:5432/mydb"
> >>              username="user" password="password"
> >> maxActive="20" maxIdle="10" maxWait="-1"/>
> >>
> >>
> >> </Context>
> >>
> >>
> >>
> >> [2] web.xml
> >> <web-app version="2.5" 
> >> xmlns="http://java.sun.com/xml/ns/javaee"; 
> >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> >> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
> >> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";>
> >>
> >>
> >>      <display-name>Starjar Enterprise</display-name>
> >>
> >>     <!-- servlet and mappings here -->
> >>
> >>    <resource-ref>
> >>        <description>Starjar Datasouce Connection</description>
> >>        <res-ref-name>jdbc/StarjarEnterprise5DS</res-ref-name>
> >>        <res-type>javax.sql.DataSource</res-type>
> >>        <res-auth>Container</res-auth>
> >>    </resource-ref>
> >>
> >> </web-app>
> >>
> >>
> >>
> >> [3] Test code
> >> Context initCtx = null; Context envCtx;
> >>
> >> DataSource ds = null;
> >> try {
> >>      initCtx = new InitialContext();
> >>      envCtx = (Context) initCtx.lookup("java:comp/env");
> >>      ds = (DataSource) 
> >> envCtx.lookup("jdbc/StarjarEnterprise5DS");
> >>      System.out.println("Got DATA SOURCE VIA " + ds);
> >>      log.error("++++++++++++Got DATA SOURCE VIA JNDI " + ds);
> >>
> >>      // Test out the datasource.
> >>      Connection con = ds.getConnection();
> >>      //PreparedStatement ps = con.prepareStatement("SELECT 
> >> 'Hello World'");
> >>      PreparedStatement ps = con.prepareStatement("SELECT * 
> >> from organization");
> >>      ResultSet rs = ps.executeQuery();
> >>      while (rs.next()) {
> >>          String msg = rs.getString(1);
> >>          log.info("Ran query got message " + msg);
> >>      }
> >>      rs.close();
> >>      ps.close();
> >>      con.close();
> >>
> >>
> >> } catch (Exception ex) {
> >>      log.error("+++++++++++++++++++++Did not get DS", ex);
> >>      ex.printStackTrace();
> >> }
> >>
> >>
> >>
> >>
> >> [4] My persistence.xml
> >> <?xml version="1.0"?>
> >> <persistence version="1.0" 
> >> xmlns="http://java.sun.com/xml/ns/persistence"; 
> >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> >> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
> >> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";>
> >>    <persistence-unit name="StarjarEnterpriseOpenjpaPU">
> >>
> >>  
> >> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
> >> <!-- 
> >> <jta-data-source>jdbc/StarjarEnterprise5DS</jta-data-source> -->
> >>  
> >> <jta-data-source>java:comp/env/jdbc/StarjarEnterprise5DS</jta-data-source>
> >>
> >> <!-- snip class entries -->
> >>      <properties>
> >>        <property name="openjpa.Log" value="DefaultLevel=INFO,
> >> Runtime=ERROR, Tool=ERROR, SQL=ERROR, DataCache=ERROR"/>
> >>
> >>        <property name="openjpa.AutoDetach" value="close, 
> >> commit"/>
> >>        <!--property name="openjpa.DetachState" value="all"/-->
> >>        <property name="openjpa.DetachState" 
> >> value="loaded(DetachedStateField=false, 
> >> DetachedStateManager=false)"/>
> >>
> >>        <!--property name="openjpa.AutoDetach" value="close"/-->
> >>
> >>        <!--<property name="openjpa.ConnectionDriverName" 
> >> value="org.postgresql.Driver"/> -->
> >>
> >>
> >>
> >>
> >> <!--
> >>        <property name="openjpa.ConnectionURL" 
> >> value="jdbc:hsqldb:tutorial_database"/>
> >>        <property name="openjpa.ConnectionDriverName" 
> >> value="org.hsqldb.jdbcDriver"/>
> >>        <property name="openjpa.ConnectionUserName" value="sa"/>
> >>        <property name="openjpa.ConnectionPassword" value=""/>
> >>        <property name="openjpa.Log" 
> >> value="DefaultLevel=WARN, Tool=INFO"/>
> >> -->
> >>      </properties>
> >>
> >>
> >>
> >>
> >>
> >> [5] The exception
> >> <openjpa-1.2.1-r752877:753278 fatal user error> 
> >> org.apache.openjpa.persistence.ArgumentException: A JDBC 
> >> Driver or DataSource class name must be specified in the 
> >> ConnectionDriverName property.
> >>    at 
> >> org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:74)
> >>    at 
> >> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:784)
> >>    at 
> >> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:561)
> >>    at 
> >> org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1265)
> >>    at 
> >> org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:505)
> >>    at 
> >> org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:430)
> >>    at 
> >> org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
> >>    at 
> >> org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
> >>    at 
> >> org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
> >>    at 
> >> org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:863)
> >>    at 
> >> org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:854)
> >>    at 
> >> org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
> >>    at 
> >> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:183)
> >>    at 
> >> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> >>    at 
> >> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> >>    at 
> >> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> >>    at 
> >> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> >>    at 
> >> com.starjar.starjarenterprise5.remote_impl.EntityManagerServlet.getEntityManager(EntityManagerServlet.java:119)
> >>    at 
> >> com.starjar.starjarenterprise5.remote_impl.EntityManagerServlet.initializeEntityManger(EntityManagerServlet.java:102)
> >>    at 
> >> com.starjar.starjarenterprise5.remote_impl.EntityManagerServlet.init(EntityManagerServlet.java:141)
> >>    at 
> >> org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
> >>    at 
> >> org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
> >>    at 
> >> org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
> >>    at 
> >> org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
> >>    at 
> >> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
> >>    at 
> >> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
> >>    at 
> >> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
> >>    at 
> >> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
> >>    at 
> >> org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
> >>    at 
> >> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
> >>    at 
> >> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
> >>    at 
> >> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
> >>    at 
> >> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
> >>    at 
> >> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
> >>    at 
> >> org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
> >>    at 
> >> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
> >>    at 
> >> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
> >>    at 
> >> org.apache.catalina.core.StandardService.start(StandardService.java:516)
> >>    at 
> >> org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
> >>    at 
> >> org.apache.catalina.startup.Catalina.start(Catalina.java:578)
> >>    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >> Method) at 
> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>    at 
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>    at java.lang.reflect.Method.invoke(Method.java:597)
> >>    at 
> >> org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
> >>    at 
> >> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
> >> 17-May-2009 12:02:18 
> >> org.apache.catalina.core.StandardContext loadOnStartup
> >>
> >>
> >>
> >>
> >>
> > 
> > Hi Peter
> > 
> > I think your problem may lie in the persistece.xml file the
> > Connection URL[1] either doesn't match properly or OpenJpa can't
> > find the correct jar file with the folder in.
> > 
> > [1] http://hsqldb.org/web/hsqlDocsFrame.html
> > 
> > David
> > 
> 
> 

Reply via email to