Package com.sun.enterprise.tools.deployment.main

Source Code of com.sun.enterprise.tools.deployment.main.ServerManager

/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License").  You
* may not use this file except in compliance with the License. You can obtain
* a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
* or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
* Sun designates this particular file as subject to the "Classpath" exception
* as provided by Sun in the GPL Version 2 section of the License file that
* accompanied this code.  If applicable, add the following below the License
* Header, with the fields enclosed by brackets [] replaced by your own
* identifying information: "Portions Copyrighted [year]
* [name of copyright owner]"
*
* Contributor(s):
*
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license."  If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above.  However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.enterprise.tools.deployment.main;

import java.rmi.RemoteException;
import java.io.*;
import java.util.Hashtable;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Set;
import java.net.*;

import org.omg.CORBA.ORB;
import javax.rmi.CORBA.Tie;
import javax.rmi.PortableRemoteObject;
import javax.naming.InitialContext;
import javax.naming.Context;

import com.sun.enterprise.util.NotificationListener;
import com.sun.enterprise.util.NotificationEvent;
import com.sun.enterprise.util.ORBManager;
import com.sun.ejb.sqlgen.DBInfo;

import com.sun.enterprise.tools.deployment.backend.JarInstaller;
import com.sun.enterprise.tools.deployment.backend.DeploymentSession;
import com.sun.enterprise.tools.deployment.backend.DeploymentSessionImpl;
import com.sun.enterprise.util.LocalStringManagerImpl;
import com.sun.enterprise.deployment.Application;
import com.sun.enterprise.deployment.Descriptor;
import com.sun.enterprise.resource.ConnectorInfo;
import com.sun.enterprise.resource.PoolingException;

//import com.sun.enterprise.tools.deployment.ui.UIUtils;

/** This is the class that handles connections to the J2EE server from
**  client tools.
**  @author Danny Coward
*/

public class ServerManager
{
    private static final String OMG_ORB_INIT_PORT_PROPERTY =
  "org.omg.CORBA.ORBInitialPort"; // NOI18N
    private static final String OMG_ORB_INIT_HOST_PROPERTY =
  "org.omg.CORBA.ORBInitialHost"; // NOI18N
    private static final String DEFAULT_ORB_INIT_HOST = "localhost"; // NOI18N
    private static final String DEFAULT_ORB_INIT_PORT = "1050"; // NOI18N
   
    /* -------------------------------------------------------------------------
    ** Localization
    */

    private static LocalStringManagerImpl localStrings =
        new LocalStringManagerImpl(ServerManager.class);

    /* -------------------------------------------------------------------------
    ** Notification types
    */

    /* generic type */
    public static String NOTIFICATION_TYPE = "ServerManager"; // NOI18N
       
    /** server listener added/removed */
    public static String SERVER_LISTENER_ADDED = "serverListenerAdded"; // NOI18N
    public static String SERVER_LISTENER_REMOVED = "serverListenerRemoved"; // NOI18N

    /** server added/removed/selected */
    public static String SERVER_ADDED = "addServer"; // NOI18N
    public static String SERVER_REMOVED = "removeServer"; // NOI18N
    public static String SERVER_SELECTED = "setCurrentServer"; // NOI18N

    /** application delpoyed/undeployed */
    public static String APP_DEPLOYED   = "deployedApplication"; // NOI18N
    public static String APP_UNDEPLOYED = "undeployedApplication"; // NOI18N
    public static String SA_DEPLOYED   = "deployedApplication"; // NOI18N
    public static String SA_UNDEPLOYED  = "undeployedStandAlone"; // NOI18N

    /* -----
    */

    private static String LOCAL_SERVER = "local"; // NOI18N
    /** "localhost";*/ // NOI18N

    public static String SERVER_PROPERTY = "name"; // NOI18N

    public static String LOCAL_HOST = "localhost"; // NOI18N
    private static String SERVERS_FILENAME = "servers"; // NOI18N
   
    private File preferencesDirectory;
    private Vector listeners = new Vector();
    private Hashtable serverNameToListenerMap = new Hashtable();
    private String currentServer;
    private Context initialContext;
   
    /** Construct a new server manager which restores and saves its state
    **  to the given
    *   directory.*/
    public ServerManager(File preferencesDirectory)
    {
  this.preferencesDirectory = preferencesDirectory;
    }

