You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2011/01/05 01:28:20 UTC

svn commit: r1055251 - in /geronimo/sandbox/djencks/txmanager: ./ geronimo-transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/

Author: djencks
Date: Wed Jan  5 00:28:20 2011
New Revision: 1055251

URL: http://svn.apache.org/viewvc?rev=1055251&view=rev
Log:
set up our tm as an osgi DS

Added:
    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java   (with props)
Modified:
    geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
    geronimo/sandbox/djencks/txmanager/pom.xml

Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml Wed Jan  5 00:28:20 2011
@@ -67,25 +67,64 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.apache.karaf</groupId>-->
+            <!--<artifactId>apache-karaf</artifactId>-->
+            <!--<version>2.1.99-SNAPSHOT</version>-->
+            <!--<type>pom</type>-->
+            <!--<scope>provided</scope>-->
+        <!--</dependency>-->
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+            </plugin>
+            <!--<plugin>-->
+              <!--<groupId>org.apache.karaf.tooling</groupId>-->
+              <!--<artifactId>features-maven-plugin</artifactId>-->
+              <!--<version>2.1.99-SNAPSHOT</version>-->
+                <!--<executions>-->
+                  <!--<execution>-->
+                    <!--<id>generate</id>-->
+                    <!--<phase>generate-resources</phase>-->
+                    <!--<goals>-->
+                      <!--<goal>generate-features-xml</goal>-->
+                    <!--</goals>-->
+                    <!--<configuration>-->
+                      <!--&lt;!&ndash;<bundles>src/main/resources/bundles.properties</bundles>&ndash;&gt;-->
+                      <!--&lt;!&ndash;<kernelVersion>2.1.99-SNAPSHOT</kernelVersion>&ndash;&gt;-->
+                      <!--&lt;!&ndash;<outputFile>target/features.xml</outputFile>&ndash;&gt;-->
+                    <!--</configuration>-->
+                  <!--</execution>-->
+                <!--</executions>-->
+              <!--</plugin>-->
+            <plugin>
+                <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
                         <Import-Package>
-                            org.objectweb.howl*;resolution:=optional,
-                            javax.resource.spi;version="1.5",
+                            javax.resource.spi;version="[1.5,2.0)",
                             *
                         </Import-Package>
+                        <Embed-Dependency>howl;inline=true</Embed-Dependency>
+                        
                     </instructions>
                 </configuration>
             </plugin>

Added: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java?rev=1055251&view=auto
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java (added)
+++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java Wed Jan  5 00:28:20 2011
@@ -0,0 +1,290 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.geronimo.transaction;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import javax.resource.spi.XATerminator;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.UserTransaction;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.Xid;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.geronimo.transaction.log.HOWLLog;
+import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
+import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
+import org.apache.geronimo.transaction.manager.MonitorableTransactionManager;
+import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
+import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
+import org.apache.geronimo.transaction.manager.TransactionImpl;
+import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
+import org.apache.geronimo.transaction.manager.XAWork;
+import org.apache.geronimo.transaction.manager.XidFactory;
+import org.apache.geronimo.transaction.manager.XidFactoryImpl;
+import org.apache.geronimo.transaction.manager.XidImporter;
+import org.objectweb.howl.log.LogConfigurationException;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@Component(metatype = true)
+@Service
+public class DSTransactionManager implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager, XATerminator, XAWork {
+
+    @Property(byteValue = {71,84,77,73,68})
+    private static final String TM_ID = "tmId";
+
+    @Property(value = "org.objectweb.howl.log.BlockLogBuffer")
+    private static final String BUFFER_CLASS_NAME = "bufferClassName";
+
+    @Property(intValue = 4)
+    private static final String BUFFER_SIZE_KBYTES = "bufferSizeKBytes";
+
+    @Property(boolValue = true)
+    private static final String CHECKSUM_ENABLED = "checksumEnabled";
+
+    @Property(boolValue = true)
+    private static final String ADLER32_CHECKSUM = "adler32Checksum";
+
+    @Property(intValue = 50)
+    private static final String FLUSH_SLEEP_TIME_MILLISECONDS = "flushSleepTimeMilliseconds";
+
+    @Property(value = "txlog")
+    private static final String LOG_FILE_DIR = "logFileDir";
+
+    @Property(value = "log")
+    private static final String LOG_FILE_EXT = "logFileExt";
+
+    @Property(value = "howl")
+    private static final String LOG_FILE_NAME = "logFileName";
+
+    @Property(intValue = 512)
+    private static final String MAX_BLOCKS_PER_FILE = "maxBlocksPerFile";
+
+    @Property(intValue = 0)
+    private static final String MAX_BUFFERS = "maxBuffers";
+
+    @Property(intValue = 2)
+    private static final String MAX_LOG_FILES = "maxLogFiles";
+
+    @Property(intValue = 4)
+    private static final String MIN_BUFFERS = "minBuffers";
+
+    @Property(intValue = -1)
+    private static final String THREADS_WAITING_FORCE_THRESHOLD = "threadsWaitingForceThreshold";
+
+    @Property(intValue = 600)
+    private static final String DEFAULT_TRANSACTION_TIMEOUT_SECONDS = "defaultTransactionTimeoutSeconds";
+
+    private GeronimoTransactionManager delegate;
+
+    //osgi DS methods
+
+    @Activate
+    void activate(BundleContext bundleContext, Map properties) throws IOException, LogConfigurationException, XAException {
+        //XID factory
+        byte[] tmId = (byte[]) properties.get(TM_ID);
+        XidFactory xidFactory = new XidFactoryImpl(tmId);
+
+        //HOWL log
+        String bufferClassName = (String) properties.get(BUFFER_CLASS_NAME);
+        int bufferSize = (Integer) properties.get(BUFFER_SIZE_KBYTES);
+        boolean checksumEnabled = (Boolean) properties.get(CHECKSUM_ENABLED);
+        boolean adler32Checksum = (Boolean) properties.get(ADLER32_CHECKSUM);
+        int flushSleepTimeMilliseconds = (Integer) properties.get(FLUSH_SLEEP_TIME_MILLISECONDS);
+        String logFileDir = (String) properties.get(LOG_FILE_DIR);
+        String logFileExt = (String) properties.get(LOG_FILE_EXT);
+        String logFileName = (String) properties.get(LOG_FILE_NAME);
+        int maxBlocksPerFile = (Integer) properties.get(MAX_BLOCKS_PER_FILE);
+        int maxBuffers = (Integer) properties.get(MAX_BUFFERS);
+        int maxLogFiles = (Integer) properties.get(MAX_LOG_FILES);
+        int minBuffers = (Integer) properties.get(MIN_BUFFERS);
+        int threadsWaitingForceThreshold = (Integer) properties.get(THREADS_WAITING_FORCE_THRESHOLD);
+        File serverBaseDir = bundleContext.getDataFile("");
+        HOWLLog howlLog = new HOWLLog(bufferClassName,
+                bufferSize,
+                checksumEnabled,
+                adler32Checksum,
+                flushSleepTimeMilliseconds,
+                logFileDir,
+                logFileExt,
+                logFileName,
+                maxBlocksPerFile,
+                maxBuffers,
+                maxLogFiles,
+                minBuffers,
+                threadsWaitingForceThreshold,
+                xidFactory,
+                serverBaseDir);
+
+        //tm
+        int defaultTransactionTimeoutSeconds = (Integer)properties.get(DEFAULT_TRANSACTION_TIMEOUT_SECONDS);
+        delegate = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, howlLog);
+    }
+
+
+    public Transaction getTransaction() {
+        return delegate.getTransaction();
+    }
+
+    public void setTransactionTimeout(int seconds) throws SystemException {
+        delegate.setTransactionTimeout(seconds);
+    }
+
+    public int getStatus() throws SystemException {
+        return delegate.getStatus();
+    }
+
+    public void begin() throws NotSupportedException, SystemException {
+        delegate.begin();
+    }
+
+    public Transaction suspend() throws SystemException {
+        return delegate.suspend();
+    }
+
+    public void resume(Transaction tx) throws IllegalStateException, InvalidTransactionException, SystemException {
+        delegate.resume(tx);
+    }
+
+    public Object getResource(Object key) {
+        return delegate.getResource(key);
+    }
+
+    public boolean getRollbackOnly() {
+        return delegate.getRollbackOnly();
+    }
+
+    public Object getTransactionKey() {
+        return delegate.getTransactionKey();
+    }
+
+    public int getTransactionStatus() {
+        return delegate.getTransactionStatus();
+    }
+
+    public void putResource(Object key, Object value) {
+        delegate.putResource(key, value);
+    }
+
+    public void registerInterposedSynchronization(Synchronization synchronization) {
+        delegate.registerInterposedSynchronization(synchronization);
+    }
+
+    public void setRollbackOnly() throws IllegalStateException {
+        delegate.setRollbackOnly();
+    }
+
+    public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
+        delegate.commit();
+    }
+
+    public void rollback() throws IllegalStateException, SecurityException, SystemException {
+        delegate.rollback();
+    }
+
+    public Transaction importXid(Xid xid, long transactionTimeoutMilliseconds) throws XAException, SystemException {
+        return delegate.importXid(xid, transactionTimeoutMilliseconds);
+    }
+
+    public void commit(Transaction tx, boolean onePhase) throws XAException {
+        delegate.commit(tx, onePhase);
+    }
+
+    public void forget(Transaction tx) throws XAException {
+        delegate.forget(tx);
+    }
+
+    public int prepare(Transaction tx) throws XAException {
+        return delegate.prepare(tx);
+    }
+
+    public void rollback(Transaction tx) throws XAException {
+        delegate.rollback(tx);
+    }
+
+    public void recoveryError(Exception e) {
+        delegate.recoveryError(e);
+    }
+
+    public void registerNamedXAResourceFactory(NamedXAResourceFactory namedXAResourceFactory) {
+        delegate.registerNamedXAResourceFactory(namedXAResourceFactory);
+    }
+
+    public void unregisterNamedXAResourceFactory(String namedXAResourceFactoryName) {
+        delegate.unregisterNamedXAResourceFactory(namedXAResourceFactoryName);
+    }
+
+    public Map<Xid, TransactionImpl> getExternalXids() {
+        return delegate.getExternalXids();
+    }
+
+    public void addTransactionAssociationListener(TransactionManagerMonitor listener) {
+        delegate.addTransactionAssociationListener(listener);
+    }
+
+    public void removeTransactionAssociationListener(TransactionManagerMonitor listener) {
+        delegate.removeTransactionAssociationListener(listener);
+    }
+
+    public void commit(Xid xid, boolean onePhase) throws XAException {
+        delegate.commit(xid, onePhase);
+    }
+
+    public void forget(Xid xid) throws XAException {
+        delegate.forget(xid);
+    }
+
+    public int prepare(Xid xid) throws XAException {
+        return delegate.prepare(xid);
+    }
+
+    public Xid[] recover(int flag) throws XAException {
+        return delegate.recover(flag);
+    }
+
+    public void rollback(Xid xid) throws XAException {
+        delegate.rollback(xid);
+    }
+
+    public void begin(Xid xid, long txTimeoutMillis) throws XAException, InvalidTransactionException, SystemException, ImportedTransactionActiveException {
+        delegate.begin(xid, txTimeoutMillis);
+    }
+
+    public void end(Xid xid) throws XAException, SystemException {
+        delegate.end(xid);
+    }
+}

Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java?rev=1055251&r1=1055250&r2=1055251&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java Wed Jan  5 00:28:20 2011
@@ -16,10 +16,10 @@
  */
 package org.apache.geronimo.transaction.manager;
 
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+
 import javax.resource.spi.XATerminator;
 import javax.transaction.InvalidTransactionException;
 import javax.transaction.Status;

Modified: geronimo/sandbox/djencks/txmanager/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/pom.xml (original)
+++ geronimo/sandbox/djencks/txmanager/pom.xml Wed Jan  5 00:28:20 2011
@@ -26,7 +26,7 @@
         <groupId>org.apache.geronimo.genesis</groupId>
         <artifactId>genesis-java5-flava</artifactId>
         <version>2.0</version>
-        <relativePath />
+        <relativePath/>
     </parent>
 
     <groupId>org.apache.geronimo.components</groupId>
@@ -89,7 +89,7 @@
                 <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
                 <version>1.0</version>
             </dependency>
-                
+
             <dependency>
                 <groupId>org.apache.geronimo.specs</groupId>
                 <artifactId>geronimo-validation_1.0_spec</artifactId>
@@ -110,6 +110,16 @@
                 <scope>test</scope>
             </dependency>
 
+            <dependency>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>org.apache.felix.scr.annotations</artifactId>
+                <version>1.4.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.osgi</groupId>
+                <artifactId>org.osgi.core</artifactId>
+                <version>4.2.0</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -129,6 +139,22 @@
                     </configuration>
                 </plugin>
 
+                <plugin>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>maven-scr-plugin</artifactId>
+                    <version>1.6.0</version>
+                    <executions>
+                        <execution>
+                            <id>generate-scr-scrdescriptor</id>
+                            <goals>
+                                <goal>scr</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <specVersion>1.1</specVersion>
+                    </configuration>
+                </plugin>
             </plugins>
         </pluginManagement>
     </build>



Re: svn commit: r1055251 - in /geronimo/sandbox/djencks/txmanager: ./ geronimo-transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/

Posted by Guillaume Nodet <gn...@gmail.com>.
On Wed, Jan 5, 2011 at 06:46, David Jencks <da...@yahoo.com> wrote:
> Hi Guillaume,
>
> First of all note that this is in my sandbox and is to a large extent an attempt to evaluate DS.  It looks to me as if karaf does not include DS, is there a reason you know of not to use it?  While there are some odd bits it looks pretty useful to me so far.  The main odd bit I've found is I haven't found a way to have a single-use factory that creates the service(s) that get registered but is not registered itself.
>
> I hadn't looked closely but remembered, apparently wrongly, that the aries tm used blueprint and didn't have a log.  I'll certainly take a closer look.  Was there ever a discussion of developing or moving this osgi code to geronimo?  Neither the jta nor j2ca specs use the osgi enhancements AFAIK so it seems like an independent issue to the spec enhancements.

The goal was to implement the Spec coming out of the OSGi EEG around
Transaction, so Aries seemed like a good fit.  Note that the spec is
mostly about registering the TransactonManager as an OSGi service, so
not much here, I agree.
As I said, I don't really care about where the code is, it has already
moved around a few times, I won't object to a new move if it makes
sense.

>
> I agree duplicating work between projects is a bad idea.  It was a long time ago and I may be mis-remembering but IIRC I didn't understand the objections to the osgi enhancements to the specs.  I didn't work on the geronimo osgi spec enhancements but I believe they started from the servicemix versions but Rick found that most of them didn't follow the spec requirements closely so made a lot of changes.
>
> IIUC Rick has also come up with a replacement service locator that is osgi friendly.  It requires installation on the boot classpath, but for those specs that can just use the built in service locator I think it might be worth changing them back and relying on this somewhat more general solution.

