You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by dj...@apache.org on 2011/12/28 07:50:05 UTC

svn commit: r1225115 - in /karaf/trunk/management/server/src/main: java/org/apache/karaf/management/ resources/OSGI-INF/blueprint/ resources/OSGI-INF/metatype/

Author: djencks
Date: Wed Dec 28 06:50:05 2011
New Revision: 1225115

URL: http://svn.apache.org/viewvc?rev=1225115&view=rev
Log:
KARAF-1129 allow optionally configuring rmi Registry host

Modified:
    karaf/trunk/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java
    karaf/trunk/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml
    karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties
    karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml

Modified: karaf/trunk/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java
URL: http://svn.apache.org/viewvc/karaf/trunk/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java?rev=1225115&r1=1225114&r2=1225115&view=diff
==============================================================================
--- karaf/trunk/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java (original)
+++ karaf/trunk/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java Wed Dec 28 06:50:05 2011
@@ -18,15 +18,27 @@ package org.apache.karaf.management;
 
 import org.osgi.framework.BundleContext;
 
+import java.io.IOException;
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.UnknownHostException;
 import java.rmi.RemoteException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.RMISocketFactory;
 import java.rmi.server.UnicastRemoteObject;
 import java.util.Hashtable;
 
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+
 public class RmiRegistryFactory {
 
     private int port = Registry.REGISTRY_PORT;
+    private String host;
     private Registry registry;
     private boolean locate;
     private boolean create = true;
@@ -76,6 +88,14 @@ public class RmiRegistryFactory {
         this.port = port;
     }
 
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
     public Object getObject() throws Exception {
         return registry;
     }
@@ -84,10 +104,10 @@ public class RmiRegistryFactory {
         this.bundleContext = bundleContext;
     }
 
-    public void init() throws RemoteException {
+    public void init() throws RemoteException, UnknownHostException {
         if (registry == null && locate) {
             try {
-                Registry reg = LocateRegistry.getRegistry(getPort());
+                Registry reg = LocateRegistry.getRegistry(host, getPort());
                 reg.list();
                 registry = reg;
             } catch (RemoteException e) {
@@ -95,13 +115,22 @@ public class RmiRegistryFactory {
             }
         }
         if (registry == null && create) {
-            registry = LocateRegistry.createRegistry(getPort());
+            if (host != null && !host.isEmpty()) {
+                RMIClientSocketFactory socketFactory = RMISocketFactory.getDefaultSocketFactory();
+                InetAddress addr = InetAddress.getByName(host);
+                RMIServerSocketFactory serverSocketFactory = new KarafServerSocketFactory(addr, port);
+
+                registry = LocateRegistry.createRegistry(getPort(), socketFactory, serverSocketFactory);
+            } else {
+                registry = LocateRegistry.createRegistry(getPort());
+            }
             locallyCreated = true;
         }
         if (registry != null) {
             // register the registry as an OSGi service
             Hashtable<String, Object> props = new Hashtable<String, Object>();
             props.put("port", getPort());
+            props.put("host", getHost());
             bundleContext.registerService(Registry.class, registry, props);
         }
     }
@@ -114,4 +143,19 @@ public class RmiRegistryFactory {
         }
     }
 
+    private static class KarafServerSocketFactory implements RMIServerSocketFactory {
+        private final int port;
+        private final InetAddress addr;
+
+        private KarafServerSocketFactory(InetAddress addr, int port) {
+            this.addr = addr;
+            this.port = port;
+        }
+
+        @Override
+        public ServerSocket createServerSocket(int i) throws IOException {
+            return new ServerSocket(port, 0, addr);
+        }
+    }
+
 }

Modified: karaf/trunk/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml?rev=1225115&r1=1225114&r2=1225115&view=diff
==============================================================================
--- karaf/trunk/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml (original)
+++ karaf/trunk/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml Wed Dec 28 06:50:05 2011
@@ -32,6 +32,7 @@
     <!-- Property place holder -->
     <cm:property-placeholder persistent-id="org.apache.karaf.management" update-strategy="reload">
         <cm:default-properties>
+            <cm:property name="rmiRegistryHost" value=""/>
             <cm:property name="rmiRegistryPort" value="1099"/>
             <cm:property name="rmiServerPort" value="44444"/>
             <cm:property name="jmxRealm" value="karaf"/>
@@ -68,6 +69,7 @@
           destroy-method="destroy">
         <property name="create" value="true"/>
         <property name="locate" value="true"/>
+        <property name="host" value="${rmiRegistryHost}"/>
         <property name="port" value="${rmiRegistryPort}"/>
         <property name="bundleContext" ref="blueprintBundleContext"/>
     </bean>

Modified: karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties
URL: http://svn.apache.org/viewvc/karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1225115&r1=1225114&r2=1225115&view=diff
==============================================================================
--- karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties (original)
+++ karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties Wed Dec 28 06:50:05 2011
@@ -24,6 +24,9 @@
 management.name = Apache Karaf JMX Management
 management.description = Configuration of Apache Karaf JMX Management
 
+rmiRegistryHost.name = RMI Registry Host
+rmiRegistryHost.description = host of the registry for the exported RMI service. Blank for all interfaces
+
 rmiRegistryPort.name = RMI Registry Port
 rmiRegistryPort.description = port of the registry for the exported RMI service
 

Modified: karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml?rev=1225115&r1=1225114&r2=1225115&view=diff
==============================================================================
--- karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml (original)
+++ karaf/trunk/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml Wed Dec 28 06:50:05 2011
@@ -19,6 +19,8 @@
 -->
 <metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
     <OCD id="org.apache.karaf.management" name="%management.name" description="%management.description">
+        <AD id="rmiRegistryHost" type="String" default="" name="%rmiRegistryHost.name"
+            description="%rmiRegistryHost.description"/>
         <AD id="rmiRegistryPort" type="Integer" default="1099" name="%rmiRegistryPort.name"
             description="%rmiRegistryPort.description"/>
         <AD id="rmiServerPort" type="Integer" default="44444" name="%rmiServerPort.name"