    /* -------------------------------------------------------------------------
    ** Undeploy App & Deployed notification
    */

//    /** The undeploy method.*/
//    public void uninstall(String appName, String serverName)
//        throws ServerException
//    {
//        System.out.println("*** 'uninstall' is obsolete, please use 'undeployApplication' ***");
//  Thread.dumpStack();
//  this.undeployApplication(appName, serverName);
//    }
//
//    public void uninstall(Object appList[], String serverName)
//        throws ServerException
//    {
//        System.out.println("*** 'uninstall' is obsolete, please use 'undeployApplication' ***");
//  Thread.dumpStack();
//  this.undeployApplication(appList, serverName);
//    }

    /** The undeploy method.*/
    public void undeployApplication(String applicationName, String serverName)
        throws ServerException
    {
  JarInstaller installer = this.getJarInstaller(serverName);
  try {
      installer.undeployApplication(applicationName);
      this.changed(APP_UNDEPLOYED, applicationName);
  } catch (Throwable t) {
      throw new ServerException(localStrings.getLocalString(
      "enterprise.tools.deployment.main.erroruninstallingapplicationfromserver",
    "Error uninstalling {0} from {1}",
                new Object[] {applicationName, serverName}));
  }
 
    }

    public void undeployApplication(Object appList[], String serverName)
        throws ServerException
    {
  for (int i = 0; i < appList.length; i++) {
      if (appList[i] instanceof String) {
          this.undeployApplication((String)appList[i], serverName);
      } else {
    // XXX this should never occur
      }
  }
    }

    /* called by DeploymentManager when an app has been successfully deployed */
    public void deployedApplication(Application app)
    {
  this.changed(APP_DEPLOYED, app.getName());
    }

    /* -------------------------------------------------------------------------
    ** Undeploy Connectors
    */

    public void undeployConnector(String rarName, String serverName)
        throws ServerException
    {
  JarInstaller installer = this.getJarInstaller(serverName);
  try {
      installer.undeployConnector(rarName);
      this.changed(SA_UNDEPLOYED, rarName);
  } catch (Throwable t) {
      throw new ServerException(localStrings.getLocalString(
      "enterprise.tools.deployment.main.erroruninstallingapplicationfromserver",
    "Error uninstalling {0} from {1}",
                new Object[] { rarName, serverName }));
  }
    }

    public void undeployConnector(Object rarList[], String serverName)
        throws ServerException
    {
  for (int i = 0; i < rarList.length; i++) {
      if (rarList[i] instanceof String) {
          this.undeployConnector((String)rarList[i], serverName);
      } else {
    // XXX this should never occur
      }
  }
    }

    /* called by DeploymentManager when an app has been successfully deployed */
    public void deployedStandAlone(Descriptor desc)
    {
  this.changed(SA_DEPLOYED, desc.getName());
    }

    /* -------------------------------------------------------------------------
    ** add/remove server
    */

    /** Connect to a new server by hostnamne*/
    public void addServer(String serverName)
  throws ServerException
    {
  JarInstaller jarInstaller = this.getJarInstaller(serverName);
  if (serverNameToListenerMap.containsKey(serverName)) {
      // already present
      this.setCurrentServer(serverName);
      this.changed(SERVER_SELECTED, serverName);
  } else {
      ServerListener serverListener = null;
      try {
    serverListener = this.createServerListener(serverName);
    jarInstaller.addRemoteNotificationListener(serverListener);
      } catch (Exception e) {
    System.out.println(localStrings.getLocalString(
                  "enterprise.tools.deployment.main.errorgettingserverlistener",
      "Error getting server listener"));
      }
      serverNameToListenerMap.put(serverName, serverListener);
      this.setCurrentServer(serverName);
      this.changed(SERVER_ADDED, serverName);
  }
    }

    /** Disconnect from new server by hostname*/
    public void removeServer(String hostName)
    {
  if (serverNameToListenerMap.containsKey(hostName)) {
      ServerListener serverListener =
                (ServerListener)serverNameToListenerMap.get(hostName);
      try {
    serverNameToListenerMap.remove(hostName);
    if ((this.getCurrentServer() != null) &&
                    this.getCurrentServer().equals(hostName)) {
        this.currentServer = null;
    }
    this.changed(SERVER_REMOVED, hostName);
    JarInstaller jarInstaller = this.getJarInstaller(hostName);
    jarInstaller.removeRemoteNotificationListener(serverListener);
      } catch (Exception e) {
    // leave for debug
    //System.out.println("Error removing notification listener from server");
      }
  }
    }
   
    /** Return the name of the current server in this manager.*/
    public String getCurrentServer()
    {
  if ((this.currentServer != null) &&
            serverNameToListenerMap.containsKey(this.currentServer)) {
      return currentServer;
  }
  return null;
    }
   
