View Javadoc

1   package com.atlassian.plugin.main;
2   
3   import static com.atlassian.plugin.main.PackageScannerConfigurationBuilder.packageScannerConfiguration;
4   import static com.atlassian.plugin.main.PluginsConfigurationBuilder.pluginsConfiguration;
5   
6   import org.apache.log4j.Logger;
7   import org.apache.log4j.PropertyConfigurator;
8   import org.apache.commons.io.IOUtils;
9   
10  import java.io.File;
11  import java.io.IOException;
12  import java.io.InputStream;
13  import java.util.Collections;
14  import java.util.Properties;
15  
16  /**
17   * Simple standalone class for starting the plugin framework.  Creates a directory called "plugins" in the current
18   * directory and scans it every 5 seconds for new plugins.
19   * <p>
20   * For embedded use, use the {@link AtlassianPlugins} facade directly
21   */
22  public class Main
23  {
24  
25      public static void main(final String[] args)
26      {
27          initialiseLogger();
28          final File pluginDir = new File("plugins");
29          pluginDir.mkdir();
30          System.out.println("Created plugins directory " + pluginDir.getAbsolutePath());
31  
32          final PluginsConfiguration config = pluginsConfiguration().pluginDirectory(pluginDir).packageScannerConfiguration(
33              packageScannerConfiguration().packagesToInclude("org.apache.*", "com.atlassian.*", "org.dom4j*").packagesVersions(
34                  Collections.singletonMap("org.apache.log4j", "1.2.15")).build()).build();
35          final AtlassianPlugins plugins = new AtlassianPlugins(config);
36  
37          Runtime.getRuntime().addShutdownHook(new Thread()
38          {
39              @Override
40              public void run()
41              {
42                  System.out.println("Cleaning up...");
43                  plugins.stop();
44              }
45          });
46  
47          plugins.start();
48  
49          final Thread hotDeploy = new Thread("Hot Deploy")
50          {
51              @Override
52              public void run()
53              {
54                  while (true)
55                  {
56  
57                      plugins.getPluginController().scanForNewPlugins();
58                      try
59                      {
60                          Thread.sleep(5000);
61                      }
62                      catch (final InterruptedException e)
63                      {
64                          // ignore
65                          break;
66                      }
67                  }
68              }
69          };
70          hotDeploy.start();
71      }
72  
73      private static void initialiseLogger()
74      {
75          final Properties logProperties = new Properties();
76  
77          InputStream in = null;
78          try
79          {
80              in = Main.class.getResourceAsStream("/log4j-standalone.properties");
81              logProperties.load(in);
82              PropertyConfigurator.configure(logProperties);
83              Logger.getLogger(Main.class).info("Logging initialized.");
84          }
85          catch (final IOException e)
86          {
87              throw new RuntimeException("Unable to load logging");
88          }
89          finally
90          {
91              IOUtils.closeQuietly(in);
92          }
93      }
94  
95  }