I agree, but the ServiceMix community was not really involved in the
process, leading to a duplication of efforts, since the Servicemix
community still work on the specs and that lots of specs we need
aren't provided by the geronimo ones, so we can't really migrate
anyway.

>
> thanks
> david jencks
>
> On Jan 4, 2011, at 5:12 PM, Guillaume Nodet wrote:
>
>> On Wed, Jan 5, 2011 at 02:00, David Jencks <da...@yahoo.com> wrote:
>>> 1. I wanted to learn about DS
>>> 2. I wanted to use config admin which I don't think is really ready in blueprint
>>
>> The Aries Transaction manager does not use blueprint, just plain OSGi,
>> so no DS dependency even.
>> The current implementation uses a ManagedServiceFactory and is fully
>> configured using config admin.
>>
>>> 3. I don't think the aries tm has a tx log nor exposes many of the interfaces we need.
>>
>> It has the tx log configured and exposes the following interfaces:
>>        clazzes.add(TransactionManager.class.getName());
>>        clazzes.add(TransactionSynchronizationRegistry.class.getName());
>>        clazzes.add(UserTransaction.class.getName());
>>        clazzes.add(RecoverableTransactionManager.class.getName());
>> If any are missing, a simple additional line should work.
>>
>>> 4. the tx manager is a geronimo project, we should be the ones making it osgi-friendly.
>>
>> I don't have any problems moving OSGi related things back to Geronimo,
>> but this project started in ServiceMix even before Geronimo considered
>> OSGi at all.
>> The project moved to Aries and it may make sense to move it back to
>> Geronimo, but please don't duplicate the work if there's no real
>> reason.
>> The same thing already happened with the osgi enabled specs that have
>> been duplicated from ServiceMix to Geronimo instead of collaborating
>> on some enhancements (if you remember, those enhancements had first
>> been rejected the geronimo community when I tried to introduce those a
>> few years ago).
>>
>>>
>>> david jencks
>>>
>>> On Jan 4, 2011, at 4:44 PM, Guillaume Nodet wrote:
>>>
>>>> Why not reusing the Aries one ?
>>>>
>>>> On Wed, Jan 5, 2011 at 01:28,  <dj...@apache.org> wrote:
>>>>> Author: djencks
>>>>> Date: Wed Jan  5 00:28:20 2011
>>>>> New Revision: 1055251
>>>>>
>>>>> URL: http://svn.apache.org/viewvc?rev=1055251&view=rev
>>>>> Log:
>>>>> set up our tm as an osgi DS
>>>>>
>>>>> Added:
>>>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java   (with props)
>>>>> Modified:
>>>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>>>>    geronimo/sandbox/djencks/txmanager/pom.xml
>>>>>
>>>>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>>>>> ==============================================================================
>>>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml (original)
>>>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml Wed Jan  5 00:28:20 2011
>>>>> @@ -67,25 +67,64 @@
>>>>>         </dependency>
>>>>>
>>>>>         <dependency>
>>>>> +            <groupId>org.apache.felix</groupId>
>>>>> +            <artifactId>org.apache.felix.scr.annotations</artifactId>
>>>>> +        </dependency>
>>>>> +        <dependency>
>>>>> +            <groupId>org.osgi</groupId>
>>>>> +            <artifactId>org.osgi.core</artifactId>
>>>>> +        </dependency>
>>>>> +        <dependency>
>>>>>             <groupId>junit</groupId>
>>>>>             <artifactId>junit</artifactId>
>>>>>             <scope>test</scope>
>>>>>         </dependency>
>>>>> +        <!--<dependency>-->
>>>>> +            <!--<groupId>org.apache.karaf</groupId>-->
>>>>> +            <!--<artifactId>apache-karaf</artifactId>-->
>>>>> +            <!--<version>2.1.99-SNAPSHOT</version>-->
>>>>> +            <!--<type>pom</type>-->
>>>>> +            <!--<scope>provided</scope>-->
>>>>> +        <!--</dependency>-->
>>>>>     </dependencies>
>>>>>
>>>>>     <build>
>>>>>         <plugins>
>>>>>             <plugin>
>>>>>                 <groupId>org.apache.felix</groupId>
>>>>> +                <artifactId>maven-scr-plugin</artifactId>
>>>>> +            </plugin>
>>>>> +            <!--<plugin>-->
>>>>> +              <!--<groupId>org.apache.karaf.tooling</groupId>-->
>>>>> +              <!--<artifactId>features-maven-plugin</artifactId>-->
>>>>> +              <!--<version>2.1.99-SNAPSHOT</version>-->
>>>>> +                <!--<executions>-->
>>>>> +                  <!--<execution>-->
>>>>> +                    <!--<id>generate</id>-->
>>>>> +                    <!--<phase>generate-resources</phase>-->
>>>>> +                    <!--<goals>-->
>>>>> +                      <!--<goal>generate-features-xml</goal>-->
>>>>> +                    <!--</goals>-->
>>>>> +                    <!--<configuration>-->
>>>>> +                      <!--<!–<bundles>src/main/resources/bundles.properties</bundles>–>-->
>>>>> +                      <!--<!–<kernelVersion>2.1.99-SNAPSHOT</kernelVersion>–>-->
>>>>> +                      <!--<!–<outputFile>target/features.xml</outputFile>–>-->
>>>>> +                    <!--</configuration>-->
>>>>> +                  <!--</execution>-->
>>>>> +                <!--</executions>-->
>>>>> +              <!--</plugin>-->
>>>>> +            <plugin>
>>>>> +                <groupId>org.apache.felix</groupId>
>>>>>                 <artifactId>maven-bundle-plugin</artifactId>
>>>>>                 <configuration>
>>>>>                     <instructions>
>>>>>                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
>>>>>                         <Import-Package>
>>>>> -                            org.objectweb.howl*;resolution:=optional,
>>>>> -                            javax.resource.spi;version="1.5",
>>>>> +                            javax.resource.spi;version="[1.5,2.0)",
>>>>>                             *
>>>>>                         </Import-Package>
>>>>> +                        <Embed-Dependency>howl;inline=true</Embed-Dependency>
>>>>> +
>>>>>                     </instructions>
>>>>>                 </configuration>
>>>>>             </plugin>
>>>>>
>>>>> Added: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java?rev=1055251&view=auto
>>>>> ==============================================================================
>>>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java (added)
>>>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java Wed Jan  5 00:28:20 2011
>>>>> @@ -0,0 +1,290 @@
>>>>> +/*
>>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>>> + * or more contributor license agreements.  See the NOTICE file
>>>>> + * distributed with this work for additional information
>>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>>> + * to you under the Apache License, Version 2.0 (the
>>>>> + * "License"); you may not use this file except in compliance
>>>>> + * with the License.  You may obtain a copy of the License at
>>>>> + *
>>>>> + *  http://www.apache.org/licenses/LICENSE-2.0
>>>>> + *
>>>>> + * Unless required by applicable law or agreed to in writing,
>>>>> + * software distributed under the License is distributed on an
>>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>> + * KIND, either express or implied.  See the License for the
>>>>> + * specific language governing permissions and limitations
>>>>> + * under the License.
>>>>> + */
>>>>> +
>>>>> +
>>>>> +package org.apache.geronimo.transaction;
>>>>> +
>>>>> +import java.io.File;
>>>>> +import java.io.IOException;
>>>>> +import java.util.Map;
>>>>> +
>>>>> +import javax.resource.spi.XATerminator;
>>>>> +import javax.transaction.HeuristicMixedException;
>>>>> +import javax.transaction.HeuristicRollbackException;
>>>>> +import javax.transaction.InvalidTransactionException;
>>>>> +import javax.transaction.NotSupportedException;
>>>>> +import javax.transaction.RollbackException;
>>>>> +import javax.transaction.Synchronization;
>>>>> +import javax.transaction.SystemException;
>>>>> +import javax.transaction.Transaction;
>>>>> +import javax.transaction.TransactionManager;
>>>>> +import javax.transaction.TransactionSynchronizationRegistry;
>>>>> +import javax.transaction.UserTransaction;
>>>>> +import javax.transaction.xa.XAException;
>>>>> +import javax.transaction.xa.Xid;
>>>>> +import org.apache.felix.scr.annotations.Activate;
>>>>> +import org.apache.felix.scr.annotations.Component;
>>>>> +import org.apache.felix.scr.annotations.Property;
>>>>> +import org.apache.felix.scr.annotations.Service;
>>>>> +import org.apache.geronimo.transaction.log.HOWLLog;
>>>>> +import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
>>>>> +import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
>>>>> +import org.apache.geronimo.transaction.manager.MonitorableTransactionManager;
>>>>> +import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
>>>>> +import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
>>>>> +import org.apache.geronimo.transaction.manager.TransactionImpl;
>>>>> +import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
>>>>> +import org.apache.geronimo.transaction.manager.XAWork;
>>>>> +import org.apache.geronimo.transaction.manager.XidFactory;
>>>>> +import org.apache.geronimo.transaction.manager.XidFactoryImpl;
>>>>> +import org.apache.geronimo.transaction.manager.XidImporter;
>>>>> +import org.objectweb.howl.log.LogConfigurationException;
>>>>> +import org.osgi.framework.BundleContext;
>>>>> +
>>>>> +/**
>>>>> + * @version $Rev$ $Date$
>>>>> + */
>>>>> +@Component(metatype = true)
>>>>> +@Service
>>>>> +public class DSTransactionManager implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager, XATerminator, XAWork {
>>>>> +
>>>>> +    @Property(byteValue = {71,84,77,73,68})
>>>>> +    private static final String TM_ID = "tmId";
>>>>> +
>>>>> +    @Property(value = "org.objectweb.howl.log.BlockLogBuffer")
>>>>> +    private static final String BUFFER_CLASS_NAME = "bufferClassName";
>>>>> +
>>>>> +    @Property(intValue = 4)
>>>>> +    private static final String BUFFER_SIZE_KBYTES = "bufferSizeKBytes";
>>>>> +
>>>>> +    @Property(boolValue = true)
>>>>> +    private static final String CHECKSUM_ENABLED = "checksumEnabled";
>>>>> +
>>>>> +    @Property(boolValue = true)
>>>>> +    private static final String ADLER32_CHECKSUM = "adler32Checksum";
>>>>> +
>>>>> +    @Property(intValue = 50)
>>>>> +    private static final String FLUSH_SLEEP_TIME_MILLISECONDS = "flushSleepTimeMilliseconds";
>>>>> +
>>>>> +    @Property(value = "txlog")
>>>>> +    private static final String LOG_FILE_DIR = "logFileDir";
>>>>> +
>>>>> +    @Property(value = "log")
>>>>> +    private static final String LOG_FILE_EXT = "logFileExt";
>>>>> +
>>>>> +    @Property(value = "howl")
>>>>> +    private static final String LOG_FILE_NAME = "logFileName";
>>>>> +
>>>>> +    @Property(intValue = 512)
>>>>> +    private static final String MAX_BLOCKS_PER_FILE = "maxBlocksPerFile";
>>>>> +
>>>>> +    @Property(intValue = 0)
>>>>> +    private static final String MAX_BUFFERS = "maxBuffers";
>>>>> +
>>>>> +    @Property(intValue = 2)
>>>>> +    private static final String MAX_LOG_FILES = "maxLogFiles";
>>>>> +
>>>>> +    @Property(intValue = 4)
>>>>> +    private static final String MIN_BUFFERS = "minBuffers";
>>>>> +
>>>>> +    @Property(intValue = -1)
>>>>> +    private static final String THREADS_WAITING_FORCE_THRESHOLD = "threadsWaitingForceThreshold";
>>>>> +
>>>>> +    @Property(intValue = 600)
>>>>> +    private static final String DEFAULT_TRANSACTION_TIMEOUT_SECONDS = "defaultTransactionTimeoutSeconds";
>>>>> +
>>>>> +    private GeronimoTransactionManager delegate;
>>>>> +
>>>>> +    //osgi DS methods
>>>>> +
>>>>> +    @Activate
>>>>> +    void activate(BundleContext bundleContext, Map properties) throws IOException, LogConfigurationException, XAException {
>>>>> +        //XID factory
>>>>> +        byte[] tmId = (byte[]) properties.get(TM_ID);
>>>>> +        XidFactory xidFactory = new XidFactoryImpl(tmId);
>>>>> +
>>>>> +        //HOWL log
>>>>> +        String bufferClassName = (String) properties.get(BUFFER_CLASS_NAME);
>>>>> +        int bufferSize = (Integer) properties.get(BUFFER_SIZE_KBYTES);
>>>>> +        boolean checksumEnabled = (Boolean) properties.get(CHECKSUM_ENABLED);
>>>>> +        boolean adler32Checksum = (Boolean) properties.get(ADLER32_CHECKSUM);
>>>>> +        int flushSleepTimeMilliseconds = (Integer) properties.get(FLUSH_SLEEP_TIME_MILLISECONDS);
>>>>> +        String logFileDir = (String) properties.get(LOG_FILE_DIR);
>>>>> +        String logFileExt = (String) properties.get(LOG_FILE_EXT);
>>>>> +        String logFileName = (String) properties.get(LOG_FILE_NAME);
>>>>> +        int maxBlocksPerFile = (Integer) properties.get(MAX_BLOCKS_PER_FILE);
>>>>> +        int maxBuffers = (Integer) properties.get(MAX_BUFFERS);
>>>>> +        int maxLogFiles = (Integer) properties.get(MAX_LOG_FILES);
>>>>> +        int minBuffers = (Integer) properties.get(MIN_BUFFERS);
>>>>> +        int threadsWaitingForceThreshold = (Integer) properties.get(THREADS_WAITING_FORCE_THRESHOLD);
>>>>> +        File serverBaseDir = bundleContext.getDataFile("");
>>>>> +        HOWLLog howlLog = new HOWLLog(bufferClassName,
>>>>> +                bufferSize,
>>>>> +                checksumEnabled,
>>>>> +                adler32Checksum,
>>>>> +                flushSleepTimeMilliseconds,
>>>>> +                logFileDir,
>>>>> +                logFileExt,
>>>>> +                logFileName,
>>>>> +                maxBlocksPerFile,
>>>>> +                maxBuffers,
>>>>> +                maxLogFiles,
>>>>> +                minBuffers,
>>>>> +                threadsWaitingForceThreshold,
>>>>> +                xidFactory,
>>>>> +                serverBaseDir);
>>>>> +
>>>>> +        //tm
>>>>> +        int defaultTransactionTimeoutSeconds = (Integer)properties.get(DEFAULT_TRANSACTION_TIMEOUT_SECONDS);
>>>>> +        delegate = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, howlLog);
>>>>> +    }
>>>>> +
>>>>> +
>>>>> +    public Transaction getTransaction() {
>>>>> +        return delegate.getTransaction();
>>>>> +    }
>>>>> +
>>>>> +    public void setTransactionTimeout(int seconds) throws SystemException {
>>>>> +        delegate.setTransactionTimeout(seconds);
>>>>> +    }
>>>>> +
>>>>> +    public int getStatus() throws SystemException {
>>>>> +        return delegate.getStatus();
>>>>> +    }
>>>>> +
>>>>> +    public void begin() throws NotSupportedException, SystemException {
>>>>> +        delegate.begin();
>>>>> +    }
>>>>> +
>>>>> +    public Transaction suspend() throws SystemException {
>>>>> +        return delegate.suspend();
>>>>> +    }
>>>>> +
>>>>> +    public void resume(Transaction tx) throws IllegalStateException, InvalidTransactionException, SystemException {
>>>>> +        delegate.resume(tx);
>>>>> +    }
>>>>> +
>>>>> +    public Object getResource(Object key) {
>>>>> +        return delegate.getResource(key);
>>>>> +    }
>>>>> +
>>>>> +    public boolean getRollbackOnly() {
>>>>> +        return delegate.getRollbackOnly();
>>>>> +    }
>>>>> +
>>>>> +    public Object getTransactionKey() {
>>>>> +        return delegate.getTransactionKey();
>>>>> +    }
>>>>> +
>>>>> +    public int getTransactionStatus() {
>>>>> +        return delegate.getTransactionStatus();
>>>>> +    }
>>>>> +
>>>>> +    public void putResource(Object key, Object value) {
>>>>> +        delegate.putResource(key, value);
>>>>> +    }
>>>>> +
>>>>> +    public void registerInterposedSynchronization(Synchronization synchronization) {
>>>>> +        delegate.registerInterposedSynchronization(synchronization);
>>>>> +    }
>>>>> +
>>>>> +    public void setRollbackOnly() throws IllegalStateException {
>>>>> +        delegate.setRollbackOnly();
>>>>> +    }
>>>>> +
>>>>> +    public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
>>>>> +        delegate.commit();
>>>>> +    }
>>>>> +
>>>>> +    public void rollback() throws IllegalStateException, SecurityException, SystemException {
>>>>> +        delegate.rollback();
>>>>> +    }
>>>>> +
>>>>> +    public Transaction importXid(Xid xid, long transactionTimeoutMilliseconds) throws XAException, SystemException {
>>>>> +        return delegate.importXid(xid, transactionTimeoutMilliseconds);
>>>>> +    }
>>>>> +
>>>>> +    public void commit(Transaction tx, boolean onePhase) throws XAException {
>>>>> +        delegate.commit(tx, onePhase);
>>>>> +    }
>>>>> +
>>>>> +    public void forget(Transaction tx) throws XAException {
>>>>> +        delegate.forget(tx);
>>>>> +    }
>>>>> +
>>>>> +    public int prepare(Transaction tx) throws XAException {
>>>>> +        return delegate.prepare(tx);
>>>>> +    }
>>>>> +
>>>>> +    public void rollback(Transaction tx) throws XAException {
>>>>> +        delegate.rollback(tx);
>>>>> +    }
>>>>> +
>>>>> +    public void recoveryError(Exception e) {
>>>>> +        delegate.recoveryError(e);
>>>>> +    }
>>>>> +
>>>>> +    public void registerNamedXAResourceFactory(NamedXAResourceFactory namedXAResourceFactory) {
>>>>> +        delegate.registerNamedXAResourceFactory(namedXAResourceFactory);
>>>>> +    }
>>>>> +
>>>>> +    public void unregisterNamedXAResourceFactory(String namedXAResourceFactoryName) {
>>>>> +        delegate.unregisterNamedXAResourceFactory(namedXAResourceFactoryName);
>>>>> +    }
>>>>> +
>>>>> +    public Map<Xid, TransactionImpl> getExternalXids() {
>>>>> +        return delegate.getExternalXids();
>>>>> +    }
>>>>> +
>>>>> +    public void addTransactionAssociationListener(TransactionManagerMonitor listener) {
>>>>> +        delegate.addTransactionAssociationListener(listener);
>>>>> +    }
>>>>> +
>>>>> +    public void removeTransactionAssociationListener(TransactionManagerMonitor listener) {
>>>>> +        delegate.removeTransactionAssociationListener(listener);
>>>>> +    }
>>>>> +
>>>>> +    public void commit(Xid xid, boolean onePhase) throws XAException {
>>>>> +        delegate.commit(xid, onePhase);
>>>>> +    }
>>>>> +
>>>>> +    public void forget(Xid xid) throws XAException {
>>>>> +        delegate.forget(xid);
>>>>> +    }
>>>>> +
>>>>> +    public int prepare(Xid xid) throws XAException {
>>>>> +        return delegate.prepare(xid);
>>>>> +    }
>>>>> +
>>>>> +    public Xid[] recover(int flag) throws XAException {
>>>>> +        return delegate.recover(flag);
>>>>> +    }
>>>>> +
>>>>> +    public void rollback(Xid xid) throws XAException {
>>>>> +        delegate.rollback(xid);
>>>>> +    }
>>>>> +
>>>>> +    public void begin(Xid xid, long txTimeoutMillis) throws XAException, InvalidTransactionException, SystemException, ImportedTransactionActiveException {
>>>>> +        delegate.begin(xid, txTimeoutMillis);
>>>>> +    }
>>>>> +
>>>>> +    public void end(Xid xid) throws XAException, SystemException {
>>>>> +        delegate.end(xid);
>>>>> +    }
>>>>> +}
>>>>>
>>>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>>> ------------------------------------------------------------------------------
>>>>>    svn:eol-style = native
>>>>>
>>>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>>> ------------------------------------------------------------------------------
>>>>>    svn:keywords = Date Revision
>>>>>
>>>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>>> ------------------------------------------------------------------------------
>>>>>    svn:mime-type = text/plain
>>>>>
>>>>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java?rev=1055251&r1=1055250&r2=1055251&view=diff
>>>>> ==============================================================================
>>>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java (original)
>>>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java Wed Jan  5 00:28:20 2011
>>>>> @@ -16,10 +16,10 @@
>>>>>  */
>>>>>  package org.apache.geronimo.transaction.manager;
>>>>>
>>>>> -import java.util.Collection;
>>>>>  import java.util.HashMap;
>>>>>  import java.util.Iterator;
>>>>>  import java.util.Map;
>>>>> +
>>>>>  import javax.resource.spi.XATerminator;
>>>>>  import javax.transaction.InvalidTransactionException;
>>>>>  import javax.transaction.Status;
>>>>>
>>>>> Modified: geronimo/sandbox/djencks/txmanager/pom.xml
>>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>>>>> ==============================================================================
>>>>> --- geronimo/sandbox/djencks/txmanager/pom.xml (original)
>>>>> +++ geronimo/sandbox/djencks/txmanager/pom.xml Wed Jan  5 00:28:20 2011
>>>>> @@ -26,7 +26,7 @@
>>>>>         <groupId>org.apache.geronimo.genesis</groupId>
>>>>>         <artifactId>genesis-java5-flava</artifactId>
>>>>>         <version>2.0</version>
>>>>> -        <relativePath />
>>>>> +        <relativePath/>
>>>>>     </parent>
>>>>>
>>>>>     <groupId>org.apache.geronimo.components</groupId>
>>>>> @@ -89,7 +89,7 @@
>>>>>                 <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
>>>>>                 <version>1.0</version>
>>>>>             </dependency>
>>>>> -
>>>>> +
>>>>>             <dependency>
>>>>>                 <groupId>org.apache.geronimo.specs</groupId>
>>>>>                 <artifactId>geronimo-validation_1.0_spec</artifactId>
>>>>> @@ -110,6 +110,16 @@
>>>>>                 <scope>test</scope>
>>>>>             </dependency>
>>>>>
>>>>> +            <dependency>
>>>>> +                <groupId>org.apache.felix</groupId>
>>>>> +                <artifactId>org.apache.felix.scr.annotations</artifactId>
>>>>> +                <version>1.4.0</version>
>>>>> +            </dependency>
>>>>> +            <dependency>
>>>>> +                <groupId>org.osgi</groupId>
>>>>> +                <artifactId>org.osgi.core</artifactId>
>>>>> +                <version>4.2.0</version>
>>>>> +            </dependency>
>>>>>         </dependencies>
>>>>>     </dependencyManagement>
>>>>>
>>>>> @@ -129,6 +139,22 @@
>>>>>                     </configuration>
>>>>>                 </plugin>
>>>>>
>>>>> +                <plugin>
>>>>> +                    <groupId>org.apache.felix</groupId>
>>>>> +                    <artifactId>maven-scr-plugin</artifactId>
>>>>> +                    <version>1.6.0</version>
>>>>> +                    <executions>
>>>>> +                        <execution>
>>>>> +                            <id>generate-scr-scrdescriptor</id>
>>>>> +                            <goals>
>>>>> +                                <goal>scr</goal>
>>>>> +                            </goals>
>>>>> +                        </execution>
>>>>> +                    </executions>
>>>>> +                    <configuration>
>>>>> +                        <specVersion>1.1</specVersion>
>>>>> +                    </configuration>
>>>>> +                </plugin>
>>>>>             </plugins>
>>>>>         </pluginManagement>
>>>>>     </build>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Cheers,
>>>> Guillaume Nodet
>>>> ------------------------
>>>> Blog: http://gnodet.blogspot.com/
>>>> ------------------------
>>>> Open Source SOA
>>>> http://fusesource.com
>>>
>>>
>>
>>
>>
>> --
>> Cheers,
>> Guillaume Nodet
>> ------------------------
>> Blog: http://gnodet.blogspot.com/
>> ------------------------
>> Open Source SOA
>> http://fusesource.com
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Re: svn commit: r1055251 - in /geronimo/sandbox/djencks/txmanager: ./ geronimo-transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/

