hivemind-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alebu <ale...@gmail.com>
Subject Re: Using Hivemind to wrap a transaction around a request
Date Tue, 11 Dec 2007 18:41:02 GMT
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