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