hi
I have almost the same setup, but I set the properties for the persistent
xml in the code, here is my setup method for database connection using
openjpa, and a jndi data sourec from tomcat
initCtx = new InitialContext();
envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/workflowdb");
HashMap<String, Object> propMap = new HashMap<String,
Object>();
propMap.put("openjpa.ConnectionFactory", ds);
propMap.put("openjpa.ConnectionDriverName",
"javax.sql.DataSource");
propMap.put("openjpa.jdbc.DBDictionary",
"org.apache.openjpa.jdbc.sql.PostgresDictionary");
propMap.put("openjpa.Sequence",
"table(Table=OPENJPA_SEQUENCE_TABLE, Increment=3)");
Then I can get a entitymanager factory like this
entityManagerFactory =
Persistence.createEntityManagerFactory(
"persistentname", propMap);
Hope this can be of help.
cheers, Håkon
2009/5/17 David Beer <[email protected]>
> 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
> > >
> >
> >
>
>
--
Håkon Sagehaug, Scientific Programmer
Parallab, Bergen Center for Computational Science (BCCS)
UNIFOB AS (University of Bergen Research Company)