Posted by David Jencks <da...@yahoo.com>.
Hi Guillaume,

First of all note that this is in my sandbox and is to a large extent an attempt to evaluate DS.  It looks to me as if karaf does not include DS, is there a reason you know of not to use it?  While there are some odd bits it looks pretty useful to me so far.  The main odd bit I've found is I haven't found a way to have a single-use factory that creates the service(s) that get registered but is not registered itself.

I hadn't looked closely but remembered, apparently wrongly, that the aries tm used blueprint and didn't have a log.  I'll certainly take a closer look.  Was there ever a discussion of developing or moving this osgi code to geronimo?  Neither the jta nor j2ca specs use the osgi enhancements AFAIK so it seems like an independent issue to the spec enhancements.

I agree duplicating work between projects is a bad idea.  It was a long time ago and I may be mis-remembering but IIRC I didn't understand the objections to the osgi enhancements to the specs.  I didn't work on the geronimo osgi spec enhancements but I believe they started from the servicemix versions but Rick found that most of them didn't follow the spec requirements closely so made a lot of changes.

IIUC Rick has also come up with a replacement service locator that is osgi friendly.  It requires installation on the boot classpath, but for those specs that can just use the built in service locator I think it might be worth changing them back and relying on this somewhat more general solution.

thanks
david jencks

On Jan 4, 2011, at 5:12 PM, Guillaume Nodet wrote:

> On Wed, Jan 5, 2011 at 02:00, David Jencks <da...@yahoo.com> wrote:
>> 1. I wanted to learn about DS
>> 2. I wanted to use config admin which I don't think is really ready in blueprint
> 
> The Aries Transaction manager does not use blueprint, just plain OSGi,
> so no DS dependency even.
> The current implementation uses a ManagedServiceFactory and is fully
> configured using config admin.
> 
>> 3. I don't think the aries tm has a tx log nor exposes many of the interfaces we need.
> 
> It has the tx log configured and exposes the following interfaces:
>        clazzes.add(TransactionManager.class.getName());
>        clazzes.add(TransactionSynchronizationRegistry.class.getName());
>        clazzes.add(UserTransaction.class.getName());
>        clazzes.add(RecoverableTransactionManager.class.getName());
> If any are missing, a simple additional line should work.
> 
>> 4. the tx manager is a geronimo project, we should be the ones making it osgi-friendly.
> 
> I don't have any problems moving OSGi related things back to Geronimo,
> but this project started in ServiceMix even before Geronimo considered
> OSGi at all.
> The project moved to Aries and it may make sense to move it back to
> Geronimo, but please don't duplicate the work if there's no real
> reason.
> The same thing already happened with the osgi enabled specs that have
> been duplicated from ServiceMix to Geronimo instead of collaborating
> on some enhancements (if you remember, those enhancements had first
> been rejected the geronimo community when I tried to introduce those a
> few years ago).
> 
>> 
>> david jencks
>> 
>> On Jan 4, 2011, at 4:44 PM, Guillaume Nodet wrote:
>> 
>>> Why not reusing the Aries one ?
>>> 
>>> On Wed, Jan 5, 2011 at 01:28,  <dj...@apache.org> wrote:
>>>> Author: djencks
>>>> Date: Wed Jan  5 00:28:20 2011
>>>> New Revision: 1055251
>>>> 
>>>> URL: http://svn.apache.org/viewvc?rev=1055251&view=rev
>>>> Log:
>>>> set up our tm as an osgi DS
>>>> 
>>>> Added:
>>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java   (with props)
>>>> Modified:
>>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>>>    geronimo/sandbox/djencks/txmanager/pom.xml
>>>> 
>>>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>>>> ==============================================================================
>>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml (original)
>>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml Wed Jan  5 00:28:20 2011
>>>> @@ -67,25 +67,64 @@
>>>>         </dependency>
>>>> 
>>>>         <dependency>
>>>> +            <groupId>org.apache.felix</groupId>
>>>> +            <artifactId>org.apache.felix.scr.annotations</artifactId>
>>>> +        </dependency>
>>>> +        <dependency>
>>>> +            <groupId>org.osgi</groupId>
>>>> +            <artifactId>org.osgi.core</artifactId>
>>>> +        </dependency>
>>>> +        <dependency>
>>>>             <groupId>junit</groupId>
>>>>             <artifactId>junit</artifactId>
>>>>             <scope>test</scope>
>>>>         </dependency>
>>>> +        <!--<dependency>-->
>>>> +            <!--<groupId>org.apache.karaf</groupId>-->
>>>> +            <!--<artifactId>apache-karaf</artifactId>-->
>>>> +            <!--<version>2.1.99-SNAPSHOT</version>-->
>>>> +            <!--<type>pom</type>-->
>>>> +            <!--<scope>provided</scope>-->
>>>> +        <!--</dependency>-->
>>>>     </dependencies>
>>>> 
>>>>     <build>
>>>>         <plugins>
>>>>             <plugin>
>>>>                 <groupId>org.apache.felix</groupId>
>>>> +                <artifactId>maven-scr-plugin</artifactId>
>>>> +            </plugin>
>>>> +            <!--<plugin>-->
>>>> +              <!--<groupId>org.apache.karaf.tooling</groupId>-->
>>>> +              <!--<artifactId>features-maven-plugin</artifactId>-->
>>>> +              <!--<version>2.1.99-SNAPSHOT</version>-->
>>>> +                <!--<executions>-->
>>>> +                  <!--<execution>-->
>>>> +                    <!--<id>generate</id>-->
>>>> +                    <!--<phase>generate-resources</phase>-->
>>>> +                    <!--<goals>-->
>>>> +                      <!--<goal>generate-features-xml</goal>-->
>>>> +                    <!--</goals>-->
>>>> +                    <!--<configuration>-->
>>>> +                      <!--<!–<bundles>src/main/resources/bundles.properties</bundles>–>-->
>>>> +                      <!--<!–<kernelVersion>2.1.99-SNAPSHOT</kernelVersion>–>-->
>>>> +                      <!--<!–<outputFile>target/features.xml</outputFile>–>-->
>>>> +                    <!--</configuration>-->
>>>> +                  <!--</execution>-->
>>>> +                <!--</executions>-->
>>>> +              <!--</plugin>-->
>>>> +            <plugin>
>>>> +                <groupId>org.apache.felix</groupId>
>>>>                 <artifactId>maven-bundle-plugin</artifactId>
>>>>                 <configuration>
>>>>                     <instructions>
>>>>                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
>>>>                         <Import-Package>
>>>> -                            org.objectweb.howl*;resolution:=optional,
>>>> -                            javax.resource.spi;version="1.5",
>>>> +                            javax.resource.spi;version="[1.5,2.0)",
>>>>                             *
>>>>                         </Import-Package>
>>>> +                        <Embed-Dependency>howl;inline=true</Embed-Dependency>
>>>> +
>>>>                     </instructions>
>>>>                 </configuration>
>>>>             </plugin>
>>>> 
>>>> Added: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java?rev=1055251&view=auto
>>>> ==============================================================================
>>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java (added)
>>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java Wed Jan  5 00:28:20 2011
>>>> @@ -0,0 +1,290 @@
>>>> +/*
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + *  http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> + */
>>>> +
>>>> +
>>>> +package org.apache.geronimo.transaction;
>>>> +
>>>> +import java.io.File;
>>>> +import java.io.IOException;
>>>> +import java.util.Map;
>>>> +
>>>> +import javax.resource.spi.XATerminator;
>>>> +import javax.transaction.HeuristicMixedException;
>>>> +import javax.transaction.HeuristicRollbackException;
>>>> +import javax.transaction.InvalidTransactionException;
>>>> +import javax.transaction.NotSupportedException;
>>>> +import javax.transaction.RollbackException;
>>>> +import javax.transaction.Synchronization;
>>>> +import javax.transaction.SystemException;
>>>> +import javax.transaction.Transaction;
>>>> +import javax.transaction.TransactionManager;
>>>> +import javax.transaction.TransactionSynchronizationRegistry;
>>>> +import javax.transaction.UserTransaction;
>>>> +import javax.transaction.xa.XAException;
>>>> +import javax.transaction.xa.Xid;
>>>> +import org.apache.felix.scr.annotations.Activate;
>>>> +import org.apache.felix.scr.annotations.Component;
>>>> +import org.apache.felix.scr.annotations.Property;
>>>> +import org.apache.felix.scr.annotations.Service;
>>>> +import org.apache.geronimo.transaction.log.HOWLLog;
>>>> +import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
>>>> +import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
>>>> +import org.apache.geronimo.transaction.manager.MonitorableTransactionManager;
>>>> +import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
>>>> +import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
>>>> +import org.apache.geronimo.transaction.manager.TransactionImpl;
>>>> +import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
>>>> +import org.apache.geronimo.transaction.manager.XAWork;
>>>> +import org.apache.geronimo.transaction.manager.XidFactory;
>>>> +import org.apache.geronimo.transaction.manager.XidFactoryImpl;
>>>> +import org.apache.geronimo.transaction.manager.XidImporter;
>>>> +import org.objectweb.howl.log.LogConfigurationException;
>>>> +import org.osgi.framework.BundleContext;
>>>> +
>>>> +/**
>>>> + * @version $Rev$ $Date$
>>>> + */
>>>> +@Component(metatype = true)
>>>> +@Service
>>>> +public class DSTransactionManager implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager, XATerminator, XAWork {
>>>> +
>>>> +    @Property(byteValue = {71,84,77,73,68})
>>>> +    private static final String TM_ID = "tmId";
>>>> +
>>>> +    @Property(value = "org.objectweb.howl.log.BlockLogBuffer")
>>>> +    private static final String BUFFER_CLASS_NAME = "bufferClassName";
>>>> +
>>>> +    @Property(intValue = 4)
>>>> +    private static final String BUFFER_SIZE_KBYTES = "bufferSizeKBytes";
>>>> +
>>>> +    @Property(boolValue = true)
>>>> +    private static final String CHECKSUM_ENABLED = "checksumEnabled";
>>>> +
>>>> +    @Property(boolValue = true)
>>>> +    private static final String ADLER32_CHECKSUM = "adler32Checksum";
>>>> +
>>>> +    @Property(intValue = 50)
>>>> +    private static final String FLUSH_SLEEP_TIME_MILLISECONDS = "flushSleepTimeMilliseconds";
>>>> +
>>>> +    @Property(value = "txlog")
>>>> +    private static final String LOG_FILE_DIR = "logFileDir";
>>>> +
>>>> +    @Property(value = "log")
>>>> +    private static final String LOG_FILE_EXT = "logFileExt";
>>>> +
>>>> +    @Property(value = "howl")
>>>> +    private static final String LOG_FILE_NAME = "logFileName";
>>>> +
>>>> +    @Property(intValue = 512)
>>>> +    private static final String MAX_BLOCKS_PER_FILE = "maxBlocksPerFile";
>>>> +
>>>> +    @Property(intValue = 0)
>>>> +    private static final String MAX_BUFFERS = "maxBuffers";
>>>> +
>>>> +    @Property(intValue = 2)
>>>> +    private static final String MAX_LOG_FILES = "maxLogFiles";
>>>> +
>>>> +    @Property(intValue = 4)
>>>> +    private static final String MIN_BUFFERS = "minBuffers";
>>>> +
>>>> +    @Property(intValue = -1)
>>>> +    private static final String THREADS_WAITING_FORCE_THRESHOLD = "threadsWaitingForceThreshold";
>>>> +
>>>> +    @Property(intValue = 600)
>>>> +    private static final String DEFAULT_TRANSACTION_TIMEOUT_SECONDS = "defaultTransactionTimeoutSeconds";
>>>> +
>>>> +    private GeronimoTransactionManager delegate;
>>>> +
>>>> +    //osgi DS methods
>>>> +
>>>> +    @Activate
>>>> +    void activate(BundleContext bundleContext, Map properties) throws IOException, LogConfigurationException, XAException {
>>>> +        //XID factory
>>>> +        byte[] tmId = (byte[]) properties.get(TM_ID);
>>>> +        XidFactory xidFactory = new XidFactoryImpl(tmId);
>>>> +
>>>> +        //HOWL log
>>>> +        String bufferClassName = (String) properties.get(BUFFER_CLASS_NAME);
>>>> +        int bufferSize = (Integer) properties.get(BUFFER_SIZE_KBYTES);
>>>> +        boolean checksumEnabled = (Boolean) properties.get(CHECKSUM_ENABLED);
>>>> +        boolean adler32Checksum = (Boolean) properties.get(ADLER32_CHECKSUM);
>>>> +        int flushSleepTimeMilliseconds = (Integer) properties.get(FLUSH_SLEEP_TIME_MILLISECONDS);
>>>> +        String logFileDir = (String) properties.get(LOG_FILE_DIR);
>>>> +        String logFileExt = (String) properties.get(LOG_FILE_EXT);
>>>> +        String logFileName = (String) properties.get(LOG_FILE_NAME);
>>>> +        int maxBlocksPerFile = (Integer) properties.get(MAX_BLOCKS_PER_FILE);
>>>> +        int maxBuffers = (Integer) properties.get(MAX_BUFFERS);
>>>> +        int maxLogFiles = (Integer) properties.get(MAX_LOG_FILES);
>>>> +        int minBuffers = (Integer) properties.get(MIN_BUFFERS);
>>>> +        int threadsWaitingForceThreshold = (Integer) properties.get(THREADS_WAITING_FORCE_THRESHOLD);
>>>> +        File serverBaseDir = bundleContext.getDataFile("");
>>>> +        HOWLLog howlLog = new HOWLLog(bufferClassName,
>>>> +                bufferSize,
>>>> +                checksumEnabled,
>>>> +                adler32Checksum,
>>>> +                flushSleepTimeMilliseconds,
>>>> +                logFileDir,
>>>> +                logFileExt,
>>>> +                logFileName,
>>>> +                maxBlocksPerFile,
>>>> +                maxBuffers,
>>>> +                maxLogFiles,
>>>> +                minBuffers,
>>>> +                threadsWaitingForceThreshold,
>>>> +                xidFactory,
>>>> +                serverBaseDir);
>>>> +
>>>> +        //tm
>>>> +        int defaultTransactionTimeoutSeconds = (Integer)properties.get(DEFAULT_TRANSACTION_TIMEOUT_SECONDS);
>>>> +        delegate = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, howlLog);
>>>> +    }
>>>> +
>>>> +
>>>> +    public Transaction getTransaction() {
>>>> +        return delegate.getTransaction();
>>>> +    }
>>>> +
>>>> +    public void setTransactionTimeout(int seconds) throws SystemException {
>>>> +        delegate.setTransactionTimeout(seconds);
>>>> +    }
>>>> +
>>>> +    public int getStatus() throws SystemException {
>>>> +        return delegate.getStatus();
>>>> +    }
>>>> +
>>>> +    public void begin() throws NotSupportedException, SystemException {
>>>> +        delegate.begin();
>>>> +    }
>>>> +
>>>> +    public Transaction suspend() throws SystemException {
>>>> +        return delegate.suspend();
>>>> +    }
>>>> +
>>>> +    public void resume(Transaction tx) throws IllegalStateException, InvalidTransactionException, SystemException {
>>>> +        delegate.resume(tx);
>>>> +    }
>>>> +
>>>> +    public Object getResource(Object key) {
>>>> +        return delegate.getResource(key);
>>>> +    }
>>>> +
>>>> +    public boolean getRollbackOnly() {
>>>> +        return delegate.getRollbackOnly();
>>>> +    }
>>>> +
>>>> +    public Object getTransactionKey() {
>>>> +        return delegate.getTransactionKey();
>>>> +    }
>>>> +
>>>> +    public int getTransactionStatus() {
>>>> +        return delegate.getTransactionStatus();
>>>> +    }
>>>> +
>>>> +    public void putResource(Object key, Object value) {
>>>> +        delegate.putResource(key, value);
>>>> +    }
>>>> +
>>>> +    public void registerInterposedSynchronization(Synchronization synchronization) {
>>>> +        delegate.registerInterposedSynchronization(synchronization);
>>>> +    }
>>>> +
>>>> +    public void setRollbackOnly() throws IllegalStateException {
>>>> +        delegate.setRollbackOnly();
>>>> +    }
>>>> +
>>>> +    public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
>>>> +        delegate.commit();
>>>> +    }
>>>> +
>>>> +    public void rollback() throws IllegalStateException, SecurityException, SystemException {
>>>> +        delegate.rollback();
>>>> +    }
>>>> +
>>>> +    public Transaction importXid(Xid xid, long transactionTimeoutMilliseconds) throws XAException, SystemException {
>>>> +        return delegate.importXid(xid, transactionTimeoutMilliseconds);
>>>> +    }
>>>> +
>>>> +    public void commit(Transaction tx, boolean onePhase) throws XAException {
>>>> +        delegate.commit(tx, onePhase);
>>>> +    }
>>>> +
>>>> +    public void forget(Transaction tx) throws XAException {
>>>> +        delegate.forget(tx);
>>>> +    }
>>>> +
>>>> +    public int prepare(Transaction tx) throws XAException {
>>>> +        return delegate.prepare(tx);
>>>> +    }
>>>> +
>>>> +    public void rollback(Transaction tx) throws XAException {
>>>> +        delegate.rollback(tx);
>>>> +    }
>>>> +
>>>> +    public void recoveryError(Exception e) {
>>>> +        delegate.recoveryError(e);
>>>> +    }
>>>> +
>>>> +    public void registerNamedXAResourceFactory(NamedXAResourceFactory namedXAResourceFactory) {
>>>> +        delegate.registerNamedXAResourceFactory(namedXAResourceFactory);
>>>> +    }
>>>> +
>>>> +    public void unregisterNamedXAResourceFactory(String namedXAResourceFactoryName) {
>>>> +        delegate.unregisterNamedXAResourceFactory(namedXAResourceFactoryName);
>>>> +    }
>>>> +
>>>> +    public Map<Xid, TransactionImpl> getExternalXids() {
>>>> +        return delegate.getExternalXids();
>>>> +    }
>>>> +
>>>> +    public void addTransactionAssociationListener(TransactionManagerMonitor listener) {
>>>> +        delegate.addTransactionAssociationListener(listener);
>>>> +    }
>>>> +
>>>> +    public void removeTransactionAssociationListener(TransactionManagerMonitor listener) {
>>>> +        delegate.removeTransactionAssociationListener(listener);
>>>> +    }
>>>> +
>>>> +    public void commit(Xid xid, boolean onePhase) throws XAException {
>>>> +        delegate.commit(xid, onePhase);
>>>> +    }
>>>> +
>>>> +    public void forget(Xid xid) throws XAException {
>>>> +        delegate.forget(xid);
>>>> +    }
>>>> +
>>>> +    public int prepare(Xid xid) throws XAException {
>>>> +        return delegate.prepare(xid);
>>>> +    }
>>>> +
>>>> +    public Xid[] recover(int flag) throws XAException {
>>>> +        return delegate.recover(flag);
>>>> +    }
>>>> +
>>>> +    public void rollback(Xid xid) throws XAException {
>>>> +        delegate.rollback(xid);
>>>> +    }
>>>> +
>>>> +    public void begin(Xid xid, long txTimeoutMillis) throws XAException, InvalidTransactionException, SystemException, ImportedTransactionActiveException {
>>>> +        delegate.begin(xid, txTimeoutMillis);
>>>> +    }
>>>> +
>>>> +    public void end(Xid xid) throws XAException, SystemException {
>>>> +        delegate.end(xid);
>>>> +    }
>>>> +}
>>>> 
>>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>> ------------------------------------------------------------------------------
>>>>    svn:eol-style = native
>>>> 
>>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>> ------------------------------------------------------------------------------
>>>>    svn:keywords = Date Revision
>>>> 
>>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>>> ------------------------------------------------------------------------------
>>>>    svn:mime-type = text/plain
>>>> 
>>>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java?rev=1055251&r1=1055250&r2=1055251&view=diff
>>>> ==============================================================================
>>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java (original)
>>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java Wed Jan  5 00:28:20 2011
>>>> @@ -16,10 +16,10 @@
>>>>  */
>>>>  package org.apache.geronimo.transaction.manager;
>>>> 
>>>> -import java.util.Collection;
>>>>  import java.util.HashMap;
>>>>  import java.util.Iterator;
>>>>  import java.util.Map;
>>>> +
>>>>  import javax.resource.spi.XATerminator;
>>>>  import javax.transaction.InvalidTransactionException;
>>>>  import javax.transaction.Status;
>>>> 
>>>> Modified: geronimo/sandbox/djencks/txmanager/pom.xml
>>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>>>> ==============================================================================
>>>> --- geronimo/sandbox/djencks/txmanager/pom.xml (original)
>>>> +++ geronimo/sandbox/djencks/txmanager/pom.xml Wed Jan  5 00:28:20 2011
>>>> @@ -26,7 +26,7 @@
>>>>         <groupId>org.apache.geronimo.genesis</groupId>
>>>>         <artifactId>genesis-java5-flava</artifactId>
>>>>         <version>2.0</version>
>>>> -        <relativePath />
>>>> +        <relativePath/>
>>>>     </parent>
>>>> 
>>>>     <groupId>org.apache.geronimo.components</groupId>
>>>> @@ -89,7 +89,7 @@
>>>>                 <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
>>>>                 <version>1.0</version>
>>>>             </dependency>
>>>> -
>>>> +
>>>>             <dependency>
>>>>                 <groupId>org.apache.geronimo.specs</groupId>
>>>>                 <artifactId>geronimo-validation_1.0_spec</artifactId>
>>>> @@ -110,6 +110,16 @@
>>>>                 <scope>test</scope>
>>>>             </dependency>
>>>> 
>>>> +            <dependency>
>>>> +                <groupId>org.apache.felix</groupId>
>>>> +                <artifactId>org.apache.felix.scr.annotations</artifactId>
>>>> +                <version>1.4.0</version>
>>>> +            </dependency>
>>>> +            <dependency>
>>>> +                <groupId>org.osgi</groupId>
>>>> +                <artifactId>org.osgi.core</artifactId>
>>>> +                <version>4.2.0</version>
>>>> +            </dependency>
>>>>         </dependencies>
>>>>     </dependencyManagement>
>>>> 
>>>> @@ -129,6 +139,22 @@
>>>>                     </configuration>
>>>>                 </plugin>
>>>> 
>>>> +                <plugin>
>>>> +                    <groupId>org.apache.felix</groupId>
>>>> +                    <artifactId>maven-scr-plugin</artifactId>
>>>> +                    <version>1.6.0</version>
>>>> +                    <executions>
>>>> +                        <execution>
>>>> +                            <id>generate-scr-scrdescriptor</id>
>>>> +                            <goals>
>>>> +                                <goal>scr</goal>
>>>> +                            </goals>
>>>> +                        </execution>
>>>> +                    </executions>
>>>> +                    <configuration>
>>>> +                        <specVersion>1.1</specVersion>
>>>> +                    </configuration>
>>>> +                </plugin>
>>>>             </plugins>
>>>>         </pluginManagement>
>>>>     </build>
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Cheers,
>>> Guillaume Nodet
>>> ------------------------
>>> Blog: http://gnodet.blogspot.com/
>>> ------------------------
>>> Open Source SOA
>>> http://fusesource.com
>> 
>> 
> 
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com


