You are right. I made a mistake in my code to simulate an error + rollback
On 16/11/10 12:21, Valentin Mahrwald wrote:
I am a bit confused by the scenario. If I understand this correctly the
saveIncident method throws an exception and catches it inside the method
itself. So the transaction that spans around the saveIncident method would be
unaffected ?!
What are you trying to simulate?
Just looking over it there is not a lot of trace. However,
org.apache.aries.transaction.TxInterceptorImpl logs (at debug) when
transactions start and if they fail.
On 16 Nov 2010, at 10:37, Charles Moulliard wrote:
That does not work. In fact I'm not even sure that a transaction has been
initiated
I have made the following modification
1) DAO
<bean id="incidentDAO"
class="org.apache.camel.example.reportincident.dao.impl.IncidentDAOImpl">
<!--<tx:transaction method="*" value="Required" /> -->
<jpa:context property="entityManager" unitname="ReportIncident" />
</bean>
2) Service
<bean id="incidentService"
class="org.apache.camel.example.reportincident.service.impl.IncidentServiceImpl">
<tx:transaction method="*" value="Required" />
<property name="incidentDAO">
<reference interface="org.apache.camel.example.reportincident.dao.IncidentDAO"/>
</property>
</bean>
3) Simulation of an error
public class IncidentServiceImpl implements IncidentService {
private static final transient Log LOG =
LogFactory.getLog(IncidentServiceImpl.class);
/** The incident dao. */
private IncidentDAO incidentDAO;
public void saveIncident(Incident incident) {
try {
getIncidentDAO().saveIncident(incident);
throw new Exception(">> Generate Error to simulate RollBack");
} catch (RuntimeException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
Is there a way to trace in log the Aries Transaction ?
Regards,
Charles
On 16/11/10 10:49, Valentin Mahrwald wrote:
On 16 Nov 2010, at 09:42, Charles Moulliard wrote:
There was a conflict with another ServiceMix bundle providing too jndi context.
I have remove it and restart my project. Everything works fine.
This is easier to configure compare to Spring + Hibernate stuffs on OSGI. I
will produce a tutorial with camel + aries + jpa + transaction + wicket about
that and show How Aries JPA/Transaction simplifies our lives on OSGI platform.
Question : In all the examples (Blog, AriesTrader), the transaction is defined
in the DAO layer (= layer containing the entityManager). Could it be possible
that I define the tx within the Service layer (in charge to call the DAO) ?
Yes, for all I know that should work. The JPA and Transaction extensions are
entirely independent. The transaction extensions manages the transaction bound
to the current thread while the JPA extension manages EntityManagers (and
-Factories) that access
the transaction currently active on the thread.
Regards,
Charles
On 16/11/10 10:26, Alasdair Nottingham wrote:
That is very odd. Something has not worked because the stack trace shows the
InitialContextFactoryBuilder has not been registered.
Could there be a timing issue? Perhaps the jndi bundle starts after your test.
Certainly the jndi bundle has the highest id.
Alasdair Nottingham
On 16 Nov 2010, at 09:11, Charles Moulliard<[email protected]> wrote:
Yes. The Aries JNDI bundle is started
[ 178] [Active ] [ ] [ ] [ 60] Apache Aries JNDI Bundle
(0.2.0.incubating)
On 16/11/10 09:52, Alasdair Nottingham wrote:
Hi,
Have you deployed and started the jndi bundle?
Alasdair
On 16 Nov 2010, at 08:18, Charles Moulliard<[email protected]> wrote:
Hi,
Based on the Blog example of Aries, I have created a small project that I
deploy on Fuse ESB (=Apache ServiceMix 4). The project includes a DAO layer
(=JPA), Service layer, Camel route (where a bean calls my service layer).
The following error is reported :
Caused by: java.lang.RuntimeException: The DataSource
osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/reportincidentdb)
could not be used.
at
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getDs(DelayedLookupDataSource.java:47)
at
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getConnection(DelayedLookupDataSource.java:60)
at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:137)
at
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:112)
at
org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:239)
... 100 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name
in environment or system property, or as an applet parameter, or in an
application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)[:1.6.0_22]
at
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)[:1.6.0_22]
at javax.naming.InitialContext.lookup(InitialContext.java:392)[:1.6.0_22]
at
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getDs(DelayedLookupDataSource.java:43)
Here is the bundle that I deploy to use Aries
[ 7] [Active ] [Created ] [ ] [ 20] Apache Aries Blueprint
Bundle (0.2.0.incubating)
[ 49] [Active ] [ ] [ ] [ 60] Apache Aries Transaction
Manager (0.2.0.incubating)
[ 167] [Active ] [Created ] [ ] [ 60] Aries JPA Container
blueprint integration for Aries blueprint (0.2.0.incubating)
[ 170] [Active ] [Created ] [ ] [ 60] Apache Aries Transaction
Blueprint (0.2.0.incubating)
[ 171] [Active ] [ ] [ ] [ 60] Aries JPA Container
(0.2.0.incubating)
[ 172] [Active ] [ ] [ ] [ 60] Apache Aries Util
(0.2.0.incubating)
[ 175] [Active ] [ ] [ ] [ 60] Aries JPA Container
Managed Contexts (0.2.0.incubating)
[ 178] [Active ] [ ] [ ] [ 60] Apache Aries JNDI Bundle
(0.2.0.incubating)
[ 166] [Active ] [Created ] [ ] [ 60] Reportincident ::
Persistence JPA :: Aries (1.0.0.SNAPSHOT)
[ 176] [Active ] [Created ] [ ] [ 60] Reportincident :: Service
Bundle :: Aries (1.0.0.SNAPSHOT)
What is the reason ? Is there a bundle that I miss to deploy ?
Regards,
Charles M.
Apache Committer (Camel, Servicmix and Karaf)