hivemind-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Carman" <ja...@carmanconsulting.com>
Subject Re: Using Hivemind to wrap a transaction around a request
Date Tue, 11 Dec 2007 18:28:55 GMT
You might also want to take a look at some of the HiveMind-based
projects at JavaForge.  In particular, look at:

http://svn.javaforge.com/svn/hivemind/hivemind-transaction
http://svn.javaforge.com/svn/hivemind/hivemind-hibernate3

Those two projects basically set up the Spring transaction/hibernate
support for you in HiveMind.  I wrote those two projects after my
article.

On 12/11/07, Alebu <aleboo@gmail.com> wrote:
> Hi Kaspar,
> There is a tutorial on TSS about Hivemind by James Carman.
> http://www.theserverside.com/tt/articles/article.tss?l=HivemindBuzz
> And as example of interceptor there is a TransactionInterceptor.
> Perhaps it can help you to start your own solution.
> And dont be shy to ask help in mailing list. Hivemind is a great product
> but lack of
> documentation is most is thing about it, so others people help is very
> important.
>
> Kaspar Fischer wrote:
> > Dear Jean-Fran├žois,
> >
> > Thank you for your email. I think I get the basic idea of what you are
> > saying:
> > Tell Hivemind to put the "begin()" and "commit()" around the relevant
> > methods
> > of Tapestry (and make it call "rollback()" on uncaught exceptions). Is
> > this
> > correct, so far?
> >
> > One first uncertainty in this is what Tapestry method I should intercept?
> > It can't be around a single page-request as redirecting, rewinding,
> > etc. won't
> > work then. Do you happen to know what might be the right method?
> >
> > I've taken a look at HiveTranse and understand parts of it. However, I do
> > not know where to start -- obviously, I need to inject my own "begin()"
> > and "commit()" as I am neither running Hibernate, not JDBC, etc.
> > directly.
> >
> > Could you maybe provide a few directions on how to write my HiveMind
> > interceptor?
> > Maybe it's easier without HiveTranse first?
> >
> > I am sorry if my questions are very basic, and I imagine it's probably
> > boring
> > for you. I can promise that I will post a solution to the tapestry
> > list and
> > also extend the article I've written at the Alfresco Wiki:
> >
> >
> > http://wiki.alfresco.com/wiki/Alfresco_and_Tapestry_on_the_Same_Tomcat_Installation
> >
> >
> > With this, you're help will hopefully not just help me but others as
> > well.
> >
> > Best,
> > Kaspar
> >
> > On 05.12.2007, at 14:09, Jean-Francois Poilpret wrote:
> >
> >> Hi Kaspar,
> >>
> >> I think you'd rather take a look at HiveMind interceptors rather than
> >> factories.
> >> You can create an Interceptor that will be called before and after any
> >> method of another service.
> >> There are several ways to create interceptors in HiveMind, take a
> >> look at
> >> HiveMind website to see simple examples.
> >>
> >> If you want to see a real-life implementation of such a system you
> >> may take
> >> a look at hivetranse (http://hivetranse.sourceforge.net) which
> >> implements
> >> the same kind of behavior as you are looking for. I think you could
> >> quite
> >> easily adapt one of the numerous hivetranse interceptors (choose one
> >> -the
> >> simples- as an example).
> >>
> >> Cheers
> >>
> >> Jean-Francois
> >>
> >> -----Original Message-----
> >> From: Kaspar Fischer [mailto:fischerk@inf.ethz.ch]
> >> Sent: Wednesday, December 05, 2007 7:32 PM
> >> To: user@hivemind.apache.org
> >> Subject: Using Hivemind to wrap a transaction around a request
> >>
> >> [Note: This is a cross-post; I have initially posted to the list
> >> users@tapestry.apache.org but I guess the issue is more related to
> >> hivemind,
> >> so I post here.]
> >>
> >> Hi list,
> >>
> >> I need to wrap "begin transaction" and "end transaction" actions around
> >> a task (a Tapestry web request, actually). I've read about Hivemind,
> >>
> >>    http://www.nabble.com/hivemind-factory-service-tf251931.html#a704856
> >>
> >> and configured a service point (see below). This works very well: my
> >> transaction is created, but I cannot see when it is ended (committed/
> >> rolled back).
> >>
> >> More precisely, I am struggling with:
> >>
> >> * What method is called on the object created by the factory when it
> >>    is discarded? It is threadDidDiscardService(), right?
> >>
> >> * How can I catch exceptions from my actual task so that I can do a
> >> rollback
> >>   instead of a commit?
> >>
> >> I am new to Hivemind, so please excuse these rather simple questions.
> >>
> >> Many thanks for you patience!
> >> Kaspar
> >>
> >> --
> >> Here's my configuration:
> >>
> >>   <service-point
> >> interface="org.my.tapestry.alfresco.AlfrescoTransactionContext"
> >> id="alfrescoContext">
> >>    <invoke-factory service-id="AlfrescoTransactionFactory"
> >> model="threaded" />
> >>   </service-point>
> >>   <service-point
> >> interface="org.apache.hivemind.ServiceImplementationFactory"
> >> id="AlfrescoTransactionFactory" parameters-occurs="none">
> >>    <create-instance
> >> class="org.my.tapestry.alfresco.AlfrescoTransactionFactory" />
> >>   </service-point>
> >>
> >> Here is my factory:
> >>
> >> public class AlfrescoTransactionFactory implements
> >> ServiceImplementationFactory, Discardable {
> >>
> >>    public Object createCoreServiceImplementation
> >> (ServiceImplementationFactoryParameters factoryParameters)
> >>    {
> >>      System.err.println("createCoreServiceImplementation"); // gets
> >> called!
> >>      UserTransaction transaction;
> >>      ServiceRegistry serviceRegistry;
> >>      try {
> >>        transaction =
> >> AlfrescoApplicationInitializer.createAndBeginAuthenticatedTransaction
> >> (true);
> >>        serviceRegistry =
> >> AlfrescoApplicationInitializer.getServiceRegistry();
> >>      }
> >>      catch (Exception e) {
> >>        throw new ApplicationRuntimeException("Could not create an
> >> Alfresco transactoin.", e);
> >>      }
> >>      return new AlfrescoTransactionContextImpl(transaction,
> >> serviceRegistry);
> >>    }
> >>
> >>    public void threadDidDiscardService()
> >>    {
> >>      System.err.println("threadDidDiscardService"); // never called!
> >>      // ... end the transaction here (todo)
> >>    }
> >> }
> >>
> >
> >
>
>

Mime
View raw message