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 <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED] > >> 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 > >> [EMAIL PROTECTED] 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) > >> } > >> } > >> > > > > > >