View Javadoc

1   package org.codehaus.xfire.plexus;
2   
3   import java.io.File;
4   import java.net.MalformedURLException;
5   import java.net.URL;
6   import java.util.Properties;
7   
8   import org.codehaus.plexus.embed.Embedder;
9   import org.codehaus.xfire.XFire;
10  import org.codehaus.xfire.XFireFactory;
11  
12  /***
13   * <p>
14   * The StandaloneXFire class allows you to embed a Plexus managed version
15   * of XFire within your application. Use the XFireFactory to access it.
16   * </p>
17   * <p>
18   * If you are not using the StandaloneXFireServlet or PlexusXFireServlet,
19   * you must register this factory:
20   * </p>
21   * <pre>
22   * XFireFactory.register(PlexusXFireFactory.class, true);
23   * </pre>
24   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
25   */
26  public class PlexusXFireFactory
27  	extends XFireFactory
28  {
29      private static PlexusXFireFactory standalone;
30  
31      protected Embedder embed;
32  
33      protected PlexusXFireFactory() 
34          throws Exception
35      {
36          URL resource = getPlexusConfiguration();
37          
38          embed = new Embedder();
39  
40          embed.setConfiguration( resource );
41  
42          Properties contextProperties = new Properties();
43  
44          embed.setProperties(contextProperties);
45          
46          embed.start();
47      }
48  
49      public static XFireFactory createInstance() 
50      	throws Exception
51      {
52          if ( standalone == null )
53          {
54              synchronized( PlexusXFireFactory.class )
55              {
56                  standalone = new PlexusXFireFactory();
57              }
58          }
59          
60          return standalone;
61      }
62  
63      /***
64  	 * @return
65  	 */
66  	private URL getPlexusConfiguration()
67  	{
68  		URL resource = null;
69          
70          String configFileName = System.getProperty("xfire.plexusConfig");
71          
72          if ( configFileName != null ) 
73          {
74              File file = new File(configFileName);
75              if ( file.exists() )
76              {
77                  try
78      			{
79      				resource = file.toURL();
80      			}
81      			catch (MalformedURLException e)
82      			{
83                      throw new RuntimeException("Couldn't get plexus configuration.", e);
84      			}
85              }
86              else
87              {
88                  resource = getClass().getResource(configFileName);
89              }
90          }
91  
92          if ( resource == null )
93          {
94              resource = getClass().getResource("/org/codehaus/xfire/plexus/StandaloneXFire.xml");
95          }
96          
97  		return resource;
98  	}
99  
100     public XFire getXFire() throws Exception
101     {
102         return (XFire) embed.lookup( XFire.ROLE );
103     }
104 
105 	protected void finalize() throws Throwable
106 	{
107 		embed.stop();
108         
109         super.finalize();
110 	}
111 }