View Javadoc

1   /*
2    * $Id: ManagementContext.java 7963 2007-08-21 08:53:15Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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      // protected Registry registry;
39  
40      // public Registry getRegistry() {
41      // return registry;
42      // }
43  
44      // public void setRegistry(Registry registry) {
45      // this.registry = registry;
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 }