Hi Bengt, the error you see in my experience is almost always due to the jta-data-source not being found, OpenJPA then goes on to try creating a data source from the properties (in the persistence.xml not the ones in blueprint) where you have nothing specified.
In your persistence xml I think where you have: > <jta-data-source>osgi:services/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/refdatajta)</jta-data-source> it should be > <jta-data-source>osgi:service/javax.sql.XADataSource/(osgi.jndi.service.name=jdbc/refdatajta)</jta-data-source> Two things there: - the url namespace is org:service, not osgi:services - the interface needs to match what you export in blueprint below where you have javax.sql.XADataSource rather than just javax.sql.DataSource Hope this helps :) Valentin On 18 Sep 2010, at 11:11, Bengt Rodehav wrote: > I cannot seem to get OpenJPA and MySQL to work in Aries. I use Aries > 0.2-incubating, OpenJPA 2.0.1 and the 5.1.13 version of MySQL's JDBC driver. > > I have no problems connecting to MySQL outside of OSGi but cannot get it to > work in OSGi. BTW I mostly use PaxExam for the Aries tests and I run on Felix > 2.0.0. > > My persistence.xml looks as follows: > > <?xml version="1.0" encoding="UTF-8"?> > <persistence 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_2_0.xsd" > version="2.0"> > <persistence-unit name="refdataPU" transaction-type="JTA"> > > <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> > > <jta-data-source>osgi:services/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/refdatajta)</jta-data-source> > <class>se.digia.sts.refdata.domain.Account</class> > <class>se.digia.sts.refdata.domain.BusinessUnit</class> > <class>se.digia.sts.persistence.EntityBase</class> > <exclude-unlisted-classes>true</exclude-unlisted-classes> > <properties> > <property name="openjpa.Connection2URL" > value="jdbc:mysql://localhost:3306/refdata" /> > <property name="openjpa.Connection2DriverName" > value="com.mysql.jdbc.Driver" /> > <property name="openjpa.Connection2UserName" value="someuser" /> > <property name="openjpa.Connection2Password" value="somepassword" /> > <property name="openjpa.ConnectionFactoryMode" value="managed" /> > <property name="openjpa.jdbc.SynchronizeMappings" > value="buildSchema(ForeignKeys=true)" /> > <property name="openjpa.jdbc.DBDictionary" > value="org.apache.openjpa.jdbc.sql.MySQLDictionary" /> > <property name="openjpa.jdbc.UpdateManager" value="operation-order" /> > <property name="openjpa.Log" value="DefaultLevel=TRACE, Tool=INFO" /> > </properties> > </persistence-unit> > </persistence> > > and the blueprint for my datasource looks as follows: > > <?xml version="1.0" encoding="UTF-8"?> > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0" > default-activation="lazy"> > > <bean id="refdataXADataSource" > class="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"> > <property name="user" value="someuser" /> > <property name="password" value="somepassword" /> > <property name="URL" value="jdbc:mysql://localhost:3306/refdata" /> > <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />--> > <!-- <property name="url" value="jdbc:mysql://localhost:3306/refdata" > />--> > </bean> > > <service ref="refdataXADataSource" interface="javax.sql.XADataSource"> > <service-properties> > <entry key="osgi.jndi.service.name" value="jdbc/refdatajta" /> > </service-properties> > </service> > > </blueprint> > > I get the following exception: > > <openjpa-2.0.1-r422266:989424 nonfatal general error> > org.apache.openjpa.persistence.PersistenceException: There were errors > initializing your configuration: <openjpa-2.0.1-r422266:989424 fatal user > error> org.apache.openjpa.util.UserException: A connection could not be > obtained for driver class "null" and URL "null". You may have specified an > invalid URL. > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:261) > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:247) > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:728) > > > I've tried numerous ways to configure the MysqlXADataSource to no avail. > Seems like this must be a very common combination which leads me to hope that > someone can help me out. The only samples I've seen in combination with Aries > uses a Derby database that doesn't seem to need any configuration. > > I don't think there is anything wrong with the actual settings (user, > password, URL) since they work perfectly outside of OSGi. However, the > settings don't seem to get to the data source. I've probably not fully > understood how this works. My next step would be to somehow configure a > connection pool but it seems like just getting things to work occupies most > of time right now. > > Any clues? > > /Bengt >
