KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > aspectwerkz > connectivity > RemoteProxyServerManager


1 /**************************************************************************************
2  * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. *
3  * http://aspectwerkz.codehaus.org *
4  * ---------------------------------------------------------------------------------- *
5  * The software in this package is published under the terms of the LGPL license *
6  * a copy of which has been included with this distribution in the license.txt file. *
7  **************************************************************************************/

8 package org.codehaus.aspectwerkz.connectivity;
9
10 import java.util.Properties JavaDoc;
11 import java.io.FileInputStream JavaDoc;
12 import java.lang.reflect.Method JavaDoc;
13
14 import org.codehaus.aspectwerkz.exception.WrappedRuntimeException;
15 import org.codehaus.aspectwerkz.util.ContextClassLoader;
16
17 /**
18  * Manages the remote proxy server.
19  *
20  * @author <a HREF="mailto:jboner@codehaus.org">Jonas Bonér </a>
21  */

22 public class RemoteProxyServerManager {
23
24     /**
25      * The path to the remote proxy server config file.
26      */

27     private static final boolean START_REMOTE_PROXY_SERVER = "true".equals(
28             java.lang.System.getProperty(
29                     "aspectwerkz.remote.server.run",
30                     "false"
31             )
32     );
33
34     /**
35      * The sole instance.
36      */

37     private static final RemoteProxyServerManager INSTANCE = new RemoteProxyServerManager();
38
39     /**
40      * The remote proxy server instance.
41      */

42     private RemoteProxyServer m_remoteProxyServer = null;
43
44     /**
45      * Returns the sole instance.
46      *
47      * @return the sole instance
48      */

49     public static RemoteProxyServerManager getInstance() {
50         return INSTANCE;
51     }
52
53     /**
54      * Starts up the remote proxy server.
55      */

56     public void start() {
57         if (START_REMOTE_PROXY_SERVER) {
58             m_remoteProxyServer = new RemoteProxyServer(ContextClassLoader.getLoader(), getInvoker());
59             m_remoteProxyServer.start();
60         }
61     }
62
63     /**
64      * Returns the Invoker instance to use.
65      *
66      * @return the Invoker
67      */

68     private Invoker getInvoker() {
69         Invoker invoker;
70         try {
71             Properties JavaDoc properties = new Properties JavaDoc();
72             properties.load(new FileInputStream JavaDoc(java.lang.System.getProperty("aspectwerkz.resource.bundle")));
73             String JavaDoc className = properties.getProperty("remote.server.invoker.classname");
74             invoker = (Invoker) ContextClassLoader.forName(className).newInstance();
75         } catch (Exception JavaDoc e) {
76             invoker = getDefaultInvoker();
77         }
78         return invoker;
79     }
80
81     /**
82      * Returns the default Invoker.
83      *
84      * @return the default invoker
85      */

86     private Invoker getDefaultInvoker() {
87         return new Invoker() {
88             public Object JavaDoc invoke(final String JavaDoc handle,
89                                  final String JavaDoc methodName,
90                                  final Class JavaDoc[] paramTypes,
91                                  final Object JavaDoc[] args,
92                                  final Object JavaDoc context) {
93                 Object JavaDoc result;
94                 try {
95                     final Object JavaDoc instance = RemoteProxy.getWrappedInstance(handle);
96                     final Method JavaDoc method = instance.getClass().getMethod(methodName, paramTypes);
97                     result = method.invoke(instance, args);
98                 } catch (Exception JavaDoc e) {
99                     throw new WrappedRuntimeException(e);
100                 }
101                 return result;
102             }
103         };
104     }
105
106     /**
107      * Private constructor.
108      */

109     private RemoteProxyServerManager() {
110
111     }
112 }
113
Popular Tags