    /** Set the name of the current server in this manager.*/
    public void setCurrentServer(String serverName)
    {
  this.currentServer = serverName;
  String notificationString = ""; // NOI18N
  if (serverName != null) {
      notificationString = serverName;
  }
  this.changed(SERVER_SELECTED, notificationString);
    }
   
   
    /** Returns a list of server names. */
    public Vector getServerNames()
    {
  Vector v = new Vector();
  for (Enumeration e = this.serverNameToListenerMap.keys();
            e.hasMoreElements();) {
      v.addElement(e.nextElement());
  }
  return v;
    }

    /* -------------------------------------------------------------------------
    ** add/remove notification listeners
    */
   
    /** add a notificationlistsner for server changes. */
    public void addNotificationListener(NotificationListener nl)
    {
  listeners.addElement(nl);
  this.changed(SERVER_LISTENER_ADDED, ""); // NOI18N
    }
   
    /** removes a notificationlistsner for server changes. */
    public void removeNotificationListener(NotificationListener nl)
    {
  this.listeners.removeElement(nl);
  this.changed(SERVER_LISTENER_REMOVED, ""); // NOI18N
    }
   
    /** Force an update of listeners.*/
    protected void changed()
    {
  Vector listenersClone = null;
  synchronized (listeners) {
      listenersClone = (Vector)listeners.clone();
  }
  for (Enumeration e = listenersClone.elements(); e.hasMoreElements();) {
      NotificationListener nl = (NotificationListener) e.nextElement();
      nl.notification(new NotificationEvent(this, NOTIFICATION_TYPE));
  }
    }
   
    protected void changed(String type, String name)
    {
  Vector listenersClone = null;
  synchronized (listeners) {
      listenersClone = (Vector)listeners.clone();
  }
  NotificationEvent event = new NotificationEvent(this, type,
            SERVER_PROPERTY, name);
  for (Enumeration e = listenersClone.elements(); e.hasMoreElements();) {
      NotificationListener nl = (NotificationListener) e.nextElement();
      nl.notification(event);
  }
 
    }

    /* -------------------------------------------------------------------------
    ** support fo application deployment
    */

   /**
    * Creates a Session object for listening to and managing deployment
    * progress reports.
    */
    public DeploymentSession createDeploymentSession(String serverName)
        throws Exception
    {
  try {
      DeploymentSession ds = new DeploymentSessionImpl();
      PortableRemoteObject.exportObject(ds);
      Tie servantsTie = javax.rmi.CORBA.Util.getTie(ds);
      servantsTie.orb(ORBManager.getORB());
      return ds;
  } catch (Throwable t) {
      throw new ServerException(localStrings.getLocalString(
    "enterprise.tools.deployment.main.couldnotgetorbforserver",
    "Couldn't get orb for ({0}) {1}",
                new Object[] {"createDeploymentSession",serverName})); // NOI18N
  }
    }
   
    private ServerListener createServerListener(String serverName)
        throws Exception
    {
  try {
      ServerListener listener = new ServerListener(this);
      PortableRemoteObject.exportObject(listener);
      Tie servantsTie = javax.rmi.CORBA.Util.getTie(listener);
      servantsTie.orb(ORBManager.getORB());
      return listener;
  } catch (Throwable t) {
      throw new ServerException(localStrings.getLocalString(
    "enterprise.tools.deployment.main.couldnotgetorbforserver",
    "Couldn't get orb for ({0}) {1}",
    new Object[] {"createCallBack", serverName})); // NOI18N
  }
   
   
    }
   
    public boolean isInstalled(String applicationName, String serverName)
  throws ServerException
    {
  JarInstaller installer = this.getJarInstaller(serverName);
  if (installer != null) {
      try {
    Vector applicationNames = installer.getApplicationNames();
    for (int i = 0; i < applicationNames.size(); i++) {
        if (applicationName.equals(applicationNames.elementAt(i))) {
      return true;
        }
    }
      } catch (Throwable t) {
    throw new ServerException(localStrings.getLocalString(
     "enterprise.tools.deployment.main.couldnotapplicationlistfromserver",
        "Couldn't get application list from {0}",
        new Object[] {serverName}));
      }
  }
  return false;
    }
   
    /**
     * Return a vector of application names.
     */

