And dont be shy to ask help in mailing list. Hivemind is a great product
> 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@...]
>> Sent: Wednesday, December 05, 2007 7:32 PM
>> To:
user@...
>> Subject: Using Hivemind to wrap a transaction around a request
>>
>> [Note: This is a cross-post; I have initially posted to the list
>>
users@... 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)
>> }
>> }
>>
>
>