David,
I am not on Java 7, but I would be willing to give it a whirl.
$ java -fullversion
java full version "1.6.0_24-b24"
I am using the aries proxy that ships out-of-the-box...from the Karaf
startup.properties file:
org/apache/aries/proxy/org.apache.aries.proxy/0.3/org.apache.aries.proxy-0.3.jar=20
Regards,
Jason
On 07/25/2012 12:34 PM, David Jencks wrote:
Are you on java 7? I haven't followed this saga very closely but there were
some aries proxy changes needed for java 7.... which aries proxy bundle do you
have?
david jencks
On Jul 25, 2012, at 12:23 PM, Jason wrote:
Hi all,
Just an update...
I just downloaded a fresh version of Karaf-2.2.8, did a checkout of
https://github.com/cschneider/Karaf-Tutorial, changed the
db/examplejpa/src/main/resources/OSGI-INF/blueprint/blueprint.xml file to have a
'default-activation="lazy"', then followed the bundle install instructions in
the readme.txt and this is the result:
karaf@root> person:add 'Christian Schneider' @schneider_chris
Error executing command: No transaction currently active
If I leave the 'default-activation="eager"', there is a java.lang.Verify
exception thrown:
Caused by: java.lang.VerifyError: (class:
net/lr/tutorial/karaf/db/examplejpa/impl/$PersonServiceImpl723600344, method:
<init> signature: (Ljava/lang/reflect/InvocationHandler;)V) Call to wrong
initialization method
at java.lang.Class.getDeclaredConstructors0(Native Method)[:1.6.0_24]
at
java.lang.Class.privateGetDeclaredConstructors(Class.java:2406)[:1.6.0_24]
at java.lang.Class.getConstructor0(Class.java:2716)[:1.6.0_24]
at java.lang.Class.getConstructor(Class.java:1674)[:1.6.0_24]
at
org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.newProxySubclassInstance(ProxySubclassGenerator.java:159)
at
org.apache.aries.proxy.impl.AsmProxyManager.createNewProxy(AsmProxyManager.java:81)
At the very least, this tells me that I am not doing anything wrong from within
my codebase. Yet, I am still hung up on this issue. Suggestions?
Regards,
Jason
On 07/24/2012 09:14 PM, Jason Reilly wrote:
David,
Yes....I deploy via a custom distribution, so all packages are set to start on
start-up. And I restarted the aries transaction bundle from the interactive
console.
Regards,
Jason
On 07/24/2012 08:39 PM, David Jencks wrote:
You did install/start the aries transaction manager bundle?
david jencks
On Jul 24, 2012, at 3:52 PM, Jason wrote:
Hi all,
I have been running into an exception lately and can't seem to remedy the problem. I am
getting a "javax.persistence.TransactionRequiredException: No transaction currently
active" exception. I am using Karaf v2.2.8, ActiveMQ 5.6.0, OpenJPA 2.1.1, and CXF
2.6.1. I followed the Apache Aries sample blog application, so there is a datasource
registered via blueprint...looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
default-activation="lazy">
<cm:property-placeholder persistent-id="edu.unc.mapseq.ds">
<cm:default-properties>
....snip....
</cm:default-properties>
</cm:property-placeholder>
<bean id="mapseq-ds-jta" class="org.postgresql.xa.PGXADataSource">
<property name="user" value="${username}" />
<property name="password" value="${password}" />
<property name="serverName" value="${serverName}" />
<property name="databaseName" value="${databaseName}" />
<property name="portNumber" value="${port}" />
</bean>
<service id="mapseqXADataSource" ref="mapseq-ds-jta"
interface="javax.sql.XADataSource">
<service-properties>
<entry key="osgi.jndi.service.name" value="jdbc/mapseqJTA" />
</service-properties>
</service>
<bean id="mapseq-ds-no-jta" class="org.postgresql.ds.PGPoolingDataSource">
<property name="user" value="${username}" />
<property name="password" value="${password}" />
<property name="serverName" value="${serverName}" />
<property name="databaseName" value="${databaseName}" />
<property name="portNumber" value="${port}" />
<property name="initialConnections" value="${maxIdle}" />
<property name="maxConnections" value="${maxActive}" />
</bean>
<service id="mapseqDataSource" ref="mapseq-ds-no-jta"
interface="javax.sql.DataSource">
<service-properties>
<entry key="osgi.jndi.service.name" value="jdbc/mapseqNoJTA" />
</service-properties>
</service>
</blueprint>
Here is the persistence.xml:
<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_1_0.xsd"
version="1.0">
<persistence-unit name="mapseq" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>aries:services/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/mapseqJTA)</jta-data-source>
<non-jta-data-source>aries:services/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/mapseqNoJTA)</non-jta-data-source>
...snip...
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)" /> -->
<!-- <property name="openjpa.Log" value="DefaultLevel=TRACE, Runtime=TRACE,
Tool=TRACE, SQL=TRACE" /> -->
<property name="openjpa.jdbc.MappingDefaults"
value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict" />
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO,
SQL=WARN" />
<property name="openjpa.jdbc.DBDictionary" value="postgres(SearchStringEscape=\,
SupportsXMLColumn=false)" />
<property name="openjpa.DataCache" value="false" />
<property name="openjpa.QueryCache" value="false" />
</properties>
</persistence-unit>
</persistence>
And finally, the blueprint.xml file to register JPA DAO services:
<?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"
xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0"
xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0"
default-activation="lazy">
<bean id="accessControlDAOImpl" class="edu.unc.mapseq.dao.jpa.AccessControlDAOImpl"
init-method="init">
<tx:transaction method="*" value="Required" />
<jpa:context property="entityManager" unitname="mapseq" />
</bean>
<service ref="accessControlDAOImpl"
interface="edu.unc.mapseq.dao.AccessControlDAO" />
...snip...
</blueprint>
Here is part of the stacktrace:
Caused by: javax.persistence.TransactionRequiredException: No transaction
currently active
at
org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getCurrentPersistenceContext(JTAPersistenceContextRegistry.java:103)
at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.getPersistenceContext(JTAEntityManager.java:83)
at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.persist(JTAEntityManager.java:278)
at edu.unc.mapseq.dao.jpa.BaseDAOImpl.save(BaseDAOImpl.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_24]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.6.0_24]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.6.0_24]
at java.lang.reflect.Method.invoke(Method.java:616)[:1.6.0_24]
at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:50)
at org.apache.aries.proxy.impl.DefaultWrapper.invoke(DefaultWrapper.java:31)
at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:78)
at $Proxy112.save(Unknown Source)
at
edu.unc.mapseq.ws.impl.HTSFSampleServiceImpl.save(HTSFSampleServiceImpl.java:45)[234:mapseq-web-service-htsf-sample:0.0.1.SNAPSHOT]
The exception occurs whenever I try to do anything that is transaction related
(like persisting an entity). I have set the logging in Karaf to DEBUG and I
can't seem to find anything out of the ordinary. Anyone seen this before???
Suggested solutions? Suggestions for debugging further?
Regards,
Jason