1
2
3
4
5
6
7
8
9
10
11 package org.mule.module.jboss.transaction;
12
13 import org.mule.api.config.MuleConfiguration;
14 import org.mule.api.transaction.TransactionManagerFactory;
15
16 import com.arjuna.ats.arjuna.common.arjPropertyManager;
17
18 import java.net.InetAddress;
19 import java.net.UnknownHostException;
20 import java.text.MessageFormat;
21 import java.util.HashMap;
22 import java.util.Map;
23
24 import javax.transaction.TransactionManager;
25
26 public class JBossArjunaTransactionManagerFactory implements TransactionManagerFactory
27 {
28
29 public static final String PROPERTY_OBJECTSTORE_DIR = "com.arjuna.ats.arjuna.objectstore.objectStoreDir";
30 public static final String PROPERTY_NODE_IDENTIFIER = "com.arjuna.ats.arjuna.nodeIdentifier";
31
32 private Map<String, String> properties = new HashMap<String, String>();
33
34
35
36
37
38
39
40
41
42
43 private TransactionManager tm;
44
45 public JBossArjunaTransactionManagerFactory()
46 {
47
48
49 }
50
51 public synchronized TransactionManager create(MuleConfiguration config) throws Exception
52 {
53 if (tm == null)
54 {
55
56 if (!properties.containsKey(PROPERTY_OBJECTSTORE_DIR))
57 {
58 final String muleInternalDir = config.getWorkingDirectory();
59 arjPropertyManager.getObjectStoreEnvironmentBean().setObjectStoreDir(muleInternalDir + "/transaction-log");
60 }
61
62 if (!properties.containsKey(PROPERTY_NODE_IDENTIFIER))
63 {
64 try
65 {
66 InetAddress address = InetAddress.getLocalHost();
67 final String xaNodeId = MessageFormat.format("Mule[{0}/{1}]",
68 address.getHostName(), address.getHostAddress());
69 arjPropertyManager.getCoreEnvironmentBean().setNodeIdentifier(xaNodeId);
70 }
71 catch (UnknownHostException e)
72 {
73
74 }
75 }
76
77
78
79
80
81
82
83 tm = com.arjuna.ats.jta.TransactionManager.transactionManager();
84
85 }
86 return tm;
87 }
88
89 public Map<String, String> getProperties()
90 {
91 return properties;
92 }
93
94 public void setProperties(Map<String, String> properties)
95 {
96 this.properties = properties;
97 }
98 }