Properties from config.properties.<profilName> used to build remote gateways address changed. There is no more hard coded part into the remote gateway construction.

Instead of :
 - mosgi.jmxconsole.id.1.profile=core
 - mosgi.jmxconsole.id.1.host=127.0.0.1
 - mosgi.jmxconsole.id.1.protocol=rmi
 - mosgi.jmxconsole.id.1.port=1099

Use :
 - mosgi.jmxconsole.id.1.jmxsurl=service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/core

The new property value must look like this:
  "service:jmx:<protocol>:<sap>"

More information on what this new property value must look like are available on the javax.management.remote.JMXServiceURL class javadoc.



git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@669139 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/Gateway.java b/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/Gateway.java
index 5556307..d2b5c46 100644
--- a/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/Gateway.java
+++ b/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/Gateway.java
@@ -34,25 +34,20 @@
 public class Gateway extends JMXServiceURL {
 
   private static final String JMX_SERVICE = "service:jmx:";
+  private static final String DEFAULT_JMXSURL = JMX_SERVICE+"rmi:///jndi/rmi://127.0.0.1:1099/core";
 
-  private static final String DEFAULT_PROFILE  = "core";
-  private static final String DEFAULT_HOST     = "127.0.0.1";
-  private static final String DEFAULT_PROTOCOL = "rmi";
-  private static final String DEFAULT_PORT     = "1099";
-
-  private static Hashtable HT_GATEWAY = new Hashtable(); // used to manage virtuals gateways
+  private static Hashtable HT_GATEWAY = new Hashtable();
 
   private JMXConnector jmxc;
   private MBeanServerConnection mbsc;
 
-  private String nickname; // used to manage virtuals gateways
-  private String name; // name for the GUI = this.nickname+" : "+this.toString()
+  private String nickname;
   private Gateway parentGateway;
   private String toolTipText;
   private boolean isConnected;
   
-  public String getName() {
-    return this.name;
+  public String getNickname() {
+    return this.nickname;
   }
 
   public MBeanServerConnection getMbsc() {
@@ -72,11 +67,10 @@
   }
 
   // The constructor (private)
-  private Gateway(String nickname, String surl, Gateway vosgi) throws MalformedURLException {
+  private Gateway(String nickname, String surl, Gateway parent) throws MalformedURLException {
     super(surl);
     this.nickname = nickname;
-    this.name = nickname+" : \""+this.toString().substring(JMX_SERVICE.length())+"\"";
-    this.parentGateway = vosgi;
+    this.parentGateway = parent;
     this.isConnected = false;
     this.toolTipText = "<html><B>\""+nickname+"\" JMXServiceURL =<br>"+
       "- protocol=</B>"+this.getProtocol()+"<br><B>"+
@@ -88,6 +82,9 @@
 
   // Intermediate private Gateway creator
   private static Gateway newGateway(String nickname, String serviceURL, String parent_gateway) throws Exception {
+    if ( !serviceURL.startsWith(JMX_SERVICE) ) {
+      serviceURL = JMX_SERVICE+serviceURL;
+    }
     if ( serviceURL.contains("null") ) {
       throw new Exception("Invalid service URL \""+serviceURL+"\"");
     }
@@ -100,81 +97,56 @@
       }
     }
 
-    Gateway newGateway = new Gateway(nickname, serviceURL, vosgiGateway);
-    return newGateway;
+    return new Gateway(nickname, serviceURL, vosgiGateway);
   }
 
   // Creation of Gateways from the config properties file
   public static Gateway[] newGateways(BundleContext bc) {
+    String str_jmxsurl, nickname, str_parent;
     Vector v_gateways = new Vector();
-    String protocol, host, profile, port, nickname, parent_gateway;
-    int port_int;
 
     int i = 1;
-    profile = bc.getProperty("mosgi.jmxconsole.id."+i+".profile");
-    if ( profile == null) { profile = DEFAULT_PROFILE; }
-  
-    while ( profile != null ) {
-      host = bc.getProperty("mosgi.jmxconsole.id."+i+".host");
-      if ( host == null ) { host = DEFAULT_HOST; }
-      protocol = bc.getProperty("mosgi.jmxconsole.id."+i+".protocol");
-      if ( protocol == null ) { protocol = DEFAULT_PROTOCOL; }
-      port = bc.getProperty("mosgi.jmxconsole.id."+i+".port");
-      if ( port == null ) { port = DEFAULT_PORT; }
-      try {
-        port_int = Integer.parseInt(port);
-      } catch (Exception exep) { try { port_int = Integer.parseInt(DEFAULT_PORT); } catch (Exception e) {} }
-      String serviceURL = JMX_SERVICE+protocol+":///jndi/"+"rmi"+"://"+host+":"+port+"/"+profile;
-      parent_gateway = bc.getProperty("mosgi.jmxconsole.id."+i+".virtual");
-      Gateway g = null;
-      nickname =  bc.getProperty("mosgi.jmxconsole.id."+i+".nickname");
+    str_jmxsurl = bc.getProperty("mosgi.jmxconsole.id."+i+".jmxsurl");
+    if ( str_jmxsurl == null ) { str_jmxsurl = DEFAULT_JMXSURL; }
+
+    while ( str_jmxsurl != null) {
+      nickname = bc.getProperty("mosgi.jmxconsole.id."+i+".nickname");
       if (nickname == null ) { nickname = ""+i; };
+      str_parent = bc.getProperty("mosgi.jmxconsole.id."+i+".parent");
+      Gateway g = null;
       try {
-        g = Gateway.newGateway(nickname, serviceURL, parent_gateway);
+        g = Gateway.newGateway(nickname, str_jmxsurl, str_parent);
         if ( g != null ) {
           v_gateways.addElement(g);
         }
       } catch (Exception exep) {
-        System.out.println(""+exep);
+        System.out.println("Gateway creation error:\n "+exep.toString());
       }
-      i++;
-      profile = bc.getProperty("mosgi.jmxconsole.id."+i+".profile");
+      str_jmxsurl = bc.getProperty("mosgi.jmxconsole.id."+(++i)+".jmxsurl");
     }
+
     Gateway[] gateways=new Gateway[v_gateways.size()];
     v_gateways.toArray(gateways);
     return gateways;
   }
 
   // GUI gateway creator
-  public static Gateway newGateway() {
+  public static Gateway newGateway(Gateway ref) throws Exception {
     String nickname = JOptionPane.showInputDialog("Profil nickname", "");
-    if ( nickname == null) return null; // should check nickname is unique
-    String host = JOptionPane.showInputDialog("Host", DEFAULT_HOST);
-    if ( host == null ) return null;
-    String protocol = JOptionPane.showInputDialog("Protocol", DEFAULT_PROTOCOL);
-    if ( protocol==null ) return null;
-    String port = JOptionPane.showInputDialog("Port", DEFAULT_PORT);
-    try { Integer.parseInt(port); } catch (Exception ex) { return null; }
-    String profile = JOptionPane.showInputDialog("OSGi profil name", "");
-    if (profile==null) return null;
+    if ( nickname == null) return null;
+    String gateway_ref = ref!=null?ref+"":"";
+    String str_jmxsurl = JOptionPane.showInputDialog("JMX service URL", gateway_ref);
+    if ( str_jmxsurl == null) return null;
     Object gateway_list[] = HT_GATEWAY.keySet().toArray();
     Object gateway_list2[] = new Object[gateway_list.length+1];
     System.arraycopy(gateway_list, 0, gateway_list2, 1, gateway_list.length);
     gateway_list2[0] = "None";
     java.util.Arrays.sort(gateway_list);
-    int val = JOptionPane.showOptionDialog(new javax.swing.JFrame(), "Virtual of", "Is it a virtual gateway ?", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, gateway_list2, gateway_list2[0]);
-    String virtual = "";
-    if ( val != JOptionPane.CLOSED_OPTION ) { virtual = ""+gateway_list2[val]; }
-    if ( val == 0 ) { virtual = ""; }
-    String serviceURL = JMX_SERVICE+protocol+":///jndi/"+protocol+"://"+host+":"+port+"/"+profile;
-    Gateway g = null;
-    try { 
-      g = Gateway.newGateway(nickname, serviceURL, virtual);
-    } catch (Exception exep) {
-      System.out.println(""+exep);
-      return null;
-    }
-    return g;
+    int val = JOptionPane.showOptionDialog(new javax.swing.JFrame(), "Link to another gateway ?", "Gateway association", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, gateway_list2, gateway_list2[0]);
+    String str_parent = "";
+    if ( val != JOptionPane.CLOSED_OPTION ) { str_parent = ""+gateway_list2[val]; }
+    if ( val == 0 ) { str_parent = ""; }
+    return Gateway.newGateway(nickname, str_jmxsurl, str_parent);
   }
 
   public boolean connect(NotificationListener notificationListener) {
diff --git a/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodeCellRenderer.java b/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodeCellRenderer.java
index 2c92433..47b239d 100644
--- a/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodeCellRenderer.java
+++ b/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodeCellRenderer.java
@@ -42,7 +42,7 @@
     Object o = ((DefaultMutableTreeNode) value).getUserObject();
     if ( !o.equals(NodesTree.TOP_NAME) ) {
       Gateway g = (Gateway) o;
-      super.getTreeCellRendererComponent(tree, g.getName(), sel, expanded, leaf, row, hasFocus);
+      super.getTreeCellRendererComponent(tree, g.getNickname(), sel, expanded, leaf, row, hasFocus);
       if ( g.isConnected() ) {
         setIcon(iconConnected);
       } else {
diff --git a/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodesTree.java b/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodesTree.java
index 8fdc83b..01cae00 100644
--- a/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodesTree.java
+++ b/mosgi/console.gui/src/main/java/org/apache/felix/mosgi/console/gui/NodesTree.java
@@ -175,10 +175,20 @@
   public void actionPerformed(ActionEvent ae) {
     Object object = ae.getSource();
     if ( object == jb_addNode ) { // Add a new node into tree
-      Gateway g = Gateway.newGateway();
-      if ( g != null ) {
+      DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
+      Gateway selectedGateway = null;
+      if ( node != null && node != top) {
+        selectedGateway = (Gateway) node.getUserObject();
+      }
+      Gateway newGateway = null;
+      try {
+        newGateway = Gateway.newGateway(selectedGateway);
+      } catch (Exception exep) {
+        JOptionPane.showMessageDialog(null, "Gateway creation error:\n "+exep.toString(), "Error", JOptionPane.ERROR_MESSAGE);
+      }
+      if ( newGateway != null ) {
         TreePath tp = tree.getSelectionPath();
-        this.createTreeNode(g);
+        this.createTreeNode(newGateway);
         dtm.reload(top);
         isAllNodesConnected = false;
         tree.setSelectionPath(tp);
@@ -188,7 +198,7 @@
       if ( node != top) {
         Gateway g = (Gateway) node.getUserObject();
         if ( !node.equals(top) ){
-	  if( JOptionPane.showConfirmDialog(null, "Sure we remove this gateway \""+g.getName()+"\" ?\n "+g.toString()) == JOptionPane.YES_OPTION ) {
+	  if( JOptionPane.showConfirmDialog(null, "Sure we remove this gateway \""+g.getNickname()+"\" ?\n "+g.toString()) == JOptionPane.YES_OPTION ) {
             g.disconnect(this);
 	    dtm.removeNodeFromParent(node);
 	    System.out.println("Remove node : "+g);
@@ -271,8 +281,9 @@
       String packages = bc.getProperty("mosgi.jmxconsole.protocol."+protoName+".package");
       if ( packages == null ) {
         packages = "";
+      } else {
+        System.out.println("Protocol provider package for \""+protoName+"\" is prefixed with \""+packages+"\"");
       }
-      System.out.println("Protocol provider package for \""+protoName+"\" = "+packages);
       PROTOCOL_PACKAGE_PROVIDER.put(protoName, packages);
       return packages;
     }
diff --git a/mosgi/doc/config.properties.jmxconsole b/mosgi/doc/config.properties.jmxconsole
index ec7bb55..335c820 100644
--- a/mosgi/doc/config.properties.jmxconsole
+++ b/mosgi/doc/config.properties.jmxconsole
@@ -35,17 +35,14 @@
 # mosgi.jmxconsole.rmiport.core=1099
 
 # NEW :
-mosgi.jmxconsole.id.1.nickname=main
-mosgi.jmxconsole.id.1.profile=core
-mosgi.jmxconsole.id.1.host=127.0.0.1
-mosgi.jmxconsole.id.1.protocol=rmi
-mosgi.jmxconsole.id.1.port=1099
-#mosgi.jmxconsole.id.1.jmxserviceurl=service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/core
+# mosgi.jmxconsole.id.<number>.nickname is the gateway nickname used by the GUI (default value is the gateway <number>)
+# mosgi.jmxconsole.id.<number>.jmxsurl is the string used to create the JMXServiceURL. This string must look like this : service:jmx:<protocol>:<sap>, <protocol> ie. "rmi", <sap> ie. "///jndi/rmi://127.0.0.1:1099/core"
+# More details on the JMXServiceURL class javadoc
+mosgi.jmxconsole.id.1.jmxsurl=service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/core
+mosgi.jmxconsole.id.1.nickname=core std (rmi)
 
-mosgi.jmxconsole.id.2.profile=core2
-mosgi.jmxconsole.id.2.host=127.0.0.1
-mosgi.jmxconsole.id.2.protocol=rmi
-mosgi.jmxconsole.id.2.port=1100
+mosgi.jmxconsole.id.2.jmxsurl=service:jmx:ws://127.0.0.1:1100/core2
+mosgi.jmxconsole.id.2.nickname=core 2 (web service connector)
 
 felix.startlevel.framework=1
 felix.startlevel.bundle=1
diff --git a/mosgi/doc/core.sh b/mosgi/doc/core.sh
index ec22190..1d80b5c 100755
--- a/mosgi/doc/core.sh
+++ b/mosgi/doc/core.sh
@@ -1,5 +1,6 @@
 #!/bin/sh
-rm -rf ~/.felix/core
+
+#rm -rf ~/.felix/core
 
 echo "cd into felix directory"
 cd ../../main
diff --git a/mosgi/doc/jmxconsole.sh b/mosgi/doc/jmxconsole.sh
index f4b5bf7..1e390fc 100755
--- a/mosgi/doc/jmxconsole.sh
+++ b/mosgi/doc/jmxconsole.sh
@@ -1,5 +1,6 @@
 #!/bin/sh
-rm -rf ~/.felix/jmxconsole
+
+#rm -rf ~/.felix/jmxconsole
 
 echo "cd into felix directory"
 cd ../../main
diff --git a/mosgi/jmx.agent/src/main/java/org/apache/felix/mosgi/jmx/agent/AgentActivator.java b/mosgi/jmx.agent/src/main/java/org/apache/felix/mosgi/jmx/agent/AgentActivator.java
index 3bdf8e0..cc0a0ae 100644
--- a/mosgi/jmx.agent/src/main/java/org/apache/felix/mosgi/jmx/agent/AgentActivator.java
+++ b/mosgi/jmx.agent/src/main/java/org/apache/felix/mosgi/jmx/agent/AgentActivator.java
@@ -56,17 +56,10 @@
     AgentActivator.bc=context;
     this.version=(String)bc.getBundle().getHeaders().get(Constants.BUNDLE_VERSION);
     AgentActivator.log(LogService.LOG_INFO, "Starting JMX Agent "+version,null);
-    String profile=bc.getProperty(BundleCache.CACHE_PROFILE_PROP);
-    if (profile==null){
-      profile=System.getProperty(BundleCache.CACHE_PROFILE_PROP);
-     }
-    String virtual=bc.getProperty("mosgi.jmxconsole.core."+profile);
     StringTokenizer st=new StringTokenizer(System.getProperty("java.version"), ".");
     st.nextToken();
-    int minor=Integer.parseInt(st.nextToken());
-
-    System.out.println("VIRTUAL OOOO "+virtual+" : "+profile);
-    this.startAgent(virtual, minor);
+    int minorVersion = Integer.parseInt(st.nextToken());
+    this.startAgent(minorVersion);
     this.registerExistingMBeans();
     bc.addServiceListener(this);
   }
@@ -110,11 +103,9 @@
     }
   }
 
-  private void startAgent(String virtual, int minor){
-    if (virtual==null && minor >=5){
-      Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-      //this.server= ManagementFactory.getPlatformMBeanServer();
-      this.server = MBeanServerFactory.createMBeanServer();
+  private void startAgent(int minor){
+    if ( minor >= 5 ){
+      this.server = java.lang.management.ManagementFactory.getPlatformMBeanServer();
       AgentActivator.log(LogService.LOG_DEBUG, "A jdk1.5 agent started "+this.server,null);
     }else {
       Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());