01: // THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
02: // CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
03: // BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
04: // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
05: // OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
06: // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
07: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
08: // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
09: // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
10: // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
11: // EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
12: // POSSIBILITY OF SUCH DAMAGE.
13: //
14: // Copyright 2000-2005 © Softaris Pty.Ltd. All Rights Reserved.
15: package com.metaboss.enterprise.transaction.impl;
16:
17: import java.util.Hashtable;
18:
19: import javax.naming.Context;
20: import javax.naming.InitialContext;
21: import javax.naming.Name;
22:
23: import com.metaboss.enterprise.spi.JTAImplementationProvider;
24:
25: /** Implementation of the TransactionManager Object Factory */
26: public class TransactionManagerFactory implements
27: javax.naming.spi.ObjectFactory {
28: private static Object cJTAImplementationProviderCreationSemaphore = new Object();
29: private static JTAImplementationProvider cJTAImplementationProvider = null;
30:
31: /* Obtain the instance of the user transaction interface */
32: public Object getObjectInstance(Object obj, Name name,
33: Context nameCtx, Hashtable environment) throws Exception {
34: initStaticMembersIfNecessary();
35: return cJTAImplementationProvider.getTransactionManager();
36: }
37:
38: // Helper. Ensures that static memebrs are properly initialised
39: private static void initStaticMembersIfNecessary()
40: throws javax.naming.NamingException {
41: if (cJTAImplementationProvider == null) {
42: synchronized (cJTAImplementationProviderCreationSemaphore) {
43: if (cJTAImplementationProvider == null) {
44: // Hook up to the JDBCConnectionProvider
45: Context ctx = new InitialContext();
46: cJTAImplementationProvider = (JTAImplementationProvider) ctx
47: .lookup(JTAImplementationProvider.COMPONENT_URL);
48: }
49: }
50: }
51: }
52: }
|