Re: svn commit: r1055251 - in /geronimo/sandbox/djencks/txmanager: ./ geronimo-transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/

Posted by Guillaume Nodet <gn...@gmail.com>.
On Wed, Jan 5, 2011 at 02:00, David Jencks <da...@yahoo.com> wrote:
> 1. I wanted to learn about DS
> 2. I wanted to use config admin which I don't think is really ready in blueprint

The Aries Transaction manager does not use blueprint, just plain OSGi,
so no DS dependency even.
The current implementation uses a ManagedServiceFactory and is fully
configured using config admin.

> 3. I don't think the aries tm has a tx log nor exposes many of the interfaces we need.

It has the tx log configured and exposes the following interfaces:
        clazzes.add(TransactionManager.class.getName());
        clazzes.add(TransactionSynchronizationRegistry.class.getName());
        clazzes.add(UserTransaction.class.getName());
        clazzes.add(RecoverableTransactionManager.class.getName());
If any are missing, a simple additional line should work.

> 4. the tx manager is a geronimo project, we should be the ones making it osgi-friendly.

I don't have any problems moving OSGi related things back to Geronimo,
but this project started in ServiceMix even before Geronimo considered
OSGi at all.
The project moved to Aries and it may make sense to move it back to
Geronimo, but please don't duplicate the work if there's no real
reason.
The same thing already happened with the osgi enabled specs that have
been duplicated from ServiceMix to Geronimo instead of collaborating
on some enhancements (if you remember, those enhancements had first
been rejected the geronimo community when I tried to introduce those a
few years ago).

>
> david jencks
>
> On Jan 4, 2011, at 4:44 PM, Guillaume Nodet wrote:
>
>> Why not reusing the Aries one ?
>>
>> On Wed, Jan 5, 2011 at 01:28,  <dj...@apache.org> wrote:
>>> Author: djencks
>>> Date: Wed Jan  5 00:28:20 2011
>>> New Revision: 1055251
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1055251&view=rev
>>> Log:
>>> set up our tm as an osgi DS
>>>
>>> Added:
>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java   (with props)
>>> Modified:
>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>>    geronimo/sandbox/djencks/txmanager/pom.xml
>>>
>>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>>> ==============================================================================
>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml (original)
>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml Wed Jan  5 00:28:20 2011
>>> @@ -67,25 +67,64 @@
>>>         </dependency>
>>>
>>>         <dependency>
>>> +            <groupId>org.apache.felix</groupId>
>>> +            <artifactId>org.apache.felix.scr.annotations</artifactId>
>>> +        </dependency>
>>> +        <dependency>
>>> +            <groupId>org.osgi</groupId>
>>> +            <artifactId>org.osgi.core</artifactId>
>>> +        </dependency>
>>> +        <dependency>
>>>             <groupId>junit</groupId>
>>>             <artifactId>junit</artifactId>
>>>             <scope>test</scope>
>>>         </dependency>
>>> +        <!--<dependency>-->
>>> +            <!--<groupId>org.apache.karaf</groupId>-->
>>> +            <!--<artifactId>apache-karaf</artifactId>-->
>>> +            <!--<version>2.1.99-SNAPSHOT</version>-->
>>> +            <!--<type>pom</type>-->
>>> +            <!--<scope>provided</scope>-->
>>> +        <!--</dependency>-->
>>>     </dependencies>
>>>
>>>     <build>
>>>         <plugins>
>>>             <plugin>
>>>                 <groupId>org.apache.felix</groupId>
>>> +                <artifactId>maven-scr-plugin</artifactId>
>>> +            </plugin>
>>> +            <!--<plugin>-->
>>> +              <!--<groupId>org.apache.karaf.tooling</groupId>-->
>>> +              <!--<artifactId>features-maven-plugin</artifactId>-->
>>> +              <!--<version>2.1.99-SNAPSHOT</version>-->
>>> +                <!--<executions>-->
>>> +                  <!--<execution>-->
>>> +                    <!--<id>generate</id>-->
>>> +                    <!--<phase>generate-resources</phase>-->
>>> +                    <!--<goals>-->
>>> +                      <!--<goal>generate-features-xml</goal>-->
>>> +                    <!--</goals>-->
>>> +                    <!--<configuration>-->
>>> +                      <!--<!–<bundles>src/main/resources/bundles.properties</bundles>–>-->
>>> +                      <!--<!–<kernelVersion>2.1.99-SNAPSHOT</kernelVersion>–>-->
>>> +                      <!--<!–<outputFile>target/features.xml</outputFile>–>-->
>>> +                    <!--</configuration>-->
>>> +                  <!--</execution>-->
>>> +                <!--</executions>-->
>>> +              <!--</plugin>-->
>>> +            <plugin>
>>> +                <groupId>org.apache.felix</groupId>
>>>                 <artifactId>maven-bundle-plugin</artifactId>
>>>                 <configuration>
>>>                     <instructions>
>>>                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
>>>                         <Import-Package>
>>> -                            org.objectweb.howl*;resolution:=optional,
>>> -                            javax.resource.spi;version="1.5",
>>> +                            javax.resource.spi;version="[1.5,2.0)",
>>>                             *
>>>                         </Import-Package>
>>> +                        <Embed-Dependency>howl;inline=true</Embed-Dependency>
>>> +
>>>                     </instructions>
>>>                 </configuration>
>>>             </plugin>
>>>
>>> Added: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java?rev=1055251&view=auto
>>> ==============================================================================
>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java (added)
>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java Wed Jan  5 00:28:20 2011
>>> @@ -0,0 +1,290 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + *  http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> + */
>>> +
>>> +
>>> +package org.apache.geronimo.transaction;
>>> +
>>> +import java.io.File;
>>> +import java.io.IOException;
>>> +import java.util.Map;
>>> +
>>> +import javax.resource.spi.XATerminator;
>>> +import javax.transaction.HeuristicMixedException;
>>> +import javax.transaction.HeuristicRollbackException;
>>> +import javax.transaction.InvalidTransactionException;
>>> +import javax.transaction.NotSupportedException;
>>> +import javax.transaction.RollbackException;
>>> +import javax.transaction.Synchronization;
>>> +import javax.transaction.SystemException;
>>> +import javax.transaction.Transaction;
>>> +import javax.transaction.TransactionManager;
>>> +import javax.transaction.TransactionSynchronizationRegistry;
>>> +import javax.transaction.UserTransaction;
>>> +import javax.transaction.xa.XAException;
>>> +import javax.transaction.xa.Xid;
>>> +import org.apache.felix.scr.annotations.Activate;
>>> +import org.apache.felix.scr.annotations.Component;
>>> +import org.apache.felix.scr.annotations.Property;
>>> +import org.apache.felix.scr.annotations.Service;
>>> +import org.apache.geronimo.transaction.log.HOWLLog;
>>> +import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
>>> +import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
>>> +import org.apache.geronimo.transaction.manager.MonitorableTransactionManager;
>>> +import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
>>> +import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
>>> +import org.apache.geronimo.transaction.manager.TransactionImpl;
>>> +import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
>>> +import org.apache.geronimo.transaction.manager.XAWork;
>>> +import org.apache.geronimo.transaction.manager.XidFactory;
>>> +import org.apache.geronimo.transaction.manager.XidFactoryImpl;
>>> +import org.apache.geronimo.transaction.manager.XidImporter;
>>> +import org.objectweb.howl.log.LogConfigurationException;
>>> +import org.osgi.framework.BundleContext;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +@Component(metatype = true)
>>> +@Service
>>> +public class DSTransactionManager implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager, XATerminator, XAWork {
>>> +
>>> +    @Property(byteValue = {71,84,77,73,68})
>>> +    private static final String TM_ID = "tmId";
>>> +
>>> +    @Property(value = "org.objectweb.howl.log.BlockLogBuffer")
>>> +    private static final String BUFFER_CLASS_NAME = "bufferClassName";
>>> +
>>> +    @Property(intValue = 4)
>>> +    private static final String BUFFER_SIZE_KBYTES = "bufferSizeKBytes";
>>> +
>>> +    @Property(boolValue = true)
>>> +    private static final String CHECKSUM_ENABLED = "checksumEnabled";
>>> +
>>> +    @Property(boolValue = true)
>>> +    private static final String ADLER32_CHECKSUM = "adler32Checksum";
>>> +
>>> +    @Property(intValue = 50)
>>> +    private static final String FLUSH_SLEEP_TIME_MILLISECONDS = "flushSleepTimeMilliseconds";
>>> +
>>> +    @Property(value = "txlog")
>>> +    private static final String LOG_FILE_DIR = "logFileDir";
>>> +
>>> +    @Property(value = "log")
>>> +    private static final String LOG_FILE_EXT = "logFileExt";
>>> +
>>> +    @Property(value = "howl")
>>> +    private static final String LOG_FILE_NAME = "logFileName";
>>> +
>>> +    @Property(intValue = 512)
>>> +    private static final String MAX_BLOCKS_PER_FILE = "maxBlocksPerFile";
>>> +
>>> +    @Property(intValue = 0)
>>> +    private static final String MAX_BUFFERS = "maxBuffers";
>>> +
>>> +    @Property(intValue = 2)
>>> +    private static final String MAX_LOG_FILES = "maxLogFiles";
>>> +
>>> +    @Property(intValue = 4)
>>> +    private static final String MIN_BUFFERS = "minBuffers";
>>> +
>>> +    @Property(intValue = -1)
>>> +    private static final String THREADS_WAITING_FORCE_THRESHOLD = "threadsWaitingForceThreshold";
>>> +
>>> +    @Property(intValue = 600)
>>> +    private static final String DEFAULT_TRANSACTION_TIMEOUT_SECONDS = "defaultTransactionTimeoutSeconds";
>>> +
>>> +    private GeronimoTransactionManager delegate;
>>> +
>>> +    //osgi DS methods
>>> +
>>> +    @Activate
>>> +    void activate(BundleContext bundleContext, Map properties) throws IOException, LogConfigurationException, XAException {
>>> +        //XID factory
>>> +        byte[] tmId = (byte[]) properties.get(TM_ID);
>>> +        XidFactory xidFactory = new XidFactoryImpl(tmId);
>>> +
>>> +        //HOWL log
>>> +        String bufferClassName = (String) properties.get(BUFFER_CLASS_NAME);
>>> +        int bufferSize = (Integer) properties.get(BUFFER_SIZE_KBYTES);
>>> +        boolean checksumEnabled = (Boolean) properties.get(CHECKSUM_ENABLED);
>>> +        boolean adler32Checksum = (Boolean) properties.get(ADLER32_CHECKSUM);
>>> +        int flushSleepTimeMilliseconds = (Integer) properties.get(FLUSH_SLEEP_TIME_MILLISECONDS);
>>> +        String logFileDir = (String) properties.get(LOG_FILE_DIR);
>>> +        String logFileExt = (String) properties.get(LOG_FILE_EXT);
>>> +        String logFileName = (String) properties.get(LOG_FILE_NAME);
>>> +        int maxBlocksPerFile = (Integer) properties.get(MAX_BLOCKS_PER_FILE);
>>> +        int maxBuffers = (Integer) properties.get(MAX_BUFFERS);
>>> +        int maxLogFiles = (Integer) properties.get(MAX_LOG_FILES);
>>> +        int minBuffers = (Integer) properties.get(MIN_BUFFERS);
>>> +        int threadsWaitingForceThreshold = (Integer) properties.get(THREADS_WAITING_FORCE_THRESHOLD);
>>> +        File serverBaseDir = bundleContext.getDataFile("");
>>> +        HOWLLog howlLog = new HOWLLog(bufferClassName,
>>> +                bufferSize,
>>> +                checksumEnabled,
>>> +                adler32Checksum,
>>> +                flushSleepTimeMilliseconds,
>>> +                logFileDir,
>>> +                logFileExt,
>>> +                logFileName,
>>> +                maxBlocksPerFile,
>>> +                maxBuffers,
>>> +                maxLogFiles,
>>> +                minBuffers,
>>> +                threadsWaitingForceThreshold,
>>> +                xidFactory,
>>> +                serverBaseDir);
>>> +
>>> +        //tm
>>> +        int defaultTransactionTimeoutSeconds = (Integer)properties.get(DEFAULT_TRANSACTION_TIMEOUT_SECONDS);
>>> +        delegate = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, howlLog);
>>> +    }
>>> +
>>> +
>>> +    public Transaction getTransaction() {
>>> +        return delegate.getTransaction();
>>> +    }
>>> +
>>> +    public void setTransactionTimeout(int seconds) throws SystemException {
>>> +        delegate.setTransactionTimeout(seconds);
>>> +    }
>>> +
>>> +    public int getStatus() throws SystemException {
>>> +        return delegate.getStatus();
>>> +    }
>>> +
>>> +    public void begin() throws NotSupportedException, SystemException {
>>> +        delegate.begin();
>>> +    }
>>> +
>>> +    public Transaction suspend() throws SystemException {
>>> +        return delegate.suspend();
>>> +    }
>>> +
>>> +    public void resume(Transaction tx) throws IllegalStateException, InvalidTransactionException, SystemException {
>>> +        delegate.resume(tx);
>>> +    }
>>> +
>>> +    public Object getResource(Object key) {
>>> +        return delegate.getResource(key);
>>> +    }
>>> +
>>> +    public boolean getRollbackOnly() {
>>> +        return delegate.getRollbackOnly();
>>> +    }
>>> +
>>> +    public Object getTransactionKey() {
>>> +        return delegate.getTransactionKey();
>>> +    }
>>> +
>>> +    public int getTransactionStatus() {
>>> +        return delegate.getTransactionStatus();
>>> +    }
>>> +
>>> +    public void putResource(Object key, Object value) {
>>> +        delegate.putResource(key, value);
>>> +    }
>>> +
>>> +    public void registerInterposedSynchronization(Synchronization synchronization) {
>>> +        delegate.registerInterposedSynchronization(synchronization);
>>> +    }
>>> +
>>> +    public void setRollbackOnly() throws IllegalStateException {
>>> +        delegate.setRollbackOnly();
>>> +    }
>>> +
>>> +    public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
>>> +        delegate.commit();
>>> +    }
>>> +
>>> +    public void rollback() throws IllegalStateException, SecurityException, SystemException {
>>> +        delegate.rollback();
>>> +    }
>>> +
>>> +    public Transaction importXid(Xid xid, long transactionTimeoutMilliseconds) throws XAException, SystemException {
>>> +        return delegate.importXid(xid, transactionTimeoutMilliseconds);
>>> +    }
>>> +
>>> +    public void commit(Transaction tx, boolean onePhase) throws XAException {
>>> +        delegate.commit(tx, onePhase);
>>> +    }
>>> +
>>> +    public void forget(Transaction tx) throws XAException {
>>> +        delegate.forget(tx);
>>> +    }
>>> +
>>> +    public int prepare(Transaction tx) throws XAException {
>>> +        return delegate.prepare(tx);
>>> +    }
>>> +
>>> +    public void rollback(Transaction tx) throws XAException {
>>> +        delegate.rollback(tx);
>>> +    }
>>> +
>>> +    public void recoveryError(Exception e) {
>>> +        delegate.recoveryError(e);
>>> +    }
>>> +
>>> +    public void registerNamedXAResourceFactory(NamedXAResourceFactory namedXAResourceFactory) {
>>> +        delegate.registerNamedXAResourceFactory(namedXAResourceFactory);
>>> +    }
>>> +
>>> +    public void unregisterNamedXAResourceFactory(String namedXAResourceFactoryName) {
>>> +        delegate.unregisterNamedXAResourceFactory(namedXAResourceFactoryName);
>>> +    }
>>> +
>>> +    public Map<Xid, TransactionImpl> getExternalXids() {
>>> +        return delegate.getExternalXids();
>>> +    }
>>> +
>>> +    public void addTransactionAssociationListener(TransactionManagerMonitor listener) {
>>> +        delegate.addTransactionAssociationListener(listener);
>>> +    }
>>> +
>>> +    public void removeTransactionAssociationListener(TransactionManagerMonitor listener) {
>>> +        delegate.removeTransactionAssociationListener(listener);
>>> +    }
>>> +
>>> +    public void commit(Xid xid, boolean onePhase) throws XAException {
>>> +        delegate.commit(xid, onePhase);
>>> +    }
>>> +
>>> +    public void forget(Xid xid) throws XAException {
>>> +        delegate.forget(xid);
>>> +    }
>>> +
>>> +    public int prepare(Xid xid) throws XAException {
>>> +        return delegate.prepare(xid);
>>> +    }
>>> +
>>> +    public Xid[] recover(int flag) throws XAException {
>>> +        return delegate.recover(flag);
>>> +    }
>>> +
>>> +    public void rollback(Xid xid) throws XAException {
>>> +        delegate.rollback(xid);
>>> +    }
>>> +
>>> +    public void begin(Xid xid, long txTimeoutMillis) throws XAException, InvalidTransactionException, SystemException, ImportedTransactionActiveException {
>>> +        delegate.begin(xid, txTimeoutMillis);
>>> +    }
>>> +
>>> +    public void end(Xid xid) throws XAException, SystemException {
>>> +        delegate.end(xid);
>>> +    }
>>> +}
>>>
>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>>
>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = Date Revision
>>>
>>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>>> ------------------------------------------------------------------------------
>>>    svn:mime-type = text/plain
>>>
>>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java?rev=1055251&r1=1055250&r2=1055251&view=diff
>>> ==============================================================================
>>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java (original)
>>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java Wed Jan  5 00:28:20 2011
>>> @@ -16,10 +16,10 @@
>>>  */
>>>  package org.apache.geronimo.transaction.manager;
>>>
>>> -import java.util.Collection;
>>>  import java.util.HashMap;
>>>  import java.util.Iterator;
>>>  import java.util.Map;
>>> +
>>>  import javax.resource.spi.XATerminator;
>>>  import javax.transaction.InvalidTransactionException;
>>>  import javax.transaction.Status;
>>>
>>> Modified: geronimo/sandbox/djencks/txmanager/pom.xml
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>>> ==============================================================================
>>> --- geronimo/sandbox/djencks/txmanager/pom.xml (original)
>>> +++ geronimo/sandbox/djencks/txmanager/pom.xml Wed Jan  5 00:28:20 2011
>>> @@ -26,7 +26,7 @@
>>>         <groupId>org.apache.geronimo.genesis</groupId>
>>>         <artifactId>genesis-java5-flava</artifactId>
>>>         <version>2.0</version>
>>> -        <relativePath />
>>> +        <relativePath/>
>>>     </parent>
>>>
>>>     <groupId>org.apache.geronimo.components</groupId>
>>> @@ -89,7 +89,7 @@
>>>                 <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
>>>                 <version>1.0</version>
>>>             </dependency>
>>> -
>>> +
>>>             <dependency>
>>>                 <groupId>org.apache.geronimo.specs</groupId>
>>>                 <artifactId>geronimo-validation_1.0_spec</artifactId>
>>> @@ -110,6 +110,16 @@
>>>                 <scope>test</scope>
>>>             </dependency>
>>>
>>> +            <dependency>
>>> +                <groupId>org.apache.felix</groupId>
>>> +                <artifactId>org.apache.felix.scr.annotations</artifactId>
>>> +                <version>1.4.0</version>
>>> +            </dependency>
>>> +            <dependency>
>>> +                <groupId>org.osgi</groupId>
>>> +                <artifactId>org.osgi.core</artifactId>
>>> +                <version>4.2.0</version>
>>> +            </dependency>
>>>         </dependencies>
>>>     </dependencyManagement>
>>>
>>> @@ -129,6 +139,22 @@
>>>                     </configuration>
>>>                 </plugin>
>>>
>>> +                <plugin>
>>> +                    <groupId>org.apache.felix</groupId>
>>> +                    <artifactId>maven-scr-plugin</artifactId>
>>> +                    <version>1.6.0</version>
>>> +                    <executions>
>>> +                        <execution>
>>> +                            <id>generate-scr-scrdescriptor</id>
>>> +                            <goals>
>>> +                                <goal>scr</goal>
>>> +                            </goals>
>>> +                        </execution>
>>> +                    </executions>
>>> +                    <configuration>
>>> +                        <specVersion>1.1</specVersion>
>>> +                    </configuration>
>>> +                </plugin>
>>>             </plugins>
>>>         </pluginManagement>
>>>     </build>
>>>
>>>
>>>
>>
>>
>>
>> --
>> Cheers,
>> Guillaume Nodet
>> ------------------------
>> Blog: http://gnodet.blogspot.com/
>> ------------------------
>> Open Source SOA
>> http://fusesource.com
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Re: svn commit: r1055251 - in /geronimo/sandbox/djencks/txmanager: ./ geronimo-transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/

