felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From santil...@apache.org
Subject svn commit: r450615 - in /incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood: Activator.java CompendiumController.java CompendiumHandler.java RMIHandler.java SecurityManagerHandler.java
Date Wed, 27 Sep 2006 22:47:23 GMT
Author: santillan
Date: Wed Sep 27 15:47:22 2006
New Revision: 450615

URL: http://svn.apache.org/viewvc?view=rev&rev=450615
Log:
Some refactoring and cleaning up

Added:
    incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumHandler.java
      - copied, changed from r438975, incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumController.java
    incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/RMIHandler.java
    incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/SecurityManagerHandler.java
Removed:
    incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumController.java
Modified:
    incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/Activator.java

Modified: incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/Activator.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/Activator.java?view=diff&rev=450615&r1=450614&r2=450615
==============================================================================
--- incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/Activator.java
(original)
+++ incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/Activator.java
Wed Sep 27 15:47:22 2006
@@ -17,32 +17,13 @@
 
 package org.apache.felix.jmood;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.lang.reflect.Method;
-import java.net.InetAddress;
 import java.net.URL;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import java.rmi.server.ExportException;
-import java.rmi.server.UnicastRemoteObject;
 import java.util.Properties;
 
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
 import javax.management.MBeanServerFactory;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXConnectorServerFactory;
-import javax.management.remote.JMXServiceURL;
-
 
 import org.apache.felix.jmood.core.CoreController;
 import org.apache.felix.jmood.core.Framework;
@@ -52,15 +33,12 @@
 public class Activator implements BundleActivator{
     private Properties props;
     private String agentPropsPath="/agent.properties";
-    private static final String IS_POLICY_EMBEDDED="policy.embedded";
-    private static final String JAVA_SECURITY_POLICY="java.security.policy";
+    private static final String RMI_PORT="rmi.registry.port";
     private MBeanServer server;
-    private JMXConnectorServer connectorServer;
-    private int rmiRegistryPort = 1199;
     private AgentContext ac;
-    private static final String connectoServerOname="RemotingService:type=ConnectorServer,
subtype=RMIConnectorServer, provider=JRE";
-    private CompendiumController compendium;
-    private Registry rmiRegistry;
+    private CompendiumHandler compendiumHandler;
+    private RMIHandler rmiHandler;
+    private SecurityManagerHandler securityHandler;
     
 
     public void start(BundleContext context) throws Exception {
@@ -74,76 +52,30 @@
         	throw e;
         }
         this.ac.debug("got platform mbeanserver");
-        this.compendium = new CompendiumController(this.server,this.ac);
+        this.compendiumHandler = new CompendiumHandler(this.server,this.ac);
         this.props = this.loadProperties();
         this.ac.debug("props loaded");
         //TODO Enable this when Felix has security support.RMI Serialization doesn't work
well without it. In Equinox, it works fine
-        //this.setSecurityManager();
+		//String policyName=this.props.getProperty(SecurityManagerHandler.JAVA_SECURITY_POLICY);
+        //boolean policyEmbedded=this.props.getProperty(SecurityManagerHandler.IS_POLICY_EMBEDDED).equalsIgnoreCase("true");
+        //securityHandler=new SecurityManagerHandler(ac, policyEmbedded, policyName);
+        //securityHandler.setSecurityManager();
         //ac.debug("security manager set");
          this.ac.debug("registering mbeans");
-            this.registerMBeans();
-            this.initRMIConn();
-            this.ac.debug("rmi connection initialised and mbeans registered");
-            this.ac.debug("agent started");
+         this.registerMBeans();
+         int port=Integer.parseInt(props.getProperty(RMI_PORT));
+         rmiHandler=new RMIHandler(port, ac, server);
+         rmiHandler.start();
+         this.ac.debug("rmi connection initialised and mbeans registered");
+         this.ac.debug("agent started");
     }
     public void stop(BundleContext context) throws Exception {
         this.ac.debug("stopping");
-        this.stopRMIConn();
+        rmiHandler.stop();
         this.ac.closeTrackers();
         this.unregisterMBeans();
         this.ac.debug("done");
     }
