View Javadoc

    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;
    11  import java.io.FileInputStream;
    12  import java.lang.reflect.Method;
    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 properties = new Properties();
    72              properties.load(new FileInputStream(java.lang.System.getProperty("aspectwerkz.resource.bundle")));
    73              String className = properties.getProperty("remote.server.invoker.classname");
    74              invoker = (Invoker) ContextClassLoader.forName(className).newInstance();
    75          } catch (Exception 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 invoke(final String handle,
    89                                   final String methodName,
    90                                   final Class[] paramTypes,
    91                                   final Object[] args,
    92                                   final Object context) {
    93                  Object result;
    94                  try {
    95                      final Object instance = RemoteProxy.getWrappedInstance(handle);
    96                      final Method method = instance.getClass().getMethod(methodName, paramTypes);
    97                      result = method.invoke(instance, args);
    98                  } catch (Exception 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 }