     public Vector getApplicationNamesForServer(String serverName)
         throws ServerException
     {
  Vector v = null;
  if (serverName == null) {
      return v;
  }
  JarInstaller installer = this.getJarInstaller(serverName);
  if (installer != null) {
      try {
    v = installer.getApplicationNames();
      } catch (RemoteException re) {
    throw new ServerException(localStrings.getLocalString(  
     "enterprise.tools.deployment.main.errorgettingappnamefromserverwithreason",
        "Error obtaining application names from {0} \n reason {1}",
                    new Object[] {serverName,re.getMessage()}));
      }
  }
  return v;
     }

     public Vector getApplicationNames()
         throws ServerException
     {
        return this.getApplicationNamesForServer(getCurrentServer());
     }
   
    /**
     * Return a vector of connector names.
     */

    public Vector getConnectorNamesForServer(String serverName)
  throws ServerException
    {
  Vector v = null;
  if (serverName != null) {
      JarInstaller installer = this.getJarInstaller(serverName);
      if (installer != null) {
          try {
        v = new Vector();
            ConnectorInfo ci = installer.listConnectors();
            for (int i = 0; i < ci.connectors.length; i++) {
          v.add(ci.connectors[i].toString());
                    }
        } catch (Exception re) {
        throw new ServerException(
      localStrings.getLocalString(  
     "enterprise.tools.deployment.main.errorgettingappnamefromserverwithreason",
        "Error obtaining application names from {0} \n reason {1}",
                    new Object[] { serverName, re.toString() }));
        }
      }
  }
  return v;
    }

    public Vector getConnectorNames()
  throws ServerException
    {
        return this.getConnectorNamesForServer(getCurrentServer());
    }
   
    /**
     * Return a vector of connection-factory names.
     */

    public Vector getConnectionFactoriesForServer(String serverName)
  throws ServerException
    {
  Vector v = null;
  if (serverName != null) {
      JarInstaller installer = this.getJarInstaller(serverName);
      if (installer != null) {
          try {
        v = new Vector();
            ConnectorInfo ci = installer.listConnectors();
            for (int i = 0; i < ci.connectionFactories.length; i++) {
          v.add(ci.connectionFactories[i].toString());
                    }
        } catch (Exception re) {
        throw new ServerException(localStrings.getLocalString(  
     "enterprise.tools.deployment.main.errorgettingappnamefromserverwithreason",
        "Error obtaining application names from {0} \n reason {1}",
                    new Object[] { serverName, re.toString() }));
        }
      }
  }
  return v;
    }

    public Vector getConnectionFactories()
         throws ServerException
    {
        return this.getConnectionFactoriesForServer(getCurrentServer());
    }

    /**
     * Return a set of EnvironmentProperties that represents
     * the configuration properties of a connection factory
     * @param AppName Name of application (can be null if the adapter
     * is deployed standalone)
     * @param connectorName Name of resource adapter
     */
    public Set getConnectionFactoryPropertyTemplate(String appName,
                                                    String connectorName)
        throws RemoteException, PoolingException, ServerException {

        String serverName = getCurrentServer();
        JarInstaller installer = this.getJarInstaller(serverName);
        return installer.getConnectionFactoryPropertyTemplate
            (appName, connectorName);
    }



    public void addConnectionFactory(String appName,
                                     String connectorName,
                                     String jndiName,
                                     String xaRecoveryUser,
                                     String xaRecoveryPassword,
                                     Properties props)
        throws RemoteException, PoolingException, ServerException {

        String serverName = getCurrentServer();
        JarInstaller installer = this.getJarInstaller(serverName);
        installer.addConnectionFactory(appName, connectorName,
                                       jndiName, xaRecoveryUser,
                                       xaRecoveryPassword, props);
    }

    public void removeConnectionFactory(String jndiName)
        throws RemoteException, PoolingException, ServerException {

        String serverName = getCurrentServer();
        JarInstaller installer = this.getJarInstaller(serverName);
        installer.removeConnectionFactory(jndiName);
    }

    public Set listConnectorResources()
        throws RemoteException, ServerException {
        String serverName = getCurrentServer();
        JarInstaller installer = this.getJarInstaller(serverName);
        Set res = installer.listConnectorResources();
        return res;
    }

    /**
     * Return a server by name. return null if there is no server of that
     * name.
     */
    public JarInstaller getServerForName(String serverName)
  throws ServerException
    {
  return this.getJarInstaller(serverName);
    }

