diff src/org/dancres/blitz/tools/dash/StartFromConfig.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/dancres/blitz/tools/dash/StartFromConfig.java	Sat Mar 21 11:00:06 2009 +0000
@@ -0,0 +1,173 @@
+package org.dancres.blitz.tools.dash;
+
+import java.rmi.RMISecurityManager;
+
+import javax.swing.JOptionPane;
+
+import java.security.PrivilegedExceptionAction;
+
+import javax.security.auth.Subject;
+
+import javax.security.auth.login.LoginContext;
+
+import net.jini.config.Configuration;
+import net.jini.config.ConfigurationProvider;
+
+import net.jini.lookup.ServiceDiscoveryManager;
+
+import net.jini.lookup.entry.Name;
+
+import net.jini.core.lookup.ServiceTemplate;
+import net.jini.core.lookup.ServiceItem;
+
+import net.jini.core.entry.Entry;
+
+import net.jini.discovery.DiscoveryManagement;
+
+import net.jini.admin.Administrable;
+
+import net.jini.space.JavaSpace;
+
+import net.jini.security.ProxyPreparer;
+import net.jini.security.BasicProxyPreparer;
+
+import org.dancres.blitz.remote.StatsAdmin;
+
+/**
+   Use this class to start dashboard from a JINI config file.
+   If you wish to use dashboard in a secure configuration, you'll need this!
+
+   See page 43 of Murph's slides on client boilerplate
+
+   Add preparer for lookup service
+ */
+public class StartFromConfig {
+    private static final String MODULE = "org.dancres.blitz.dash";
+    private static final String LOGIN = "loginContext";
+    private static final String SPACENAME = "spaceName";
+    private static final String DM = "discoveryManagement";
+    private static final String SPACE_PREP = "javaspacePreparer";
+    private static final String ADMIN_PREP = "adminPreparer";
+    private static final String TIMEOUT = "lookupTimeout";
+
+    public static void main(String args[]) {
+        try {
+            System.setSecurityManager(new RMISecurityManager());
+
+            final Configuration myConfig = 
+                ConfigurationProvider.getInstance(args);
+
+            final LoginContext myContext =
+                (LoginContext)
+                myConfig.getEntry(MODULE, LOGIN, LoginContext.class);
+
+            if (myContext == null) {
+                StartFromConfig myStart = new StartFromConfig(myConfig);
+                myStart.startup();
+            } else {
+                myContext.login();
+
+                Subject.doAsPrivileged(myContext.getSubject(),
+                                       new PrivilegedExceptionAction() {
+                                           public Object run() throws Exception {
+                                               StartFromConfig myStart =
+                                                   new StartFromConfig(myConfig);
+                                               myStart.startup();
+                                               
+                                               return null;
+                                           }
+                                       },
+                                       null);
+            }
+            
+        } catch (Exception anE) {
+            System.err.println("Encountered error during startup, quitting");
+            anE.printStackTrace(System.err);
+            System.exit(-1);
+        }
+    }
+
+    private Configuration theConfig;
+    private ServiceDiscoveryManager theSDM;
+    private DiscoveryManagement theDM;
+
+    private StartFromConfig(Configuration aConfig) {
+        theConfig = aConfig;
+    }
+
+    private void startup() throws Exception {
+        try {
+            startupImpl();
+        } finally {
+            if (theSDM != null)
+                try {
+                    theSDM.terminate();
+                } catch (Throwable aT) {
+                }
+
+            if (theDM != null)
+                try {
+                    theDM.terminate();
+                } catch (Throwable aT) {
+                }
+        }
+    }
+
+    private void startupImpl() throws Exception {
+        ProxyPreparer mySpacePrep = (ProxyPreparer)
+            theConfig.getEntry(MODULE, SPACE_PREP, ProxyPreparer.class,
+                               new BasicProxyPreparer());
+
+        ProxyPreparer myAdminPrep = (ProxyPreparer)
+            theConfig.getEntry(MODULE, ADMIN_PREP, ProxyPreparer.class,
+                               new BasicProxyPreparer());
+
+        theDM = (DiscoveryManagement)
+            theConfig.getEntry(MODULE, DM, DiscoveryManagement.class);
+
+        theSDM = new ServiceDiscoveryManager(theDM, null, theConfig);
+
+        Name myServiceName = new Name((String)
+                                      theConfig.getEntry(MODULE,
+                                                         SPACENAME,
+                                                         String.class));
+
+        ServiceTemplate myTemplate =
+            new ServiceTemplate(null, new Class[] {JavaSpace.class},
+                                new Entry[] {myServiceName});
+
+        long myTimeout =
+            ((Long) theConfig.getEntry(MODULE, TIMEOUT, Long.class,
+                                       new Long(30 * 1000))).longValue();
+
+        ServiceItem myResult = theSDM.lookup(myTemplate, null, myTimeout);
+
+        if (myResult == null) {
+                JOptionPane.showMessageDialog(null, "Didn't find the specified JavaSpace :(", "Blitz Dash", JOptionPane.ERROR_MESSAGE);
+                return;
+        }
+
+        JavaSpace mySpace = (JavaSpace) mySpacePrep.prepareProxy(myResult.service);
+        if (mySpace instanceof Administrable) {
+            Administrable myAdministrable = (Administrable) mySpace;
+
+            Object myAdmin =
+                myAdminPrep.prepareProxy(myAdministrable.getAdmin());
+
+            if (myAdmin instanceof StatsAdmin) {
+                StatsAdmin myStats = (StatsAdmin) myAdmin;
+
+                DashBoardFrame myFrame =
+                    new DashBoardFrame(StartDashBoard.VER, myStats, true);
+
+                myFrame.setVisible(true);
+            } else {
+                JOptionPane.showMessageDialog(null, "Space didn't have StatsAdmin :(", "Blitz Dash", JOptionPane.ERROR_MESSAGE);
+                return;
+            }
+        } else {
+                JOptionPane.showMessageDialog(null, "Space wasn't Administrable :(", "Blitz Dash", JOptionPane.ERROR_MESSAGE);
+                return;
+        }
+    }
+}