-    private void setSecurityManager() throws Exception{
-        //TODO check this when we add permission admin support to the bundle
-        //It caused StackOverFlow the second time the framework was run(?)
-    	
-        if (System.getSecurityManager() != null) {
-			return;
-		}
-		try {
-			this.ac.debug("Security manager does not exist");
-            if (this.props.getProperty(IS_POLICY_EMBEDDED).equalsIgnoreCase("true")){
-                this.ac.debug("Policy is embedded, copying it to filesystem...");
-                String policyName=this.props.getProperty(JAVA_SECURITY_POLICY);
-                //The policy is in the file system and should be copied...
-                File file=this.ac.getBundleContext().getDataFile(policyName);
-                if (file.exists()) {
-                    this.ac.debug("trying to delete file...");
-                    boolean deleted=file.delete();
-                    if(!deleted) {
-						this.ac.error("Could not delete existing policy file");
-					} else {
-						this.ac.debug("successfully deleted");
-					}
-                    file=this.ac.getBundleContext().getDataFile(policyName);
-                    file.createNewFile();
-                    this.ac.debug("new file created");
-                }
-
-                FileOutputStream o=new FileOutputStream (file);
-                InputStream i=this.ac.getBundleContext().getBundle().getResource("/"+policyName).openStream();
-                byte [] buffer=new byte [1024];
-                while (i.read(buffer)!=-1){
-                   o.write(buffer);
-                }
-                i.close();
-                o.flush();
-                o.close();
-                
-                System.setProperty(JAVA_SECURITY_POLICY, file.getAbsolutePath());
-            }
-            else{
-         System.setProperty(JAVA_SECURITY_POLICY, this.props.getProperty(JAVA_SECURITY_POLICY));
-            }
-         System.setSecurityManager(new SecurityManager());
-
-        }catch(Exception e){
-            this.ac.error("Unexpected exception", e);
-            }
-        this.ac.debug("Security policy: "+System.getProperty(JAVA_SECURITY_POLICY));
-        this.ac.debug("Security manager toString(): "+System.getSecurityManager().toString());
-
-        }
         
     private Properties loadProperties() throws Exception{
         Properties props = new Properties();
@@ -152,64 +84,10 @@
         return props;
     }
 