Posted by David Jencks <da...@yahoo.com>.
1. I wanted to learn about DS
2. I wanted to use config admin which I don't think is really ready in blueprint
3. I don't think the aries tm has a tx log nor exposes many of the interfaces we need.
4. the tx manager is a geronimo project, we should be the ones making it osgi-friendly.

david jencks

On Jan 4, 2011, at 4:44 PM, Guillaume Nodet wrote:

> Why not reusing the Aries one ?
> 
> On Wed, Jan 5, 2011 at 01:28,  <dj...@apache.org> wrote:
>> Author: djencks
>> Date: Wed Jan  5 00:28:20 2011
>> New Revision: 1055251
>> 
>> URL: http://svn.apache.org/viewvc?rev=1055251&view=rev
>> Log:
>> set up our tm as an osgi DS
>> 
>> Added:
>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java   (with props)
>> Modified:
>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>>    geronimo/sandbox/djencks/txmanager/pom.xml
>> 
>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>> ==============================================================================
>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml (original)
>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml Wed Jan  5 00:28:20 2011
>> @@ -67,25 +67,64 @@
>>         </dependency>
>> 
>>         <dependency>
>> +            <groupId>org.apache.felix</groupId>
>> +            <artifactId>org.apache.felix.scr.annotations</artifactId>
>> +        </dependency>
>> +        <dependency>
>> +            <groupId>org.osgi</groupId>
>> +            <artifactId>org.osgi.core</artifactId>
>> +        </dependency>
>> +        <dependency>
>>             <groupId>junit</groupId>
>>             <artifactId>junit</artifactId>
>>             <scope>test</scope>
>>         </dependency>
>> +        <!--<dependency>-->
>> +            <!--<groupId>org.apache.karaf</groupId>-->
>> +            <!--<artifactId>apache-karaf</artifactId>-->
>> +            <!--<version>2.1.99-SNAPSHOT</version>-->
>> +            <!--<type>pom</type>-->
>> +            <!--<scope>provided</scope>-->
>> +        <!--</dependency>-->
>>     </dependencies>
>> 
>>     <build>
>>         <plugins>
>>             <plugin>
>>                 <groupId>org.apache.felix</groupId>
>> +                <artifactId>maven-scr-plugin</artifactId>
>> +            </plugin>
>> +            <!--<plugin>-->
>> +              <!--<groupId>org.apache.karaf.tooling</groupId>-->
>> +              <!--<artifactId>features-maven-plugin</artifactId>-->
>> +              <!--<version>2.1.99-SNAPSHOT</version>-->
>> +                <!--<executions>-->
>> +                  <!--<execution>-->
>> +                    <!--<id>generate</id>-->
>> +                    <!--<phase>generate-resources</phase>-->
>> +                    <!--<goals>-->
>> +                      <!--<goal>generate-features-xml</goal>-->
>> +                    <!--</goals>-->
>> +                    <!--<configuration>-->
>> +                      <!--&lt;!&ndash;<bundles>src/main/resources/bundles.properties</bundles>&ndash;&gt;-->
>> +                      <!--&lt;!&ndash;<kernelVersion>2.1.99-SNAPSHOT</kernelVersion>&ndash;&gt;-->
>> +                      <!--&lt;!&ndash;<outputFile>target/features.xml</outputFile>&ndash;&gt;-->
>> +                    <!--</configuration>-->
>> +                  <!--</execution>-->
>> +                <!--</executions>-->
>> +              <!--</plugin>-->
>> +            <plugin>
>> +                <groupId>org.apache.felix</groupId>
>>                 <artifactId>maven-bundle-plugin</artifactId>
>>                 <configuration>
>>                     <instructions>
>>                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
>>                         <Import-Package>
>> -                            org.objectweb.howl*;resolution:=optional,
>> -                            javax.resource.spi;version="1.5",
>> +                            javax.resource.spi;version="[1.5,2.0)",
>>                             *
>>                         </Import-Package>
>> +                        <Embed-Dependency>howl;inline=true</Embed-Dependency>
>> +
>>                     </instructions>
>>                 </configuration>
>>             </plugin>
>> 
>> Added: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java?rev=1055251&view=auto
>> ==============================================================================
>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java (added)
>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java Wed Jan  5 00:28:20 2011
>> @@ -0,0 +1,290 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + *  http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +
>> +
>> +package org.apache.geronimo.transaction;
>> +
>> +import java.io.File;
>> +import java.io.IOException;
>> +import java.util.Map;
>> +
>> +import javax.resource.spi.XATerminator;
>> +import javax.transaction.HeuristicMixedException;
>> +import javax.transaction.HeuristicRollbackException;
>> +import javax.transaction.InvalidTransactionException;
>> +import javax.transaction.NotSupportedException;
>> +import javax.transaction.RollbackException;
>> +import javax.transaction.Synchronization;
>> +import javax.transaction.SystemException;
>> +import javax.transaction.Transaction;
>> +import javax.transaction.TransactionManager;
>> +import javax.transaction.TransactionSynchronizationRegistry;
>> +import javax.transaction.UserTransaction;
>> +import javax.transaction.xa.XAException;
>> +import javax.transaction.xa.Xid;
>> +import org.apache.felix.scr.annotations.Activate;
>> +import org.apache.felix.scr.annotations.Component;
>> +import org.apache.felix.scr.annotations.Property;
>> +import org.apache.felix.scr.annotations.Service;
>> +import org.apache.geronimo.transaction.log.HOWLLog;
>> +import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
>> +import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
>> +import org.apache.geronimo.transaction.manager.MonitorableTransactionManager;
>> +import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
>> +import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
>> +import org.apache.geronimo.transaction.manager.TransactionImpl;
>> +import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
>> +import org.apache.geronimo.transaction.manager.XAWork;
>> +import org.apache.geronimo.transaction.manager.XidFactory;
>> +import org.apache.geronimo.transaction.manager.XidFactoryImpl;
>> +import org.apache.geronimo.transaction.manager.XidImporter;
>> +import org.objectweb.howl.log.LogConfigurationException;
>> +import org.osgi.framework.BundleContext;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +@Component(metatype = true)
>> +@Service
>> +public class DSTransactionManager implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager, XATerminator, XAWork {
>> +
>> +    @Property(byteValue = {71,84,77,73,68})
>> +    private static final String TM_ID = "tmId";
>> +
>> +    @Property(value = "org.objectweb.howl.log.BlockLogBuffer")
>> +    private static final String BUFFER_CLASS_NAME = "bufferClassName";
>> +
>> +    @Property(intValue = 4)
>> +    private static final String BUFFER_SIZE_KBYTES = "bufferSizeKBytes";
>> +
>> +    @Property(boolValue = true)
>> +    private static final String CHECKSUM_ENABLED = "checksumEnabled";
>> +
>> +    @Property(boolValue = true)
>> +    private static final String ADLER32_CHECKSUM = "adler32Checksum";
>> +
>> +    @Property(intValue = 50)
>> +    private static final String FLUSH_SLEEP_TIME_MILLISECONDS = "flushSleepTimeMilliseconds";
>> +
>> +    @Property(value = "txlog")
>> +    private static final String LOG_FILE_DIR = "logFileDir";
>> +
>> +    @Property(value = "log")
>> +    private static final String LOG_FILE_EXT = "logFileExt";
>> +
>> +    @Property(value = "howl")
>> +    private static final String LOG_FILE_NAME = "logFileName";
>> +
>> +    @Property(intValue = 512)
>> +    private static final String MAX_BLOCKS_PER_FILE = "maxBlocksPerFile";
>> +
>> +    @Property(intValue = 0)
>> +    private static final String MAX_BUFFERS = "maxBuffers";
>> +
>> +    @Property(intValue = 2)
>> +    private static final String MAX_LOG_FILES = "maxLogFiles";
>> +
>> +    @Property(intValue = 4)
>> +    private static final String MIN_BUFFERS = "minBuffers";
>> +
>> +    @Property(intValue = -1)
>> +    private static final String THREADS_WAITING_FORCE_THRESHOLD = "threadsWaitingForceThreshold";
>> +
>> +    @Property(intValue = 600)
>> +    private static final String DEFAULT_TRANSACTION_TIMEOUT_SECONDS = "defaultTransactionTimeoutSeconds";
>> +
>> +    private GeronimoTransactionManager delegate;
>> +
>> +    //osgi DS methods
>> +
>> +    @Activate
>> +    void activate(BundleContext bundleContext, Map properties) throws IOException, LogConfigurationException, XAException {
>> +        //XID factory
>> +        byte[] tmId = (byte[]) properties.get(TM_ID);
>> +        XidFactory xidFactory = new XidFactoryImpl(tmId);
>> +
>> +        //HOWL log
>> +        String bufferClassName = (String) properties.get(BUFFER_CLASS_NAME);
>> +        int bufferSize = (Integer) properties.get(BUFFER_SIZE_KBYTES);
>> +        boolean checksumEnabled = (Boolean) properties.get(CHECKSUM_ENABLED);
>> +        boolean adler32Checksum = (Boolean) properties.get(ADLER32_CHECKSUM);
>> +        int flushSleepTimeMilliseconds = (Integer) properties.get(FLUSH_SLEEP_TIME_MILLISECONDS);
>> +        String logFileDir = (String) properties.get(LOG_FILE_DIR);
>> +        String logFileExt = (String) properties.get(LOG_FILE_EXT);
>> +        String logFileName = (String) properties.get(LOG_FILE_NAME);
>> +        int maxBlocksPerFile = (Integer) properties.get(MAX_BLOCKS_PER_FILE);
>> +        int maxBuffers = (Integer) properties.get(MAX_BUFFERS);
>> +        int maxLogFiles = (Integer) properties.get(MAX_LOG_FILES);
>> +        int minBuffers = (Integer) properties.get(MIN_BUFFERS);
>> +        int threadsWaitingForceThreshold = (Integer) properties.get(THREADS_WAITING_FORCE_THRESHOLD);
>> +        File serverBaseDir = bundleContext.getDataFile("");
>> +        HOWLLog howlLog = new HOWLLog(bufferClassName,
>> +                bufferSize,
>> +                checksumEnabled,
>> +                adler32Checksum,
>> +                flushSleepTimeMilliseconds,
>> +                logFileDir,
>> +                logFileExt,
>> +                logFileName,
>> +                maxBlocksPerFile,
>> +                maxBuffers,
>> +                maxLogFiles,
>> +                minBuffers,
>> +                threadsWaitingForceThreshold,
>> +                xidFactory,
>> +                serverBaseDir);
>> +
>> +        //tm
>> +        int defaultTransactionTimeoutSeconds = (Integer)properties.get(DEFAULT_TRANSACTION_TIMEOUT_SECONDS);
>> +        delegate = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, howlLog);
>> +    }
>> +
>> +
>> +    public Transaction getTransaction() {
>> +        return delegate.getTransaction();
>> +    }
>> +
>> +    public void setTransactionTimeout(int seconds) throws SystemException {
>> +        delegate.setTransactionTimeout(seconds);
>> +    }
>> +
>> +    public int getStatus() throws SystemException {
>> +        return delegate.getStatus();
>> +    }
>> +
>> +    public void begin() throws NotSupportedException, SystemException {
>> +        delegate.begin();
>> +    }
>> +
>> +    public Transaction suspend() throws SystemException {
>> +        return delegate.suspend();
>> +    }
>> +
>> +    public void resume(Transaction tx) throws IllegalStateException, InvalidTransactionException, SystemException {
>> +        delegate.resume(tx);
>> +    }
>> +
>> +    public Object getResource(Object key) {
>> +        return delegate.getResource(key);
>> +    }
>> +
>> +    public boolean getRollbackOnly() {
>> +        return delegate.getRollbackOnly();
>> +    }
>> +
>> +    public Object getTransactionKey() {
>> +        return delegate.getTransactionKey();
>> +    }
>> +
>> +    public int getTransactionStatus() {
>> +        return delegate.getTransactionStatus();
>> +    }
>> +
>> +    public void putResource(Object key, Object value) {
>> +        delegate.putResource(key, value);
>> +    }
>> +
>> +    public void registerInterposedSynchronization(Synchronization synchronization) {
>> +        delegate.registerInterposedSynchronization(synchronization);
>> +    }
>> +
>> +    public void setRollbackOnly() throws IllegalStateException {
>> +        delegate.setRollbackOnly();
>> +    }
>> +
>> +    public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
>> +        delegate.commit();
>> +    }
>> +
>> +    public void rollback() throws IllegalStateException, SecurityException, SystemException {
>> +        delegate.rollback();
>> +    }
>> +
>> +    public Transaction importXid(Xid xid, long transactionTimeoutMilliseconds) throws XAException, SystemException {
>> +        return delegate.importXid(xid, transactionTimeoutMilliseconds);
>> +    }
>> +
>> +    public void commit(Transaction tx, boolean onePhase) throws XAException {
>> +        delegate.commit(tx, onePhase);
>> +    }
>> +
>> +    public void forget(Transaction tx) throws XAException {
>> +        delegate.forget(tx);
>> +    }
>> +
>> +    public int prepare(Transaction tx) throws XAException {
>> +        return delegate.prepare(tx);
>> +    }
>> +
>> +    public void rollback(Transaction tx) throws XAException {
>> +        delegate.rollback(tx);
>> +    }
>> +
>> +    public void recoveryError(Exception e) {
>> +        delegate.recoveryError(e);
>> +    }
>> +
>> +    public void registerNamedXAResourceFactory(NamedXAResourceFactory namedXAResourceFactory) {
>> +        delegate.registerNamedXAResourceFactory(namedXAResourceFactory);
>> +    }
>> +
>> +    public void unregisterNamedXAResourceFactory(String namedXAResourceFactoryName) {
>> +        delegate.unregisterNamedXAResourceFactory(namedXAResourceFactoryName);
>> +    }
>> +
>> +    public Map<Xid, TransactionImpl> getExternalXids() {
>> +        return delegate.getExternalXids();
>> +    }
>> +
>> +    public void addTransactionAssociationListener(TransactionManagerMonitor listener) {
>> +        delegate.addTransactionAssociationListener(listener);
>> +    }
>> +
>> +    public void removeTransactionAssociationListener(TransactionManagerMonitor listener) {
>> +        delegate.removeTransactionAssociationListener(listener);
>> +    }
>> +
>> +    public void commit(Xid xid, boolean onePhase) throws XAException {
>> +        delegate.commit(xid, onePhase);
>> +    }
>> +
>> +    public void forget(Xid xid) throws XAException {
>> +        delegate.forget(xid);
>> +    }
>> +
>> +    public int prepare(Xid xid) throws XAException {
>> +        return delegate.prepare(xid);
>> +    }
>> +
>> +    public Xid[] recover(int flag) throws XAException {
>> +        return delegate.recover(flag);
>> +    }
>> +
>> +    public void rollback(Xid xid) throws XAException {
>> +        delegate.rollback(xid);
>> +    }
>> +
>> +    public void begin(Xid xid, long txTimeoutMillis) throws XAException, InvalidTransactionException, SystemException, ImportedTransactionActiveException {
>> +        delegate.begin(xid, txTimeoutMillis);
>> +    }
>> +
>> +    public void end(Xid xid) throws XAException, SystemException {
>> +        delegate.end(xid);
>> +    }
>> +}
>> 
>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>> 
>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>> ------------------------------------------------------------------------------
>>    svn:keywords = Date Revision
>> 
>> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
>> 
>> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java?rev=1055251&r1=1055250&r2=1055251&view=diff
>> ==============================================================================
>> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java (original)
>> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java Wed Jan  5 00:28:20 2011
>> @@ -16,10 +16,10 @@
>>  */
>>  package org.apache.geronimo.transaction.manager;
>> 
>> -import java.util.Collection;
>>  import java.util.HashMap;
>>  import java.util.Iterator;
>>  import java.util.Map;
>> +
>>  import javax.resource.spi.XATerminator;
>>  import javax.transaction.InvalidTransactionException;
>>  import javax.transaction.Status;
>> 
>> Modified: geronimo/sandbox/djencks/txmanager/pom.xml
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
>> ==============================================================================
>> --- geronimo/sandbox/djencks/txmanager/pom.xml (original)
>> +++ geronimo/sandbox/djencks/txmanager/pom.xml Wed Jan  5 00:28:20 2011
>> @@ -26,7 +26,7 @@
>>         <groupId>org.apache.geronimo.genesis</groupId>
>>         <artifactId>genesis-java5-flava</artifactId>
>>         <version>2.0</version>
>> -        <relativePath />
>> +        <relativePath/>
>>     </parent>
>> 
>>     <groupId>org.apache.geronimo.components</groupId>
>> @@ -89,7 +89,7 @@
>>                 <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
>>                 <version>1.0</version>
>>             </dependency>
>> -
>> +
>>             <dependency>
>>                 <groupId>org.apache.geronimo.specs</groupId>
>>                 <artifactId>geronimo-validation_1.0_spec</artifactId>
>> @@ -110,6 +110,16 @@
>>                 <scope>test</scope>
>>             </dependency>
>> 
>> +            <dependency>
>> +                <groupId>org.apache.felix</groupId>
>> +                <artifactId>org.apache.felix.scr.annotations</artifactId>
>> +                <version>1.4.0</version>
>> +            </dependency>
>> +            <dependency>
>> +                <groupId>org.osgi</groupId>
>> +                <artifactId>org.osgi.core</artifactId>
>> +                <version>4.2.0</version>
>> +            </dependency>
>>         </dependencies>
>>     </dependencyManagement>
>> 
>> @@ -129,6 +139,22 @@
>>                     </configuration>
>>                 </plugin>
>> 
>> +                <plugin>
>> +                    <groupId>org.apache.felix</groupId>
>> +                    <artifactId>maven-scr-plugin</artifactId>
>> +                    <version>1.6.0</version>
>> +                    <executions>
>> +                        <execution>
>> +                            <id>generate-scr-scrdescriptor</id>
>> +                            <goals>
>> +                                <goal>scr</goal>
>> +                            </goals>
>> +                        </execution>
>> +                    </executions>
>> +                    <configuration>
>> +                        <specVersion>1.1</specVersion>
>> +                    </configuration>
>> +                </plugin>
>>             </plugins>
>>         </pluginManagement>
>>     </build>
>> 
>> 
>> 
> 
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com


