1
2
3
4
5
6
7
8
9
10
11 package org.mule;
12
13 import org.mule.util.FileUtils;
14
15 import java.io.File;
16 import java.io.IOException;
17
18 import javax.management.MBeanServer;
19 import javax.management.MalformedObjectNameException;
20 import javax.management.ObjectName;
21 import javax.naming.InitialContext;
22 import javax.transaction.TransactionManager;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 public class ManagementContext
28 {
29
30 protected transient Log logger = LogFactory.getLog(getClass());
31
32 protected String jmxDomainName;
33 protected File workingDir;
34 protected TransactionManager transactionManager;
35 protected MBeanServer mBeanServer;
36 protected InitialContext namingContext;
37
38
39
40
41
42
43
44
45
46
47
48 public String getJmxDomainName()
49 {
50 return jmxDomainName;
51 }
52
53 public void setJmxDomainName(String jmxDomainName)
54 {
55 this.jmxDomainName = jmxDomainName;
56 }
57
58 public File getWorkingDir()
59 {
60 return workingDir;
61 }
62
63 public void setWorkingDir(File workingDir)
64 {
65 this.workingDir = workingDir;
66 }
67
68 public TransactionManager getTransactionManager()
69 {
70 return transactionManager;
71 }
72
73 public void setTransactionManager(TransactionManager transactionManager)
74 {
75 this.transactionManager = transactionManager;
76 }
77
78 public MBeanServer getMBeanServer()
79 {
80 return mBeanServer;
81 }
82
83 public void setMBeanServer(MBeanServer mBeanServer)
84 {
85 this.mBeanServer = mBeanServer;
86 }
87
88 public InitialContext getNamingContext()
89 {
90 return namingContext;
91 }
92
93 public void setNamingContext(InitialContext namingContext)
94 {
95 this.namingContext = namingContext;
96 }
97
98 public ObjectName createMBeanName(String componentName, String type, String name)
99 {
100 try
101 {
102 StringBuffer sb = new StringBuffer();
103 sb.append(getJmxDomainName()).append(':');
104 if (componentName != null)
105 {
106 sb.append("component=").append(validateString(componentName));
107 sb.append(',');
108 }
109 sb.append("type=").append(validateString(type));
110 if (name != null)
111 {
112 sb.append(',');
113 sb.append("name=").append(validateString(name));
114 }
115 return new ObjectName(sb.toString());
116 }
117 catch (MalformedObjectNameException e)
118 {
119 logger.error("Could not create component mbean name", e);
120 return null;
121 }
122 }
123
124 private String validateString(String str)
125 {
126 str = str.replace(':', '_');
127 str = str.replace('/', '_');
128 str = str.replace('\\', '_');
129 return str;
130 }
131
132 public static final String TEMP_DIR = "temp";
133 public static final String COMPONENTS_DIR = "components";
134 public static final String LIBRARIES_DIR = "libraries";
135 public static final String ASSEMBLIES_DIR = "assemblies";
136 public static final String INSTALL_DIR = "install";
137 public static final String DEPLOY_DIR = "deploy";
138 public static final String PROCESSED_DIR = "processed";
139 public static final String WORKSPACE_DIR = "workspace";
140
141 private int counter;
142
143 public synchronized File getNewTempDir(File rootDir)
144 {
145 while (true)
146 {
147 String s = Integer.toHexString(++counter);
148 while (s.length() < 8)
149 {
150 s = "0" + s;
151 }
152 File f = FileUtils.newFile(rootDir, File.separator + TEMP_DIR + File.separator + s);
153 if (!f.exists())
154 {
155 return f;
156 }
157 }
158 }
159
160 public File getComponentInstallDir(File rootDir, String name)
161 {
162 return FileUtils.newFile(rootDir, COMPONENTS_DIR + File.separator + validateString(name));
163 }
164
165 public File getComponentWorkspaceDir(File rootDir, String name)
166 {
167 return FileUtils.newFile(rootDir, WORKSPACE_DIR + File.separator + validateString(name));
168 }
169
170 public File getLibraryInstallDir(File rootDir, String name)
171 {
172 return FileUtils.newFile(rootDir, LIBRARIES_DIR + File.separator + validateString(name));
173 }
174
175 public File getAssemblyInstallDir(File rootDir, String name)
176 {
177 return FileUtils.newFile(rootDir, ASSEMBLIES_DIR + File.separator + validateString(name));
178 }
179
180 public static File getAutoInstallDir(File rootDir)
181 {
182 return FileUtils.newFile(rootDir, INSTALL_DIR);
183 }
184
185 public File getAutoInstallProcessedDir(File rootDir)
186 {
187 return FileUtils.newFile(rootDir, INSTALL_DIR + File.separator + PROCESSED_DIR);
188 }
189
190 public File getAutoDeployDir(File rootDir)
191 {
192 return FileUtils.newFile(rootDir, DEPLOY_DIR);
193 }
194
195 public File getAutoDeployProcessedDir(File rootDir)
196 {
197 return FileUtils.newFile(rootDir, DEPLOY_DIR + File.separator + PROCESSED_DIR);
198 }
199
200 public void deleteMarkedDirectories(File dir)
201 {
202 if (dir != null && dir.isDirectory())
203 {
204 if (FileUtils.newFile(dir, ".delete").isFile())
205 {
206 deleteDir(dir);
207 }
208 else
209 {
210 File[] children = dir.listFiles();
211 for (int i = 0; i < children.length; i++)
212 {
213 if (children[i].isDirectory())
214 {
215 deleteMarkedDirectories(children[i]);
216 }
217 }
218 }
219 }
220 }
221
222 public void deleteDir(String dir)
223 {
224 deleteDir(FileUtils.newFile(dir));
225 }
226
227 public void deleteDir(File dir)
228 {
229 FileUtils.deleteTree(dir);
230 if (dir.isDirectory())
231 {
232 try
233 {
234 FileUtils.newFile(dir, ".delete").createNewFile();
235 }
236 catch (IOException e)
237 {
238 logger.warn("Could not mark directory to be deleted", e);
239 }
240 }
241 }
242
243 public void createDirectories(File rootDir) throws IOException
244 {
245 FileUtils.createFile(rootDir.getAbsolutePath());
246 FileUtils.createFile(new File(rootDir, COMPONENTS_DIR).getAbsolutePath());
247 FileUtils.createFile(new File(rootDir, WORKSPACE_DIR).getAbsolutePath());
248 FileUtils.createFile(new File(rootDir, LIBRARIES_DIR).getAbsolutePath());
249 FileUtils.createFile(new File(rootDir, ASSEMBLIES_DIR).getAbsolutePath());
250 FileUtils.createFile(getAutoInstallDir(rootDir).getAbsolutePath());
251 FileUtils.createFile(getAutoDeployDir(rootDir).getAbsolutePath());
252 FileUtils.createFile(getAutoDeployProcessedDir(rootDir).getAbsolutePath());
253 }
254 }