    private JarInstaller getJarInstaller(String serverName)
  throws ServerException
    {
  try {
      if ( serverName.equalsIgnoreCase("local") ) // NOI18N
    serverName = "localhost"; // NOI18N

            String initialPort = System.getProperty(OMG_ORB_INIT_PORT_PROPERTY);
            if (initialPort == null)
                initialPort = String.valueOf(ORBManager.getORBInitialPort());

            String corbaName = "corbaname:iiop:" + serverName + ":" + // NOI18N
                initialPort + "#" + JarInstaller.JNDI_NAME; // NOI18N

            /* IASRI 4691307 commented out by Anissa.
             * The following code throws exception from the ORBManager and since we don't need any server
             * connection for AT, we will not perform this step.
             *
            Object objref  = getIC().lookup(corbaName);
            Object o = PortableRemoteObject.narrow(objref, JarInstaller.class);
      JarInstaller installer = (JarInstaller) o;
      return installer;
            * end of IASRI 4691307
             */
           
      throw new ServerException(""); //NOI18N
           
  } catch (Throwable t) {
      String msg = localStrings.getLocalString(
    "enterprise.tools.deployment.main.couldnotconnecttoserver",
                "Couldn''t connect to {0}",
    new Object[] { serverName });
      //System.err.println(msg);  // IASRI 4691307
      //UIUtils.printException(msg, t);
      throw new ServerException(msg)
  }
    }
   
    private Context getIC()
    {
  if ( initialContext == null ) {
      Hashtable env = new Hashtable();
      env.put("java.naming.corba.orb", ORBManager.getORB()); // NOI18N
      try {
    initialContext = new InitialContext(env);
      } catch ( Exception ex ) {
    ex.printStackTrace();
      }
  }
  return initialContext;
    }

    /** Return information about the database under the given server.*/
    public DBInfo getDBInfo(String serverName)
  throws ServerException
    {
  try {
      if ( serverName.equalsIgnoreCase("local") ) // NOI18N
    serverName = "localhost"; // NOI18N

            String initialPort = System.getProperty(OMG_ORB_INIT_PORT_PROPERTY);
            if (initialPort == null)
                initialPort = String.valueOf(ORBManager.getORBInitialPort());
           
      String corbaName = "corbaname:iiop:" + serverName + ":" + // NOI18N
                initialPort + "#" + DBInfo.JNDI_NAME; // NOI18N

            Object objref  = getIC().lookup(corbaName);
            Object o = PortableRemoteObject.narrow(objref, DBInfo.class);
      DBInfo info = (DBInfo) o;
      return info;
  } catch (Throwable t) {
      throw new ServerException(localStrings.getLocalString(
    "enterprise.tools.deployment.main.couldnotgetdbinfofromserver",
    "Could not get db info from the J2EE server {0}",
    new Object[] {serverName}))
  }
   
    }
   
    /** Reconnect to all the servers I knew about in the last session.*/
    public Hashtable restoreFromUserHome()
  throws IOException
    {
  Hashtable badServerNamesToExceptions = new Hashtable();
  File serversFile = new File(preferencesDirectory, SERVERS_FILENAME);
  if (serversFile.exists()) {
      FileInputStream fis = new FileInputStream(serversFile);
      Properties servers = new Properties();
      servers.load(fis)
      fis.close();
      for (Enumeration e = servers.propertyNames();
    e.hasMoreElements();) {
    String serverName = (String) e.nextElement();
    try {
        this.addServer(serverName)
    } catch (Throwable ex) {
        badServerNamesToExceptions.put(badServerNamesToExceptions,
      ex);
    }
      }
  }
  return badServerNamesToExceptions;
    }

    /** Save my current state to my directory.*/
    public void saveToUserHome()
  throws IOException
    {
  File serversFile = new File(preferencesDirectory, SERVERS_FILENAME)
  FileOutputStream fos = new FileOutputStream(serversFile);
  Properties serversP = new Properties();
  for (Enumeration e = this.getServerNames().elements();
      e.hasMoreElements();) {
      String nextServer = (String) e.nextElement();
      serversP.put(nextServer, nextServer);
  }
  serversP.store(fos, "J2EE Servers"); // NOI18N
        if( fos != null ) {
            fos.close();
        }
    }
   
    /** My pretty format. */
    private String printList()
    {
  String s = "Server Manager "; // NOI18N
  for (Enumeration e = this.getServerNames().elements();
      e.hasMoreElements();) {
      s = s + "\n\t" + e.nextElement(); // NOI18N
  }
  return s;
    }

    /** My pretty format as a STring.*/
    public String toString()
    {
  return "ServerManager"; // NOI18N
    }
   
}
TOP

Related Classes of com.sun.enterprise.tools.deployment.main.ServerManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.