Re: svn commit: r1055251 - in /geronimo/sandbox/djencks/txmanager: ./ geronimo-transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/ geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/

Posted by Guillaume Nodet <gn...@gmail.com>.
Why not reusing the Aries one ?

On Wed, Jan 5, 2011 at 01:28,  <dj...@apache.org> wrote:
> Author: djencks
> Date: Wed Jan  5 00:28:20 2011
> New Revision: 1055251
>
> URL: http://svn.apache.org/viewvc?rev=1055251&view=rev
> Log:
> set up our tm as an osgi DS
>
> Added:
>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java   (with props)
> Modified:
>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
>    geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
>    geronimo/sandbox/djencks/txmanager/pom.xml
>
> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
> ==============================================================================
> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml (original)
> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/pom.xml Wed Jan  5 00:28:20 2011
> @@ -67,25 +67,64 @@
>         </dependency>
>
>         <dependency>
> +            <groupId>org.apache.felix</groupId>
> +            <artifactId>org.apache.felix.scr.annotations</artifactId>
> +        </dependency>
> +        <dependency>
> +            <groupId>org.osgi</groupId>
> +            <artifactId>org.osgi.core</artifactId>
> +        </dependency>
> +        <dependency>
>             <groupId>junit</groupId>
>             <artifactId>junit</artifactId>
>             <scope>test</scope>
>         </dependency>
> +        <!--<dependency>-->
> +            <!--<groupId>org.apache.karaf</groupId>-->
> +            <!--<artifactId>apache-karaf</artifactId>-->
> +            <!--<version>2.1.99-SNAPSHOT</version>-->
> +            <!--<type>pom</type>-->
> +            <!--<scope>provided</scope>-->
> +        <!--</dependency>-->
>     </dependencies>
>
>     <build>
>         <plugins>
>             <plugin>
>                 <groupId>org.apache.felix</groupId>
> +                <artifactId>maven-scr-plugin</artifactId>
> +            </plugin>
> +            <!--<plugin>-->
> +              <!--<groupId>org.apache.karaf.tooling</groupId>-->
> +              <!--<artifactId>features-maven-plugin</artifactId>-->
> +              <!--<version>2.1.99-SNAPSHOT</version>-->
> +                <!--<executions>-->
> +                  <!--<execution>-->
> +                    <!--<id>generate</id>-->
> +                    <!--<phase>generate-resources</phase>-->
> +                    <!--<goals>-->
> +                      <!--<goal>generate-features-xml</goal>-->
> +                    <!--</goals>-->
> +                    <!--<configuration>-->
> +                      <!--&lt;!&ndash;<bundles>src/main/resources/bundles.properties</bundles>&ndash;&gt;-->
> +                      <!--&lt;!&ndash;<kernelVersion>2.1.99-SNAPSHOT</kernelVersion>&ndash;&gt;-->
> +                      <!--&lt;!&ndash;<outputFile>target/features.xml</outputFile>&ndash;&gt;-->
> +                    <!--</configuration>-->
> +                  <!--</execution>-->
> +                <!--</executions>-->
> +              <!--</plugin>-->
> +            <plugin>
> +                <groupId>org.apache.felix</groupId>
>                 <artifactId>maven-bundle-plugin</artifactId>
>                 <configuration>
>                     <instructions>
>                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
>                         <Import-Package>
> -                            org.objectweb.howl*;resolution:=optional,
> -                            javax.resource.spi;version="1.5",
> +                            javax.resource.spi;version="[1.5,2.0)",
>                             *
>                         </Import-Package>
> +                        <Embed-Dependency>howl;inline=true</Embed-Dependency>
> +
>                     </instructions>
>                 </configuration>
>             </plugin>
>
> Added: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java?rev=1055251&view=auto
> ==============================================================================
> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java (added)
> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java Wed Jan  5 00:28:20 2011
> @@ -0,0 +1,290 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *  http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +
> +package org.apache.geronimo.transaction;
> +
> +import java.io.File;
> +import java.io.IOException;
> +import java.util.Map;
> +
> +import javax.resource.spi.XATerminator;
> +import javax.transaction.HeuristicMixedException;
> +import javax.transaction.HeuristicRollbackException;
> +import javax.transaction.InvalidTransactionException;
> +import javax.transaction.NotSupportedException;
> +import javax.transaction.RollbackException;
> +import javax.transaction.Synchronization;
> +import javax.transaction.SystemException;
> +import javax.transaction.Transaction;
> +import javax.transaction.TransactionManager;
> +import javax.transaction.TransactionSynchronizationRegistry;
> +import javax.transaction.UserTransaction;
> +import javax.transaction.xa.XAException;
> +import javax.transaction.xa.Xid;
> +import org.apache.felix.scr.annotations.Activate;
> +import org.apache.felix.scr.annotations.Component;
> +import org.apache.felix.scr.annotations.Property;
> +import org.apache.felix.scr.annotations.Service;
> +import org.apache.geronimo.transaction.log.HOWLLog;
> +import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
> +import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
> +import org.apache.geronimo.transaction.manager.MonitorableTransactionManager;
> +import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
> +import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
> +import org.apache.geronimo.transaction.manager.TransactionImpl;
> +import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
> +import org.apache.geronimo.transaction.manager.XAWork;
> +import org.apache.geronimo.transaction.manager.XidFactory;
> +import org.apache.geronimo.transaction.manager.XidFactoryImpl;
> +import org.apache.geronimo.transaction.manager.XidImporter;
> +import org.objectweb.howl.log.LogConfigurationException;
> +import org.osgi.framework.BundleContext;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +@Component(metatype = true)
> +@Service
> +public class DSTransactionManager implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager, XATerminator, XAWork {
> +
> +    @Property(byteValue = {71,84,77,73,68})
> +    private static final String TM_ID = "tmId";
> +
> +    @Property(value = "org.objectweb.howl.log.BlockLogBuffer")
> +    private static final String BUFFER_CLASS_NAME = "bufferClassName";
> +
> +    @Property(intValue = 4)
> +    private static final String BUFFER_SIZE_KBYTES = "bufferSizeKBytes";
> +
> +    @Property(boolValue = true)
> +    private static final String CHECKSUM_ENABLED = "checksumEnabled";
> +
> +    @Property(boolValue = true)
> +    private static final String ADLER32_CHECKSUM = "adler32Checksum";
> +
> +    @Property(intValue = 50)
> +    private static final String FLUSH_SLEEP_TIME_MILLISECONDS = "flushSleepTimeMilliseconds";
> +
> +    @Property(value = "txlog")
> +    private static final String LOG_FILE_DIR = "logFileDir";
> +
> +    @Property(value = "log")
> +    private static final String LOG_FILE_EXT = "logFileExt";
> +
> +    @Property(value = "howl")
> +    private static final String LOG_FILE_NAME = "logFileName";
> +
> +    @Property(intValue = 512)
> +    private static final String MAX_BLOCKS_PER_FILE = "maxBlocksPerFile";
> +
> +    @Property(intValue = 0)
> +    private static final String MAX_BUFFERS = "maxBuffers";
> +
> +    @Property(intValue = 2)
> +    private static final String MAX_LOG_FILES = "maxLogFiles";
> +
> +    @Property(intValue = 4)
> +    private static final String MIN_BUFFERS = "minBuffers";
> +
> +    @Property(intValue = -1)
> +    private static final String THREADS_WAITING_FORCE_THRESHOLD = "threadsWaitingForceThreshold";
> +
> +    @Property(intValue = 600)
> +    private static final String DEFAULT_TRANSACTION_TIMEOUT_SECONDS = "defaultTransactionTimeoutSeconds";
> +
> +    private GeronimoTransactionManager delegate;
> +
> +    //osgi DS methods
> +
> +    @Activate
> +    void activate(BundleContext bundleContext, Map properties) throws IOException, LogConfigurationException, XAException {
> +        //XID factory
> +        byte[] tmId = (byte[]) properties.get(TM_ID);
> +        XidFactory xidFactory = new XidFactoryImpl(tmId);
> +
> +        //HOWL log
> +        String bufferClassName = (String) properties.get(BUFFER_CLASS_NAME);
> +        int bufferSize = (Integer) properties.get(BUFFER_SIZE_KBYTES);
> +        boolean checksumEnabled = (Boolean) properties.get(CHECKSUM_ENABLED);
> +        boolean adler32Checksum = (Boolean) properties.get(ADLER32_CHECKSUM);
> +        int flushSleepTimeMilliseconds = (Integer) properties.get(FLUSH_SLEEP_TIME_MILLISECONDS);
> +        String logFileDir = (String) properties.get(LOG_FILE_DIR);
> +        String logFileExt = (String) properties.get(LOG_FILE_EXT);
> +        String logFileName = (String) properties.get(LOG_FILE_NAME);
> +        int maxBlocksPerFile = (Integer) properties.get(MAX_BLOCKS_PER_FILE);
> +        int maxBuffers = (Integer) properties.get(MAX_BUFFERS);
> +        int maxLogFiles = (Integer) properties.get(MAX_LOG_FILES);
> +        int minBuffers = (Integer) properties.get(MIN_BUFFERS);
> +        int threadsWaitingForceThreshold = (Integer) properties.get(THREADS_WAITING_FORCE_THRESHOLD);
> +        File serverBaseDir = bundleContext.getDataFile("");
> +        HOWLLog howlLog = new HOWLLog(bufferClassName,
> +                bufferSize,
> +                checksumEnabled,
> +                adler32Checksum,
> +                flushSleepTimeMilliseconds,
> +                logFileDir,
> +                logFileExt,
> +                logFileName,
> +                maxBlocksPerFile,
> +                maxBuffers,
> +                maxLogFiles,
> +                minBuffers,
> +                threadsWaitingForceThreshold,
> +                xidFactory,
> +                serverBaseDir);
> +
> +        //tm
> +        int defaultTransactionTimeoutSeconds = (Integer)properties.get(DEFAULT_TRANSACTION_TIMEOUT_SECONDS);
> +        delegate = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, howlLog);
> +    }
> +
> +
> +    public Transaction getTransaction() {
> +        return delegate.getTransaction();
> +    }
> +
> +    public void setTransactionTimeout(int seconds) throws SystemException {
> +        delegate.setTransactionTimeout(seconds);
> +    }
> +
> +    public int getStatus() throws SystemException {
> +        return delegate.getStatus();
> +    }
> +
> +    public void begin() throws NotSupportedException, SystemException {
> +        delegate.begin();
> +    }
> +
> +    public Transaction suspend() throws SystemException {
> +        return delegate.suspend();
> +    }
> +
> +    public void resume(Transaction tx) throws IllegalStateException, InvalidTransactionException, SystemException {
> +        delegate.resume(tx);
> +    }
> +
> +    public Object getResource(Object key) {
> +        return delegate.getResource(key);
> +    }
> +
> +    public boolean getRollbackOnly() {
> +        return delegate.getRollbackOnly();
> +    }
> +
> +    public Object getTransactionKey() {
> +        return delegate.getTransactionKey();
> +    }
> +
> +    public int getTransactionStatus() {
> +        return delegate.getTransactionStatus();
> +    }
> +
> +    public void putResource(Object key, Object value) {
> +        delegate.putResource(key, value);
> +    }
> +
> +    public void registerInterposedSynchronization(Synchronization synchronization) {
> +        delegate.registerInterposedSynchronization(synchronization);
> +    }
> +
> +    public void setRollbackOnly() throws IllegalStateException {
> +        delegate.setRollbackOnly();
> +    }
> +
> +    public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
> +        delegate.commit();
> +    }
> +
> +    public void rollback() throws IllegalStateException, SecurityException, SystemException {
> +        delegate.rollback();
> +    }
> +
> +    public Transaction importXid(Xid xid, long transactionTimeoutMilliseconds) throws XAException, SystemException {
> +        return delegate.importXid(xid, transactionTimeoutMilliseconds);
> +    }
> +
> +    public void commit(Transaction tx, boolean onePhase) throws XAException {
> +        delegate.commit(tx, onePhase);
> +    }
> +
> +    public void forget(Transaction tx) throws XAException {
> +        delegate.forget(tx);
> +    }
> +
> +    public int prepare(Transaction tx) throws XAException {
> +        return delegate.prepare(tx);
> +    }
> +
> +    public void rollback(Transaction tx) throws XAException {
> +        delegate.rollback(tx);
> +    }
> +
> +    public void recoveryError(Exception e) {
> +        delegate.recoveryError(e);
> +    }
> +
> +    public void registerNamedXAResourceFactory(NamedXAResourceFactory namedXAResourceFactory) {
> +        delegate.registerNamedXAResourceFactory(namedXAResourceFactory);
> +    }
> +
> +    public void unregisterNamedXAResourceFactory(String namedXAResourceFactoryName) {
> +        delegate.unregisterNamedXAResourceFactory(namedXAResourceFactoryName);
> +    }
> +
> +    public Map<Xid, TransactionImpl> getExternalXids() {
> +        return delegate.getExternalXids();
> +    }
> +
> +    public void addTransactionAssociationListener(TransactionManagerMonitor listener) {
> +        delegate.addTransactionAssociationListener(listener);
> +    }
> +
> +    public void removeTransactionAssociationListener(TransactionManagerMonitor listener) {
> +        delegate.removeTransactionAssociationListener(listener);
> +    }
> +
> +    public void commit(Xid xid, boolean onePhase) throws XAException {
> +        delegate.commit(xid, onePhase);
> +    }
> +
> +    public void forget(Xid xid) throws XAException {
> +        delegate.forget(xid);
> +    }
> +
> +    public int prepare(Xid xid) throws XAException {
> +        return delegate.prepare(xid);
> +    }
> +
> +    public Xid[] recover(int flag) throws XAException {
> +        return delegate.recover(flag);
> +    }
> +
> +    public void rollback(Xid xid) throws XAException {
> +        delegate.rollback(xid);
> +    }
> +
> +    public void begin(Xid xid, long txTimeoutMillis) throws XAException, InvalidTransactionException, SystemException, ImportedTransactionActiveException {
> +        delegate.begin(xid, txTimeoutMillis);
> +    }
> +
> +    public void end(Xid xid) throws XAException, SystemException {
> +        delegate.end(xid);
> +    }
> +}
>
> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
> ------------------------------------------------------------------------------
>    svn:keywords = Date Revision
>
> Propchange: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/DSTransactionManager.java
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Modified: geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java?rev=1055251&r1=1055250&r2=1055251&view=diff
> ==============================================================================
> --- geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java (original)
> +++ geronimo/sandbox/djencks/txmanager/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java Wed Jan  5 00:28:20 2011
> @@ -16,10 +16,10 @@
>  */
>  package org.apache.geronimo.transaction.manager;
>
> -import java.util.Collection;
>  import java.util.HashMap;
>  import java.util.Iterator;
>  import java.util.Map;
> +
>  import javax.resource.spi.XATerminator;
>  import javax.transaction.InvalidTransactionException;
>  import javax.transaction.Status;
>
> Modified: geronimo/sandbox/djencks/txmanager/pom.xml
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/pom.xml?rev=1055251&r1=1055250&r2=1055251&view=diff
> ==============================================================================
> --- geronimo/sandbox/djencks/txmanager/pom.xml (original)
> +++ geronimo/sandbox/djencks/txmanager/pom.xml Wed Jan  5 00:28:20 2011
> @@ -26,7 +26,7 @@
>         <groupId>org.apache.geronimo.genesis</groupId>
>         <artifactId>genesis-java5-flava</artifactId>
>         <version>2.0</version>
> -        <relativePath />
> +        <relativePath/>
>     </parent>
>
>     <groupId>org.apache.geronimo.components</groupId>
> @@ -89,7 +89,7 @@
>                 <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
>                 <version>1.0</version>
>             </dependency>
> -
> +
>             <dependency>
>                 <groupId>org.apache.geronimo.specs</groupId>
>                 <artifactId>geronimo-validation_1.0_spec</artifactId>
> @@ -110,6 +110,16 @@
>                 <scope>test</scope>
>             </dependency>
>
> +            <dependency>
> +                <groupId>org.apache.felix</groupId>
> +                <artifactId>org.apache.felix.scr.annotations</artifactId>
> +                <version>1.4.0</version>
> +            </dependency>
> +            <dependency>
> +                <groupId>org.osgi</groupId>
> +                <artifactId>org.osgi.core</artifactId>
> +                <version>4.2.0</version>
> +            </dependency>
>         </dependencies>
>     </dependencyManagement>
>
> @@ -129,6 +139,22 @@
>                     </configuration>
>                 </plugin>
>
> +                <plugin>
> +                    <groupId>org.apache.felix</groupId>
> +                    <artifactId>maven-scr-plugin</artifactId>
> +                    <version>1.6.0</version>
> +                    <executions>
> +                        <execution>
> +                            <id>generate-scr-scrdescriptor</id>
> +                            <goals>
> +                                <goal>scr</goal>
> +                            </goals>
> +                        </execution>
> +                    </executions>
> +                    <configuration>
> +                        <specVersion>1.1</specVersion>
> +                    </configuration>
> +                </plugin>
>             </plugins>
>         </pluginManagement>
>     </build>
>
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com