1
2
3
4
5
6
7
8
9
10
11 package org.mule.transaction.lookup;
12
13 import org.mule.api.config.MuleConfiguration;
14 import org.mule.api.lifecycle.Initialisable;
15 import org.mule.api.lifecycle.InitialisationException;
16 import org.mule.api.transaction.TransactionManagerFactory;
17 import org.mule.config.i18n.CoreMessages;
18 import org.mule.util.JndiContextHelper;
19 import org.mule.util.StringUtils;
20
21 import java.util.Map;
22
23 import javax.naming.Context;
24 import javax.naming.NamingException;
25 import javax.transaction.TransactionManager;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29
30
31
32
33
34
35
36
37
38 public class GenericTransactionManagerLookupFactory implements TransactionManagerFactory, Initialisable
39 {
40 protected final Log logger = LogFactory.getLog(getClass());
41
42 protected Context context;
43
44 private Map environment;
45
46 private TransactionManager txManager;
47
48 private String jndiName;
49
50 public String getJndiName()
51 {
52 return jndiName;
53 }
54
55 public void setJndiName(final String jndiName)
56 {
57 this.jndiName = jndiName;
58 }
59
60 public TransactionManager getTxManager()
61 {
62 return txManager;
63 }
64
65 public void setTxManager(final TransactionManager txManager)
66 {
67 this.txManager = txManager;
68 }
69
70 public Map getEnvironment()
71 {
72 return environment;
73 }
74
75 public void setEnvironment(final Map environment)
76 {
77 this.environment = environment;
78 }
79
80 public Context getContext()
81 {
82 return context;
83 }
84
85 public void setContext(final Context context)
86 {
87 this.context = context;
88 }
89
90
91
92 public TransactionManager create(MuleConfiguration config) throws Exception
93 {
94
95 initialise();
96 if (txManager == null)
97 {
98 txManager = (TransactionManager) context.lookup(jndiName);
99 }
100
101 return txManager;
102 }
103
104
105
106
107
108
109
110
111
112
113
114
115
116 public void initialise() throws InitialisationException
117 {
118 if (txManager == null && StringUtils.isEmpty(StringUtils.trim(jndiName)))
119 {
120 throw new InitialisationException(CoreMessages.propertiesNotSet("jndiName"), this);
121 }
122
123 try
124 {
125 if (context == null)
126 {
127 context = JndiContextHelper.initialise(getEnvironment());
128 }
129 }
130 catch (NamingException e)
131 {
132 throw new InitialisationException(CoreMessages.failedToCreate("Jndi context"),
133 e, this);
134 }
135 }
136 }