package wsi.ra.jproxy; /** * Title: The JProxy Framework * Description: API for distributed and parallel computing. * Copyright: Copyright (c) 2004 * Company: University of Tuebingen * @version: $Revision: 1.3 $ * $Date: 2004/04/28 07:50:32 $ * $Author: ulmerh $ */ /*==========================================================================* * IMPORTS *==========================================================================*/ import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.Registry; import java.util.ArrayList; import java.util.Properties; import java.util.StringTokenizer; import eva2.tools.Serializer; /** * */ public class ComAdapter { static final public boolean TRACE = false; static final public int PORT = 1099; static final public String SEP = "_"; static protected ComAdapter m_instance = null; public Registry m_Registry = null; private ArrayList m_Connections = new ArrayList(); private String m_ownHostName; private ArrayList m_HostNameList = new ArrayList(); private ArrayList m_AvailableHostNameList = new ArrayList(); // private String m_RemoteAdapterName; private String m_UserName; private int m_ownHostIndex = 0; protected RMIServer m_RMIServer; private String serverListSeparator = ","; private boolean gettingRegistry; /** * */ public static ComAdapter getInstance() { if (m_instance != null) return m_instance; m_instance = new ComAdapter(); return m_instance; } /** * */ protected ComAdapter() { if (TRACE) System.out.println("constructor ComAdapter"); m_UserName = System.getProperty("user.name"); m_ownHostName = "localhost"; //"192.168.0.1"; System.setProperty("java.security.policy", "server.policy"); launchRMIRegistry(false); if (!m_HostNameList.contains("localhost")) { // make sure localhost is in the list m_HostNameList.add("localhost"); } } /** * Parse a string of server names. The comma "," must be used as separator. * * @param serverList */ public void addServersFromString(String serverList) { if (serverList != null) { // parse the servernames StringTokenizer st = new StringTokenizer(serverList, serverListSeparator); while (st.hasMoreTokens()) { String current = st.nextToken().trim(); if (!m_HostNameList.contains(current)) { if (TRACE) System.out.println("adding server " + current); m_HostNameList.add(current); } else { if (TRACE) System.out.println("server " + current + " was already in list"); } } } } /** * Add a server list from a Properties instance. The key used is "ServerList". * * @param props */ public void addServersFromProperties(Properties props) { String servs = props.getProperty("ServerList"); addServersFromString(servs); } /** * Set the separator for the server list string. * * @return */ public void setServerListSeparator(String sep) { serverListSeparator = sep; } /** * The separator for the server list string. * * @return */ public String getServerListSeparator() { return serverListSeparator; } /** * * @param c * @param host * @return */ public void setServerList(String[] server){ m_HostNameList.clear(); for (int i=0;i= m_AvailableHostNameList.size()) m_ownHostIndex = 0; m_ownHostName = (String) m_AvailableHostNameList.get(m_ownHostIndex); ret = getRMIThreadHandler(c, m_ownHostName); return ret; } /** * * */ public RMIInvocationHandler getRMIHandler(Object c) { if (TRACE) System.out.println("RMIThreadInvokationHandler getRMIHandler"); RMIInvocationHandler ret = null; while (m_AvailableHostNameList.size() == 0) { evalAvailableHostNameList(); if (m_AvailableHostNameList.size() == 0) System.err.println("no host availabe waiting !!"); m_ownHostIndex = 0; } m_ownHostIndex++; if (m_ownHostIndex >= m_AvailableHostNameList.size()) m_ownHostIndex = 0; m_ownHostName = (String) m_AvailableHostNameList.get(m_ownHostIndex); ret = getRMIHandler(c, m_ownHostName); return ret; } // /** // * // */ // public String getLoad() { // if (TRACE) // System.out.println("ComAdapter.getLoad()"); // String Load = null; // Load = getConnection(m_ownHostName).getExecOutput("rup " + m_ownHostName); // if (TRACE) // System.out.println("Load of Modules on Server !! :" + Load); //// if (m_LogPanel != null) //// m_LogPanel.logMessage("Load of Modules on Server !! :" + Load); // return Load; // } // /** // * // */ // public String gettokens() { // if (TRACE) // System.out.println("ComAdapter.gettokens()"); // String Tokens = null; // Tokens = getConnection(m_ActualHostName).getExecOutput("tokens"); // if (TRACE) // System.out.println("tokens on Server !! :" + Tokens); // Tokens = getConnection(m_ActualHostName).getExecOutput( // "klog -principal ulmerh -password "); // if (TRACE) // System.out.println("KLOG !!! !! :" + Tokens); // Tokens = getConnection(m_ActualHostName).getExecOutput("tokens"); // if (TRACE) // System.out.println("tokens on Server !! :" + Tokens); // return Tokens; // } /** * */ public void evalAvailableHostNameList() { long time = System.currentTimeMillis(); if (TRACE) System.out.println("ComAdapter.getAvailableHostNameList()"); m_AvailableHostNameList.clear(); for (int i = 0; i < m_HostNameList.size(); i++) { if (rmiPing((String) m_HostNameList.get(i)) == true) m_AvailableHostNameList.add((String) m_HostNameList.get(i)); String testurl = (String) m_HostNameList.get(i); for (int j = 1; j < 3; j++) { if (rmiPing(testurl + "_" + j) == true) { if (TRACE) System.out.println("found EvAServer on: " + testurl); m_AvailableHostNameList.add(testurl + "_" + j); } } } time = System.currentTimeMillis() - time; if (TRACE) System.out.println("getAvailableHostNameList: " + m_AvailableHostNameList.size() + " found time " + time); } /** * */ public String[] getAvailableHostNameList() { if (m_AvailableHostNameList.size() == 0) evalAvailableHostNameList(); String[] ret = new String[m_AvailableHostNameList.size()]; m_AvailableHostNameList.toArray(ret); return ret; } /** * */ public String[] getHostNameList() { String[] x = new String[m_HostNameList.size()]; m_HostNameList.toArray(x); return x; } /** * */ public String getHostName() { return m_ownHostName; } /** * */ public void setHostName(String newHost) { m_ownHostName = newHost; Serializer.storeString("hostname.ser", m_ownHostName); } /** * Creates a RMI-MainAdapter to host. * @return */ protected MainAdapter createRMIMainConnect(String HostToConnect) { if (TRACE) System.out.println("RMIMainConnect.RMIMainConnect() =" + HostToConnect); int len = HostToConnect.indexOf(SEP); String Host = HostToConnect; String Number = SEP + "0"; if (len != -1) { StringTokenizer st = new StringTokenizer(HostToConnect, SEP); Host = st.nextToken().trim(); Number = SEP + st.nextToken().trim(); } String MainAdapterName = m_UserName + MainAdapterImpl.MAIN_ADAPTER_NAME + Number; // attention logInfo(" RMIConnect to " + HostToConnect); MainAdapter MainRemoteObject = null; try { try { try { //System.out.println("--> ComAdapter: "+"rmi://"+Host+":"+MainAdapterImpl.PORT+"/"+MainAdapterName); // String[] list = Naming.list("rmi://" + Host + ":" + // MainAdapterImpl.PORT); //for (int i=0;i got RMIREGISTRY"); comAd.setRMIRegistry(reg); } }