-    /**
-     * A getter method for retrieving the context of this bundle
-     * @return BundleContext the bundle context for this bundle
-     * @throws InstanceNotFoundException 
-     */
-
-    private void initRMIConn() throws IOException, InstanceAlreadyExistsException, MBeanRegistrationException,
NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceNotFoundException
{
-    	Thread t=new Thread(){
-    		public void run() {
-    	        try {
-    	        	rmiRegistry=LocateRegistry.createRegistry(rmiRegistryPort);
-    	            } catch (RemoteException e) {
-    	                ac.warning(e.getMessage()+"\n"+"Possibly some other framework already
running, skipping RMI registry creation");
-    	              return;
-    	           }
-    		}
-    	};
-    	t.setName("RMIREGISTRY");
-    	t.setContextClassLoader(this.getClass().getClassLoader());
-    	t.start();
-        InetAddress[] addresses=InetAddress.getAllByName(InetAddress.getLocalHost().getCanonicalHostName());
-        //Do not attach the agent to the loopback address
-        InetAddress address=null;
-        for (int i = 0; i < addresses.length; i++) {
-            if (!addresses[i].isLoopbackAddress()) {                    
-                address=addresses[i];
-                break;
-            }
-        }
-        if (address==null){
-        	StringBuffer msg=new StringBuffer("java.net.InetAddress could not find non-localhost
IP. \n");
-        		msg.append(" Is there any network interface available? Are you using Linux?. \n")
-        		   .append("If you are using debian-based distros, try editing the /etc/hosts file
so that it does not contain")
-        		   .append(" something like '127.0.0.1 ${hostname}'");
-        	this.ac.warning(msg.toString());
-        	address=InetAddress.getLocalHost();
-        }
-        JMXServiceURL url = new JMXServiceURL(
-                "service:jmx:rmi:///jndi/rmi://"+address.getHostName()+":"
-                        + this.rmiRegistryPort + "/server");
-                this.ac.debug(url.toString());                        
-        this.connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(
-                url, null,this.server);
-
-        this.server.registerMBean(this.connectorServer, new ObjectName(connectoServerOname));
-        this.connectorServer.start();
-    }
-    private void stopRMIConn() throws Exception {
-        this.connectorServer.stop();
-        UnicastRemoteObject.unexportObject(this.rmiRegistry, true);
-        this.server.unregisterMBean(new ObjectName(connectoServerOname));
-        
-    }
-    
     private void registerMBeans() throws Exception{
         this.server.registerMBean(new CoreController(this.ac), new ObjectName(ObjectNames.CORE_CONTROLLER));
         this.server.registerMBean(new Framework(this.ac), new ObjectName(ObjectNames.FRAMEWORK));
-        this.compendium.initController();
+        this.compendiumHandler.initController();
         this.ac.debug("mbeans registered");
 
         
@@ -217,7 +95,7 @@
     private void unregisterMBeans() throws Exception{
         this.server.unregisterMBean(new ObjectName(ObjectNames.CORE_CONTROLLER));
         this.server.unregisterMBean(new ObjectName(ObjectNames.FRAMEWORK));
-        this.compendium.dispose();
+        this.compendiumHandler.dispose();
     }
     private MBeanServer getMBeanServer() throws Exception{
     	String jvm=System.getProperty("java.version"); //1.5.0 or higher

Copied: incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumHandler.java
(from r438975, incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumController.java)
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumHandler.java?view=diff&rev=450615&p1=incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumController.java&r1=438975&p2=incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumHandler.java&r2=450615
==============================================================================
--- incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumController.java
(original)
+++ incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/CompendiumHandler.java
Wed Sep 27 15:47:22 2006
@@ -50,7 +50,7 @@
  * 
  * 
  */
-public class CompendiumController {
+public class CompendiumHandler {
 
     private AgentContext ac;
 
@@ -60,7 +60,7 @@
 
     private MBeanServer server;
 
-    public CompendiumController(MBeanServer server, AgentContext ac) {
+    public CompendiumHandler(MBeanServer server, AgentContext ac) {
         super();
         this.ac = ac;
         this.server = server;

Added: incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/RMIHandler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/RMIHandler.java?view=auto&rev=450615
==============================================================================
--- incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/RMIHandler.java
(added)
+++ incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/RMIHandler.java
Wed Sep 27 15:47:22 2006
@@ -0,0 +1,97 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.felix.jmood;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.remote.JMXConnectorServer;
+import javax.management.remote.JMXConnectorServerFactory;
+import javax.management.remote.JMXServiceURL;
+
+public class RMIHandler {
+	private int port;
+	private Registry rmiRegistry;
+	private AgentContext ac;
+	private JMXConnectorServer connectorServer;
+	private MBeanServer server;
+    private static final String connectorServerOname="RemotingService:type=ConnectorServer,
subtype=RMIConnectorServer, provider=JRE";
+
+ public RMIHandler(int port, AgentContext ac, MBeanServer server){
+	 this.port=port;
+	 this.ac=ac;
+	 this.server=server;
+ }
+ public void start() throws IOException, InstanceAlreadyExistsException, MBeanRegistrationException,
NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceNotFoundException
{
+ 	Thread t=new Thread(){
+ 		public void run() {
+ 	        try {
+ 	        	rmiRegistry=LocateRegistry.createRegistry(port);
+ 	            } catch (RemoteException e) {
+ 	                ac.warning(e.getMessage()+"\n"+"Possibly some other framework already running,
skipping RMI registry creation");
+ 	              return;
+ 	           }
+ 		}
+ 	};
+ 	t.setName("RMIREGISTRY");
+ 	t.setContextClassLoader(this.getClass().getClassLoader());
+ 	t.start();
+     InetAddress[] addresses=InetAddress.getAllByName(InetAddress.getLocalHost().getCanonicalHostName());
+     //Do not attach the agent to the loopback address
+     InetAddress address=null;
+     for (int i = 0; i < addresses.length; i++) {
+         if (!addresses[i].isLoopbackAddress()) {                    
+             address=addresses[i];
+             break;
+         }
+     }
+     if (address==null){
+     	StringBuffer msg=new StringBuffer("java.net.InetAddress could not find non-localhost
IP. \n");
+     		msg.append(" Is there any network interface available? Are you using Linux?. \n")
+     		   .append("If you are using debian-based distros, try editing the /etc/hosts file
so that it does not contain")
+     		   .append(" something like '127.0.0.1 ${hostname}'");
+     	this.ac.warning(msg.toString());
+     	address=InetAddress.getLocalHost();
+     }
+     JMXServiceURL url = new JMXServiceURL(
+             "service:jmx:rmi:///jndi/rmi://"+address.getHostName()+":"
+                     + this.port + "/server");
+             this.ac.debug(url.toString());                        
+     this.connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(
+             url, null,this.server);
+
+     this.server.registerMBean(this.connectorServer, new ObjectName(connectorServerOname));
+     this.connectorServer.start();
+ }
+ public void stop() throws Exception {
+     this.connectorServer.stop();
+     UnicastRemoteObject.unexportObject(this.rmiRegistry, true);
+     this.server.unregisterMBean(new ObjectName(connectorServerOname));
+ }
+
+}

Added: incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/SecurityManagerHandler.java
URL: http://svn.apache.org/viewvc/incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/SecurityManagerHandler.java?view=auto&rev=450615
==============================================================================
--- incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/SecurityManagerHandler.java
(added)
+++ incubator/felix/trunk/org.apache.felix.jmood/src/main/java/org/apache/felix/jmood/SecurityManagerHandler.java
Wed Sep 27 15:47:22 2006
@@ -0,0 +1,88 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.felix.jmood;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+
+public class SecurityManagerHandler {
+	private AgentContext ac;
+	private boolean policyEmbedded;
+	private String policyPath;
+    public static final String IS_POLICY_EMBEDDED="policy.embedded";
+    public static final String JAVA_SECURITY_POLICY="java.security.policy";
+
+	public SecurityManagerHandler(AgentContext ac, boolean policyEmbedded, String policyPath){
+		this.ac=ac;
+		this.policyEmbedded=policyEmbedded;
+		this.policyPath=policyPath;
+	}
+    private void setSecurityManager() throws Exception{
+        //TODO check this when we add permission admin support to the bundle
+        //It caused StackOverFlow the second time the framework was run(?)
+    	
+        if (System.getSecurityManager() != null) {
+			return;
+		}
+		try {
+			this.ac.debug("Security manager does not exist");
+
+            if (policyEmbedded){
+                this.ac.debug("Policy is embedded, copying it to filesystem...");
+                //The policy is in the file system and should be copied...
+                File file=this.ac.getBundleContext().getDataFile(policyPath);
+                if (file.exists()) {
+                    this.ac.debug("trying to delete file...");
+                    boolean deleted=file.delete();
+                    if(!deleted) {
+						this.ac.error("Could not delete existing policy file");
+					} else {
+						this.ac.debug("successfully deleted");
+					}
+                    file=this.ac.getBundleContext().getDataFile(policyPath);
+                    file.createNewFile();
+                    this.ac.debug("new file created");
+                }
+
+                FileOutputStream o=new FileOutputStream (file);
+                InputStream i=this.ac.getBundleContext().getBundle().getResource("/"+policyPath).openStream();
+                byte [] buffer=new byte [1024];
+                while (i.read(buffer)!=-1){
+                   o.write(buffer);
+                }
+                i.close();
+                o.flush();
+                o.close();
+                
+                System.setProperty(JAVA_SECURITY_POLICY, file.getAbsolutePath());
+            }
+            else{
+         System.setProperty(JAVA_SECURITY_POLICY, policyPath);
+            }
+         System.setSecurityManager(new SecurityManager());
+
+        }catch(Exception e){
+            this.ac.error("Unexpected exception", e);
+            }
+        this.ac.debug("Security policy: "+System.getProperty(JAVA_SECURITY_POLICY));
+        this.ac.debug("Security manager toString(): "+System.getSecurityManager().toString());
+
+        }
+
+
+}



Mime
View raw message