David Haraburda wrote:
> Hi all,
> 
> I have written a patch to make Tomcat work with Tyrex 1.0.  Here's a
> summary of the new classes/code and how it all works.  I apologize for
> the length of this post, the explanation is necessary I feel...
> 
> New class org.apache.naming.factory.TyrexFactory:
> 
> Tyrex now has the idea of a TransactionDomain, which manages resources
> and transactions and is configured through an XML config file.  In order
> to instantiate a TransactionDomain instance, the class must know two
> things: the location of the domain config file, and the name of the
> domain to lookup in the file.  The way I've set it up, these two string
> configuration parameters must be present in the java:comp/env
> namespace.  The TyrexFactory is an abstract superclass that provides a
> method to lookup these configuration parameters and create the
> TransactionDomain.  The two subclasses of this abstract class are...
> 
> New/modified class: org.apache.naming.factory.TyrexTransactionFactory:
> 
> This factory simply uses the TransactionDomain to create a
> javax.transaction.UserTransaction.
> 
> New class org.apache.naming.factory.TyrexResourceFactory:
> (this replaces TyrexDataSourceFactory)
> 
> Tyrex now also has the idea of resources, of which now there are only
> two "flavors" right now:  JDBC DataSources and JCA connectors.  Since
> the configuration of these resources must be done in Tyrex's domain XML
> config file, this factory simply returns the resource with the specified
> name -- it is up to the user know what to do with the Object returned.
> 
> Here's an example of how Tyrex would be setup for a simple JDBC
> datasource.  Let's say you have a domain-config.xml file, with a domain
> named "my-domain", which has a resource named "my-db", which is a JDBC
> datasource (see Tyrex docs for more info).  In the server.xml file, we
> would need to specify two environment parameters:
> 
> <Environment name="tyrexDomainConfig" type="java.lang.String"
>              value="domain-config.xml"/>
> <Environment name="tyrexDomainName" type="java.lang.String"
>              value="my-domain"/>
> 
> and a resource:
> 
> <Resource name="my-datasource" auth="Container"
>           type="tyrex.resource.Resource"/>
> <ResourceParams name="my-datasource">
>   <parameter>
>     <name>name</name>
>     <value>my-db</value>
>   </parameter>
> </ResourceParams>
> 
> This would all need to go under a <Context> element (I made the two
> config strings global environment elements, and created ResourceLinks
> instead).
> 
> Now, the domain-config.xml file is placed where the classloader can use
> getResource() to find it (so, WEB-INF/classes is a good place), and
> everything should be ready to go.  You can now do:
> 
> InitialContext initCtx = new InitialContext();
> DataSource ds = (DataSource) 
>                  initCtx.lookup("java:comp/env/my-datasource");
> Connection conn = ds.getConnection();
> ... etc
> 
> in your user-level code.  Tyrex is still the default factory for
> UserTransaction, so lookups on java:comp/env/UserTransaction work.
> 
> There are a few caveats:
> 
> (1) This is kind of a pain, but it's the way Tyrex 1.0 works.  This way
> provides a lot of flexibility, without too much extra hassle.  If these
> changes are made, however, a HOWTO is probably needed.  I can put one
> together.
> (2) For this to work, Tomcat now needs to be able to load the Tyrex
> classes, and any classes it uses.  This means the tyrex jar and all
> other jars included in the Tyrex distribution need to go in common/lib
> (that includes JTA, OTS-JTS, and Xerces).  Furthermore, Tyrex needs some
> JARs that it doesn't include in its distribution: the Castor XML jar,
> and the Log4J jar.  This is six jars that need to be in common/lib for
> Tyrex to work.  This kind of stinks as well.
> 
> Obviously there are probably a few kinks that need to be worked out, but
> I've tested what is attached and it seems to work pretty well.
> 
> I've attached a cvs diff, as well as the two new files that are needed. 
> These two new classes both go in the org.apache.naming.factory package. 
> (remember TyrexDataSourceFactory needs to be removed)
> 
> Feedback/suggestions on my code is appreciated.  I'd like to see Tyrex
> 1.0 integrated with Tomcat fairly soon, so I'm prepared to make whatever
> changes I need to in order to get the patch committed.

For the transaction stuff to work properly, don't you need a valve also 
to bind/unbind the Tyrex context ?
Or is this only needed if you would want your transaction to last more 
than one request ?

I'm +1 for the patch. We'll need to add detailed instructions on how to 
use it. Also, the JARs won't ship with Tomcat (it's just too much).

Remy


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to