org.glassfish.appclient.client.acc.Main Maven / Gradle / Ivy
Show all versions of payara-embedded-all Show documentation
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. 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_1_1.html
* or packager/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 packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [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 org.glassfish.appclient.client.acc;
//import com.sun.appserv.naming.S1ASCtxFactory;
//import com.sun.enterprise.appclient.AppContainer;
//import com.sun.enterprise.appclient.HttpAuthenticator;
//import com.sun.enterprise.appclient.jws.TemplateCache;
//import com.sun.enterprise.appclient.jws.Util;
//import com.sun.enterprise.appclient.jws.boot.ClassPathManager;
//import com.sun.enterprise.config.clientbeans.CertDb;
//import com.sun.enterprise.config.clientbeans.ClientBeansFactory;
//import com.sun.enterprise.config.clientbeans.ClientContainer;
//import com.sun.enterprise.config.clientbeans.ClientCredential;
//import com.sun.enterprise.config.clientbeans.ElementProperty;
//import com.sun.enterprise.config.clientbeans.Security;
//import com.sun.enterprise.config.clientbeans.Ssl;
//import com.sun.enterprise.config.clientbeans.TargetServer;
//import com.sun.enterprise.config.ConfigContext;
//import com.sun.enterprise.config.ConfigException;
//import com.sun.enterprise.config.ConfigFactory;
//import com.sun.enterprise.connectors.ActiveResourceAdapter;
//import com.sun.enterprise.connectors.ConnectorRegistry;
//import com.sun.enterprise.connectors.ConnectorRuntime;
//import com.sun.enterprise.deployment.*;
//import com.sun.enterprise.deployment.archivist.AppClientArchivist;
//import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
//import com.sun.enterprise.deployment.archivist.Archivist;
//import com.sun.enterprise.deployment.archivist.ArchivistFactory;
//import com.sun.enterprise.deployment.deploy.shared.AbstractArchive;
//import com.sun.enterprise.deployment.deploy.shared.Archive;
//import com.sun.enterprise.deployment.deploy.shared.ArchiveFactory;
//import com.sun.enterprise.deployment.deploy.shared.FileArchive;
//import com.sun.enterprise.deployment.deploy.shared.InputJarArchive;
//import com.sun.enterprise.deployment.interfaces.SecurityRoleMapperFactory;
//import com.sun.enterprise.deployment.interfaces.SecurityRoleMapperFactoryMgr;
//import com.sun.enterprise.util.SystemPropertyConstants;
//import com.sun.enterprise.webservice.ClientPipeCloser;
//import com.sun.enterprise.InjectionManager;
//import com.sun.enterprise.J2EESecurityManager;
//import com.sun.enterprise.loader.ASURLClassLoader;
//import com.sun.enterprise.loader.InstrumentableClassLoader;
//import com.sun.enterprise.naming.ProviderManager;
//import com.sun.enterprise.security.GUIErrorDialog;
//import com.sun.enterprise.security.SSLUtils;
//import com.sun.enterprise.server.logging.ACCLogManager;
//import com.sun.enterprise.Switch;
//import com.sun.enterprise.util.FileUtil;
//import com.sun.enterprise.util.i18n.StringManager;
//import com.sun.enterprise.util.JarClassLoader;
//import com.sun.enterprise.util.ORBManager;
//import com.sun.enterprise.util.shared.ArchivistUtils;
//import com.sun.enterprise.util.Utility;
//import com.sun.logging.LogDomains;
//import com.sun.web.server.HttpsURLStreamHandlerFactory;
//import java.awt.EventQueue;
//import java.awt.Toolkit;
//
//import java.io.*;
//import java.lang.reflect.InvocationTargetException;
//import java.net.*;
//import java.text.MessageFormat;
//import java.util.ArrayList;
//import java.util.Iterator;
//import java.util.Set;
//import java.util.concurrent.atomic.AtomicInteger;
//import java.util.jar.JarFile;
//import java.util.logging.Handler;
//import java.util.logging.Level;
//import java.util.logging.LogRecord;
//import java.util.logging.Logger;
//import java.util.logging.LogManager;
//import java.util.Properties;
//import java.util.Vector;
//import java.util.logging.MemoryHandler;
//import java.util.logging.SimpleFormatter;
//import javax.enterprise.deploy.shared.ModuleType;
//import javax.naming.InitialContext;
//
//import javax.security.auth.message.config.AuthConfigFactory;
//import com.sun.enterprise.security.jmac.config.GFAuthConfigFactory;
//import com.sun.enterprise.deployment.ServiceReferenceDescriptor;
//import com.sun.enterprise.security.UsernamePasswordStore;
//import javax.swing.SwingUtilities;
/**
* This is the main program invoked from the command line.
*
* It processes the command line arguments to prepare the Map of options, then
* passes the Map to an instance of the embedded ACC.
*/
public class Main {
private static final String CLIENT = "-client";
private static final String NAME = "-name";
private static final String MAIN_CLASS = "-mainclass";
private static final String TEXT_AUTH = "-textauth";
private static final String XML_PATH = "-xml";
private static final String ACC_CONFIG_XML = "-configxml";
private static final String DEFAULT_CLIENT_CONTAINER_XML = "sun-acc.xml";
// duplicated in com.sun.enterprise.jauth.ConfigXMLParser
private static final String SUNACC_XML_URL = "sun-acc.xml.url";
private static final String NO_APP_INVOKE = "-noappinvoke";
//Added for allow user to pass user name and password through command line.
private static final String USER = "-user";
private static final String PASSWORD = "-password";
private static final String PASSWORD_FILE = "-passwordfile";
private static final String LOGIN_NAME = "j2eelogin.name";
private static final String LOGIN_PASSWORD = "j2eelogin.password";
private static final String DASH = "-";
private static final String lineSep = System.getProperty("line.separator");
// /**
// * Property names used on the server to send these values to a Java Web Start client
// * and by the ACC when running under Java Web Start to retrieve them
// */
// public static final String APPCLIENT_IIOP_DEFAULTHOST_PROPERTYNAME = "com.sun.aas.jws.iiop.defaultHost";
// public static final String APPCLIENT_IIOP_DEFAULTPORT_PROPERTYNAME = "com.sun.aas.jws.iiop.defaultPort";
// public static final String APPCLIENT_IIOP_FAILOVER_ENDPOINTS_PROPERTYNAME = "com.sun.aas.jws.iiop.failover.endpoints";
// public static final String APPCLIENT_PROBE_CLASSNAME_PROPERTYNAME = "com.sun.aas.jws.probeClassName";
//
// /** Prop name for keeping temporary files */
// public static final String APPCLIENT_RETAIN_TEMP_FILES_PROPERTYNAME = "com.sun.aas.jws.retainTempFiles";
//
// /** property name used to indicate that Java Web Start is active */
// public static final String APPCLIENT_ISJWS_PROPERTYNAME = "com.sun.aas.jws.isJWS";
//
// /** property name used to indicate the Java Web Start download host name */
// public static final String APPCLIENT_DOWNLOAD_HOST_PROPERTYNAME = "com.sun.aas.jws.download.host";
// /** Prop used when running under Java Web Start to point to a temporarily-created default file.
// *This property appears in the template for the default sun-acc.xml content. Logic below
// *assigns a value to it and then uses it to substitute in the template to create the
// *actual content. (This is not a property set in the environment and then retrieved by Main.)
// */
// public static final String SUN_ACC_SECURITY_CONFIG_PROPERTY = "security.config.file";
//
// /** Used for constructing the name of the temp file that will hold the login conf. content */
// private static final String LOGIN_CONF_FILE_PREFIX = "login";
// private static final String LOGIN_CONF_FILE_SUFFIX = ".conf";
//
// /** The system property to be set that is later read by jaas */
// private static final String LOGIN_CONF_PROPERTY_NAME = "java.security.auth.login.config";
//
// /** Names of templates for default config for Java Web Start */
// private static final String DEFAULT_TEMPLATE_PREFIX = "jws/templates/";
// private static final String SUN_ACC_DEFAULT_TEMPLATE = DEFAULT_TEMPLATE_PREFIX + "default-sun-accTemplate.xml";
// private static final String WSS_CLIENT_CONFIG_TEMPLATE = DEFAULT_TEMPLATE_PREFIX + "default-wss-client-configTemplate.xml";
// private static final String LOGIN_CONF_TEMPLATE = DEFAULT_TEMPLATE_PREFIX + "appclientlogin.conf";
//
// /** Naming for temporary files created under Java Web Start */
// private static final String WSS_CLIENT_CONFIG_PREFIX = "wsscc";
// private static final String WSS_CLIENT_CONFIG_SUFFIX = ".xml";
// private static final String SUN_ACC_PREFIX = "sunacc";
// private static final String SUN_ACC_SUFFIX = ".xml";
//
// /** Paths to persistence JARs added to the classpath for the class loader created by the ACC */
// private static final String [] LOCAL_LAUNCH_PERSISTENCE_JAR_PATHS = new String[] {
// System.getProperty(SystemPropertyConstants.DERBY_ROOT_PROPERTY) + File.separator + "lib" + File.separator + "derbyclient.jar",
// System.getProperty(SystemPropertyConstants.INSTALL_ROOT_PROPERTY) + File.separator + "lib" + File.separator + "toplink-essentials.jar",
// System.getProperty(SystemPropertyConstants.INSTALL_ROOT_PROPERTY) + File.separator + "lib" + File.separator + "dbschema.jar"};
//
// private static final String ORB_INITIAL_HOST_PROPERTYNAME = "org.omg.CORBA.ORBInitialHost";
// private static final String ORB_INITIAL_PORT_PROPERTYNAME = "org.omg.CORBA.ORBInitialPort";
//
// protected static Logger _logger;
//
// protected final boolean debug = false;
// protected StringManager localStrings =
// StringManager.getManager(Main.class);
// protected boolean guiAuth = false; // unless the user sets the auth.gui prop and does not use -textauth
// protected boolean runClient=true;
//
// protected String host;
//
// protected String port;
//
// /** Saved arguments so they are accessible from the AWT thread if needed */
// protected String [] args;
//
// /** Records whether ACC is currently running under Java Web Start */
// protected boolean isJWS;
//
// /** Records whether temp config files created while running under Java Web Start should be retained */
// protected boolean retainTempFiles = false;
//
// protected String clientJar = null;
// protected String displayName = null;
// protected String mainClass = null;
// protected String xmlPath = null;
// protected String accConfigXml = null;
// protected String jwsACCConfigXml = null;
// protected Vector appArgs = new Vector();
// protected String classFileFromCommandLine = null;
// protected boolean useTextAuth = false;
//
// private static boolean lb_enabled = false;
//
// /**
// * Indicates whether ORB load balancing is turned on.
// *
// * Should not be invoked until after setTargetServerProperties has been
// * invoked. This method is intended for use by ORB initializers, which in
// * turn are run during the instantiation of the InitialContext. The
// * InitialContext is created (in the constructor for this class) after
// * setTargetServerProperties has been run, so this precondition should
// * be met.
// * @return true if load balancing was specified or implied, false otherwise
// */
// public static boolean isLoadBalancingEnabled() {
// return lb_enabled;
// }
//
// public Main(String[] args) {
// /*
// *The appclient script triggers this constructor, so find the persistence
// *JARs in the local directories. During a Java Web Start launch the
// *other constructor is invoked with the already-located JAR URLs.
// */
// this(args, locateLocalPersistenceJARs());
// }
//
// public Main(String[] args, URL[] persistenceJarURLs) {
// /*
// *Temporarily use a cheap memory logger to hold any messages created
// *until we can configure the real logger using the configuration settings.
// */
// BufferedLogger tempLogger = prepareBufferedLogging();
//
// /*
// *Assign the temp logger to _logger so methods that need to log don't
// *need to know if they are doing so before the real logger is set up.
// */
// _logger = tempLogger;
//
// prepareJWSSettings();
//
// try {
// /*
// *Handle any command line arguments intended for the ACC (as opposed to
// *the client itself) and save the returned args intended for the client.
// */
// appArgs = processCommandLine(args);
//
// /*
// *Find the class name to be run if the user has asked to run a .class
// *file as the client.
// */
// String classNameForClassFile = determineClassNameForClassFileLaunch(clientJar, isJWS, mainClass, classFileFromCommandLine);
//
// /*
// *Choose and validate the XML configuration file to use, which depends on the
// *-xml and -configxml command line arguments as well as whether this
// *is a Java Web Start launch or not.
// */
// String xmlPathToUse = chooseConfigFile(xmlPath, accConfigXml, isJWS);
// validateXMLFile(xmlPathToUse);
//
// /*
// *The configuration file just chosen may assign logging settings.
// *Prepare logger using those settings and also flush any records sent to the
// *temp logger to the new, real one.
// */
// _logger = prepareLogging(tempLogger, xmlPathToUse, isJWS);
//
// /*
// *Locate the app client: in a user-specified jar or directory,
// *an implied directory (i.e., user is running a .class file), or the
// *Java Web Start downloaded jar file.
// */
// File appClientJarOrDir = locateAppclientJarOrDir(clientJar, classNameForClassFile, isJWS);
//
// /*
// *Set up the default login config for a Java Web Start launch.
// */
// prepareJWSLoginConfig();
//
// Utility.checkJVMVersion();
// prepareSecurity();
//
// Throwable terminatingException = null;
// AppClientInfo appClientInfo = null;
//
// ClassLoader jcl = null;
//
// Switch.getSwitch().setProviderManager(ProviderManager.getProviderManager());
// /*
// * Set the container type before initializing the ORB so that ORB
// * initializers can correctly identify which container type this is.
// */
// Switch.getSwitch().setContainerType(Switch.APPCLIENT_CONTAINER);
//
// // added for ClientContainer.xml initialization
// // The returned properties will be null if load balancing is on or
// // non-null and containing the initial host and port properties if
// // load balancing is off.
// //
// // Note that setTargetServerProperties must be invoked before the
// // the initial context is instantiated.
// Properties iiopProperties = setTargetServerProperties(xmlPathToUse);
//
// int exitCode = 0; // 0 for success
// prepareURLStreamHandling();
//
// /*
// *The "info" object for the app client collects together common behavior
// *regardless of how the app client was specified (as an archive file,
// *as a directory, or as a .class file) and - if not a .class file -
// *what type of module (an ear or an app client jar).
// *
// *Creating this info object also may extract the ear or jar into
// *a temporary directory, for example for use by persistence unit
// *handling, and may also prepare the persistence unit handling if
// *that is required.
// */
// // log the endpoint address(es) to be used, per Jagadesh's request
// _logger.log(Level.INFO, "acc.endpoints",
// lb_enabled ? System.getProperty(S1ASCtxFactory.IIOP_ENDPOINTS_PROPERTY) :
// iiopProperties.getProperty(ORB_INITIAL_HOST_PROPERTYNAME) + ":" +
// iiopProperties.getProperty(ORB_INITIAL_PORT_PROPERTYNAME));
//
// //ic creation for enabling the ORB intialization with the
// //right host:port values (bug 6397533). The InitialContext must
// //not be instantiated before setTargetServerProperties has run.
// InitialContext ic = AppContainer.initializeNaming(iiopProperties);
//
// appClientInfo = AppClientInfoFactory.buildAppClientInfo(isJWS, _logger, appClientJarOrDir, mainClass, displayName, classFileFromCommandLine, persistenceJarURLs);
//
// ApplicationClientDescriptor appDesc = appClientInfo.getAppClient();
//
// final AppContainer container = createAppContainer(appDesc, guiAuth);
// Cleanup cleanup = prepareShutdownCleanup(container, appClientInfo);
//
// // Set the authenticator which is called back when a
// // protected web resource is requested and authentication data is
// // needed.
// Authenticator.setDefault(new HttpAuthenticator(container));
//
// /*
// *The container needs to use the new classloader to locate any
// *user-specified security callback handler.
// */
// jcl = appClientInfo.getClassLoader();
// String appMainClass = container.preInvoke(ic, jcl);
// /*
// *If the user explicitly indicated the main class to be run, use
// *that value, not the value from the manifest.
// */
// if (mainClass != null) {
// appMainClass = mainClass;
// }
//
// /*
// *The new classloader must be set up as the current context class
// *loader for injection to work. During a Java Web Start launch
// *the class loader in the event dispatcher thread must also be
// *changed.
// */
// Thread.currentThread().setContextClassLoader(jcl);
// if (isJWS) {
// setClassLoaderForEDT(jcl);
// }
//
// /*
// *Load the main class of the app client.
// */
// Class cl = loadMainClientClass(jcl, appMainClass);
//
// //This is required for us to enable interrupt jaxws service
// //creation calls
// System.setProperty("javax.xml.ws.spi.Provider",
// "com.sun.enterprise.webservice.spi.ProviderImpl");
//
// // Inject the application client's injectable resources. This
// // must be done after java:comp/env is initialized but before
// // the application client's main class is invoked. Also make
// // sure the injection mgr will clean up during shutdown.
// InjectionManager injMgr = Switch.getSwitch().getInjectionManager();
// cleanup.setInjectionManager(injMgr, cl, appDesc);
//
// injMgr.injectClass(cl, appDesc);
//
// /*
// Try to locate a script with the same name as the main class,
// but with a file type matching the file types handled by one of the
// scripting engines currently available.
// */
// ScriptingSupport scriptingSupport = new ScriptingSupport(jcl, _logger);
// cleanup.setScriptingSupport(scriptingSupport);
// boolean runMainClass = true;
//
// if(runClient) {
// /*
// Prefer a script instead of the main class if a script is present.
// */
// runMainClass = ! scriptingSupport.startScript(appMainClass, appArgs);
//
// /*
// Do not close the stream yet because the scripting
// engine runs on the Swing event dispatcher thread and
// may not be done reading it yet.
// */
//
// if (runMainClass) {
// /*
// Run the main class if there is no script of the expected
// name or if the attempt to start the script failed.
// */
// String[] applicationArgs = appArgs.toArray(new String[appArgs.size()]);
// Utility.invokeApplicationMain(cl, applicationArgs);
// _logger.info("Application main() returned; GUI elements may be continuing to run");
// }
// }
//
//
// // System.exit is not called if application main returned
// // without error. Registered shutdown hook will perform
// // container cleanup
// } catch (java.lang.reflect.InvocationTargetException ite) {
// Throwable tt = ite.getTargetException();
// _logger.log(Level.WARNING, "acc.app_exception", tt);
// throw new RuntimeException(ite);
// } catch (UserError ue) {
// ue.displayAndExit();
// } catch (Throwable t) {
// if (t instanceof javax.security.auth.login.FailedLoginException){
//
// _logger.info("acc.login_error");
// boolean isGui =
// Boolean.valueOf
// (System.getProperty ("auth.gui","true")).booleanValue();
// String errorMessage =
// localStrings.getString
// ("main.exception.loginError",
// "Incorrect login and/or password");
//
// if (isGui) {
// GUIErrorDialog ged = new GUIErrorDialog (errorMessage);
// ged.show ();
// }
// }
//
// _logger.log(Level.WARNING, "acc.app_exception", t);
//
// if (t instanceof javax.naming.NamingException) {
// _logger.log(Level.WARNING, "acc.naming_exception_received");
// }
// throw new RuntimeException(t);
// } finally {
// shutDownSystemAdapters();
// }
// }
//
// /**
// *Sets the class loader for the event dispatcher thread in case of a
// *Java Web Start launch.
// */
// private void setClassLoaderForEDT(final ClassLoader loader)
// throws InterruptedException, InvocationTargetException {
// SwingUtilities.invokeAndWait(new Runnable() {
// private ClassLoader theCL;
// public void run() {
// Thread.currentThread().setContextClassLoader(loader);
// Toolkit tk = Toolkit.getDefaultToolkit();
// EventQueue eq = tk.getSystemEventQueue();
// eq.push(new EventQueue());
// }
// }
// );
// }
//
// private static URL[] locateLocalPersistenceJARs() {
// try {
// URL[] localPersistenceJARURLs = new URL[LOCAL_LAUNCH_PERSISTENCE_JAR_PATHS.length];
// int slot = 0;
// for (String jarPath : LOCAL_LAUNCH_PERSISTENCE_JAR_PATHS) {
// File jarFile = new File(jarPath);
// localPersistenceJARURLs[slot++] = jarFile.toURI().toURL();
// }
// return localPersistenceJARURLs;
// } catch (MalformedURLException mue) {
// /*
// *This is not a recoverable error, so to minimize changes convert it
// *to an unchecked runtime exception.
// */
// throw new RuntimeException(mue);
// }
// }
//
// /**
// *Chooses behavior of a Java Web Start launch based on property settings.
// *
// *Sets the instance variables isJWS and retainTempFiles as side-effects
// */
// private void prepareJWSSettings() {
// isJWS = Boolean.getBoolean(APPCLIENT_ISJWS_PROPERTYNAME);
// retainTempFiles = Boolean.getBoolean(APPCLIENT_RETAIN_TEMP_FILES_PROPERTYNAME);
// }
//
// /**
// *Set up the security manager and keystores/truststores.
// */
// private void prepareSecurity() {
// /*
// *If -textauth was specified, no need to look for the auth.gui
// *setting since -textauth takes precedence.
// */
// if ( ! useTextAuth) {
// guiAuth = Boolean.valueOf
// (System.getProperty("auth.gui", "true")).booleanValue();
// }
//
// /* security init */
// SecurityManager secMgr = System.getSecurityManager();
// if (!isJWS && secMgr != null &&
// !(J2EESecurityManager.class.equals(secMgr.getClass()))) {
// J2EESecurityManager mgr = new J2EESecurityManager();
// System.setSecurityManager(mgr);
// }
// if (_logger.isLoggable(Level.INFO)) {
// if (secMgr != null) {
// _logger.info("acc.secmgron");
// } else {
// _logger.info("acc.secmgroff");
// }
// }
//
// try{
// /* setup keystores.
// * This is required, for appclients that want to use SSL, especially
// * HttpsURLConnection to perform Https.
// */
// SSLUtils.initStoresAtStartup();
// } catch (Exception e){
// /* This is not necessarily an error. This will arise
// * if the user has not specified keystore/truststore properties.
// * and does not want to use SSL.
// */
// if(_logger.isLoggable(Level.FINER)){
// // show the exact stack trace
// _logger.log(Level.FINER, "main.ssl_keystore_init_failed", e);
// } else{
// // just log it as a warning.
// _logger.log(Level.WARNING, "main.ssl_keystore_init_failed");
// }
// }
//
// try {
// /* setup jsr 196 factory
// * define default factory if it is not already defined
// */
// String defaultFactory = java.security.Security.getProperty
// (AuthConfigFactory.DEFAULT_FACTORY_SECURITY_PROPERTY);
// if (defaultFactory == null) {
// java.security.Security.setProperty
// (AuthConfigFactory.DEFAULT_FACTORY_SECURITY_PROPERTY,
// GFAuthConfigFactory.class.getName());
// }
//
// } catch (Exception e) {
// // XXX put string in catablog
// _logger.log(Level.WARNING, "main.jmac_default_factory");
// }
//
// }
//
// /**
// *Loads the app client's main class given its name and the loader to use.
// *@param jcl the class loader to use for loading the client's main class
// *@param clientMainClassName the name of the client's main class
// *@return the Class object for the client's main class
// *@throws RuntimeException (wraps the ClassNotFoundException) if the main class cannot be loaded
// */
// private Class loadMainClientClass(ClassLoader jcl, String clientMainClassName) throws UserError {
// Class result = null;
// try {
// result = jcl.loadClass(clientMainClassName);
// } catch (java.lang.ClassNotFoundException cnf) {
// String errorMessage = localStrings.getString
// ("appclient.mainclass.not.found", clientMainClassName);
// throw new UserError(errorMessage, cnf);
// }
// _logger.log(Level.INFO, "acc.load_app_class", clientMainClassName);
// return result;
// }
//
// /**
// *Creates the appropriate logger, using any settings in the config file.
// *
// *If any logging information has been buffered into the temporary memory-based
// *logger, flush it to the newly-created log.
// *@param xmlPathToUse config file path
// *@param isJWS indicates if this is a Java Web Start launch
// */
// private Logger prepareLogging(BufferedLogger tempLogger, String xmlPathToUse, boolean isJWS) {
// // make sure the default logger for ACCLogManager is set
// Logger result = LogDomains.getLogger(LogDomains.ACC_LOGGER);
//
// LogManager logMgr = LogManager.getLogManager();
// if (logMgr instanceof ACCLogManager) {
// ((ACCLogManager) logMgr).init(xmlPathToUse);
// }
//
// /*
// *Transfer any records from the temporary logger to the new one.
// */
// tempLogger.pushTo(result);
//
// return result;
// }
//
// /**
// *Processes any command-line arguments, setting up static variables for use
// *later in the processing.
// *
// *As side-effects, these variables may be assigned values:
// *
// *clientJar
// *displayName
// *mainClass
// *xmlPath
// *accConfigXml
// *guiAuth
// *runClient
// *classFileFromCommandLine
// *System property j2eelogin.name
// *System property j2eelogin.password
// *
// *@param args the command-line arguments passed to the ACC
// *@return arguments to be passed to the actual client (with ACC arguments removed)
// */
// private Vector processCommandLine(String[] args) throws UserError {
// Vector clientArgs = new Vector();
//
// AtomicInteger i = new AtomicInteger();
// String arg = null;
//
// // Parse command line arguments.
// if(args.length < 1) {
// usage();
// } else {
// while(i.get() < args.length) {
// arg = args[i.getAndIncrement()];
// if(arg.equals(CLIENT)) {
// clientJar = getRequiredCommandOptionValue(args, CLIENT, i, "appclient.clientWithoutValue");
// } else if (arg.equals(NAME)) {
// displayName = getRequiredCommandOptionValue(args, NAME, i, "appclient.nameWithoutValue");
// ensureAtMostOneOfNameAndMainClass();
// } else if(arg.equals(MAIN_CLASS)) {
// mainClass = getRequiredCommandOptionValue(args, MAIN_CLASS, i, "appclient.mainClassWithoutValue");
// ensureAtMostOneOfNameAndMainClass();
// } else if(arg.equals(XML_PATH) ) {
// xmlPath = getRequiredUniqueCommandOptionValue(args, XML_PATH, xmlPath, i, "appclient.xmlWithoutValue");
// } else if(arg.equals(ACC_CONFIG_XML) ) {
// accConfigXml = getRequiredUniqueCommandOptionValue(args, ACC_CONFIG_XML, accConfigXml, i, "appclient.accConfigXmlWithoutValue");
// } else if(arg.equals(TEXT_AUTH)) {
// // Overrides legacy auth.gui setting.
// useTextAuth = true;
// logOption(TEXT_AUTH);
// } else if(arg.equals(NO_APP_INVOKE)) {
// runClient = false;
// logOption(NO_APP_INVOKE);
// } else if(arg.equals(USER)) {
// String userNameValue = getRequiredCommandOptionValue(args, USER, i, "appclient.userWithoutValue");
// System.setProperty(LOGIN_NAME, userNameValue);
// } else if(arg.equals(PASSWORD)) {
// String passwordValue = getRequiredCommandOptionValue(args, PASSWORD, i, "appclient.passwordWithoutValue");
// System.setProperty(LOGIN_PASSWORD, passwordValue);
// } else if (arg.equals(PASSWORD_FILE)) {
// String passwordFileValue = getRequiredCommandOptionValue(args, PASSWORD_FILE, i, "appclient.passwordFileWithoutValue");
// try {
// System.setProperty(LOGIN_PASSWORD,
// loadPasswordFromFile(passwordFileValue));
// } catch(IOException ex) {
// throw new UserError(localStrings.getString("appclient.errorReadingFromPasswordFile", passwordFileValue), ex);
// }
// } else {
// clientArgs.add(arg);
// logArgument(arg);
// }
// }
//
//
// String uname = System.getProperty(LOGIN_NAME);
// String upass = System.getProperty(LOGIN_PASSWORD);
// if( uname != null || upass != null ) {
// UsernamePasswordStore.set(uname, upass);
// }
//
//
//
// /*If this is not a Java Web Start launch, the user may have asked
// *to execute a .class file by omitting the -client argument. In this
// *case the user either specifies the name only of the class to run
// *using -mainclass or omits -mainclass and specifies the path to
// *the .class file as the first command-line argument that would
// *otherwise be passed to the actual client. In this second
// *case, the first argument is removed from the list passed to the client.
// */
// if ((mainClass == null) && (clientJar == null) && ! isJWS) {
// /*
// *Make sure there is at least one argument ready to be passed
// *to the client before trying
// *to use the first one as the class file spec.
// */
// if (clientArgs.size() > 0) {
// classFileFromCommandLine = clientArgs.elementAt(0);
// clientArgs.removeElementAt(0);
// logClassFileArgument(classFileFromCommandLine);
// } else {
// usage();
// }
// }
// }
// logClientArgs(clientArgs);
// return clientArgs;
// }
//
// /**
// *Returns the next unused argument as a String value, so long as there is
// *a next argument and it does not begin with a dash which would indicate
// *the next argument.
// *@param position the mutable current position in the argument array
// *@param errorKey the message key for looking up the correct error if the
// *next argument cannot be used as a value
// */
// private String getRequiredCommandOptionValue(String [] args, String optionName, AtomicInteger position, String errorKey) throws UserError {
// String result = null;
// /*
// *Make sure there is at least one more argument and that it does not
// *start with a dash. Either of those cases means the user omitted
// *the required value.
// */
// if(position.get() < args.length && !args[position.get()].startsWith(DASH)) {
// result = args[position.getAndIncrement()];
// } else {
// throw new UserError(localStrings.getString(errorKey));
// }
// if (_logger.isLoggable(Level.FINE)) {
// _logger.fine(localStrings.getString("appclient.optionValueIs", optionName, result));
// }
// return result;
// }
//
// /**
// *Returns the next unused argument (if present and not prefixed with a dash)
// *as a string value as long as the current value of the argument expected
// *is not already set.
// *@param optionName the name of the option being processed
// *@param currentValue the current value of the argument
// *@param position the mutable current position in the argument array
// *@param errorKey the message key for looking up the correct error if the
// *next argument cannot be used as a value
// *@throws IllegalArgumentException
// */
// private String getRequiredUniqueCommandOptionValue(String [] args, String optionName, String currentValue, AtomicInteger position, String errorKey) throws UserError {
// if (currentValue != null) {
// throw new UserError(localStrings.getString("appclient.duplicateValue", optionName, currentValue));
// }
// return getRequiredCommandOptionValue(args, optionName, position, errorKey);
// }
// /**
// *Makes sure that at most one of the -name and -mainclass arguments
// *appeared on the command line.
// *@throws IllegalArgumentException if both appeared
// */
// private void ensureAtMostOneOfNameAndMainClass() throws UserError {
// if (mainClass != null && displayName != null) {
// throw new UserError(localStrings.getString("appclient.mainclassOrNameNotBoth"));
// }
// }
//
// /**
// *Reports that the specified option name has been processed from the command line.
// *@param optionName the String name of the option
// */
// private void logOption(String optionName) {
// if (_logger.isLoggable(Level.FINE)) {
// _logger.fine(localStrings.getString("appclient.valuelessOptionFound", optionName));
// }
// }
//
// private void logArgument(String arg) {
// if (_logger.isLoggable(Level.FINE)) {
// _logger.fine(localStrings.getString("appclient.argumentValueFound", arg));
// }
// }
//
// private void logClassFileArgument(String classFile) {
// if (_logger.isLoggable(Level.FINE)) {
// _logger.fine(localStrings.getString("appclient.classFileUsed", classFile));
// }
// }
//
// private void logClientArgs(Vector clientArgs) {
// if (_logger.isLoggable(Level.FINE)) {
// _logger.fine(localStrings.getString("appclient.clientArgs", clientArgs.toString()));
// }
// }
//
// /**
// *Decides what class name the user specified IF the user has asked to run
// *a .class file as the client.
// *
// *@param clientJar path to the client jar from the command line processing
// *@param isJWS indicates if the current execution was launched via Java Web Start technology
// *@param mainClass main class name as possibly specified on the command line
// *@param classFileFromCommandLine class file spec from the command line (if present)
// *@return class name to be run if the user has chosen a .class file; null otherwise
// */
// private String determineClassNameForClassFileLaunch(String clientJar, boolean isJWS, String mainClass, String classFileFromCommandLine) throws UserError {
// String result = null;
// boolean isFine = _logger.isLoggable(Level.FINE);
// if(clientJar == null && ! isJWS) {
// // ok, if the first parameter was the appclient class, let's check
// // for its existence.
// String value;
//
// /*
// *To run a .class file, the user omits the -client option and
// *specifies either -mainclass or provides
// *the class file path as an argument. In the second case the
// *value will have been captured as classFileFromCommandLine during
// *command line processing.
// */
// if (classFileFromCommandLine != null) {
// value = classFileFromCommandLine;
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.classNameFromArg", classFileFromCommandLine));
// }
// } else {
// value = mainClass;
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.classNameFromMainClass", mainClass));
// }
// }
// if (value.endsWith(".class")) {
// result = value.substring(0, value.length()-".class".length());
// } else {
// result = value;
// }
//
// String path = result.replace('.', File.separatorChar) + ".class";
// File file = new File(path);
// if (!file.isAbsolute()) {
// file = new File(System.getProperty("user.dir"), path);
// }
// /*
// *We have tried to identify the class file to use based on either
// *the -mainclass value (with -client omitted) or the value of the
// *first command-line argument. If we cannot find the class in the user's
// *home directory (and we already know this is not a JWS launch because
// *we are inside the "if") then the user has
// *not entered a valid command or has specified a class we cannot find.
// */
// if (!file.exists()) {
// throw new UserError(localStrings.getString("appclient.cannotFindClassFile", result, file.getAbsolutePath()));
// } else {
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.usingClassFile", file.getAbsolutePath()));
// }
// }
// }
// return result;
// }
//
// /**
// *Selects which config file to use, based on which are specified and whether
// *this is a Java Web Start launch.
// *@param xmlPath config file path as specified on the command line
// *@param accConfigXml fall-back config file containing defaults
// *@param isJWS indicates if this is a Java Web Start launch
// *@return the appropriate config file path
// */
// private String chooseConfigFile(String xmlPath, String accConfigXml, boolean isJWS) {
// String pathToUse = null;
// boolean isFine = _logger.isLoggable(Level.FINE);
//
// if (xmlPath != null) {
// pathToUse = xmlPath;
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.configFrom", XML_PATH, pathToUse));
// }
// } else if (accConfigXml != null ) {
// pathToUse = accConfigXml; //use AS_ACC_CONFIG
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.configFrom", ACC_CONFIG_XML, pathToUse));
// }
// } else if (isJWS) {
// /*
// *Neither -xml nor -configxml were present and this is a Java
// *Web Start invocation. Use
// *the alternate mechanism to create the default config.
// */
// try {
// String jwsACCConfigXml = prepareJWSConfig();
// if (jwsACCConfigXml != null) {
// pathToUse = jwsACCConfigXml;
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.configFromJWSTemplate"));
// }
// }
// } catch (Throwable thr) {
// throw new RuntimeException(localStrings.getString("appclient.errorPrepConfig"), thr);
// }
// }
// return pathToUse;
// }
//
// /**
// *Locates the jar or directory that contains the app client main class.
// *@param clientJar path to the client jar file (if specified)
// *@param className the main class name for the app client
// *@param isJWS indicates if this is a Java Web Start launch
// *
// *@return File object for the jar or directory containing the app client main class
// */
// private File locateAppclientJarOrDir(String clientJar, String className, boolean isJWS) throws ClassNotFoundException, URISyntaxException, UserError {
// File result = null;
// boolean isFine = _logger.isLoggable(Level.FINE);
// /*
// *For Java Web Start launches, locate the jar file implicitly.
// *Otherwise, if the user omitted the clientjar argument (and the
// *code has gotten this far) then the user must have used the
// *first argument as the name of the class in ${user.dir} to run. If
// *the user actually specified the clientjar argument, then use that
// *value as the file spec for the client jar.
// */
// if (isJWS) {
// /*
// *Java Web Start case.
// */
// result = findAppClientFileForJWSLaunch();
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.JWSAppClientFile", result.getAbsolutePath()));
// }
// } else if (clientJar==null) {
// /*
// *First-argument-as-class-name case
// */
// File userDir = new File(System.getProperty("user.dir"));
// File appClientClass = new File(userDir, className);
// result = appClientClass.getParentFile();
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.classFileAppClientFile", result.getAbsolutePath()));
// }
// } else {
// /*
// *Normal case - clientjar argument specified.
// */
// result = new File(clientJar);
// if (isFine) {
// _logger.fine(localStrings.getString("appclient.clientJarAppClientFile", result.getAbsolutePath()));
// }
// /*
// *Make sure the user-specified file - client JAR or .class - exists.
// */
// if ( ! result.exists() ) {
// UserError ue = UserError.formatUserError(
// localStrings.getString("appclient.cannotFindJarFile"),
// result.getAbsolutePath());
// throw ue;
// }
//
// }
// return result;
// }
//
// /**
// *Creates a class loader for the app client, using the jar or directory
// *which contains the main class.
// *@param jarOrDir the File object for the directory or jar file containing the main class
// *@return ClassLoader for use by the app client
// */
// private ClassLoader preparePreliminaryClassLoader(File jarOrDir) throws MalformedURLException {
// ClassLoader result = null;
// URL[] urls = new URL[1];
// urls[0] = jarOrDir.toURI().toURL();
// /*
// *Set the parent of the new class loader to the current loader.
// *The Java Web Start-managed class path is implemented in the
// *current loader, so it must remain on the loader stack.
// */
// ClassLoader currentCL = Thread.currentThread().getContextClassLoader();
// result = new URLClassLoader(urls, currentCL);
//// Thread.currentThread().setContextClassLoader(jcl);
// return result;
// }
//
// private AppContainer createAppContainer(ApplicationClientDescriptor appDesc, boolean guiAuth) {
// AppContainer result = new AppContainer(appDesc, guiAuth);
// if(result == null) {
// _logger.log(Level.WARNING, "acc.no_client_desc",
// (displayName == null) ? mainClass : displayName);
//
// System.exit(1);
// }
// return result;
// }
//
//
// /**
// *Adds a shutdown hook to make sure clean-up work runs at JVM exit.
// */
// private static Cleanup prepareShutdownCleanup(
// AppContainer container, AppClientInfo appClientInfo) {
// // Ensure cleanup is performed, even if
// // application client calls System.exit().
// Cleanup cleanup = new Cleanup();
// Runtime runtime = Runtime.getRuntime();
// runtime.addShutdownHook(cleanup);
// cleanup.setAppContainer(container);
// cleanup.setAppClientInfo(appClientInfo);
// return cleanup;
// }
//
// /**
// *Assigns the URL stream handler factory.
// */
// private static void prepareURLStreamHandling() {
// // Set the HTTPS URL stream handler.
// java.security.AccessController.doPrivileged(new
// java.security.PrivilegedAction() {
// public Object run() {
// URL.setURLStreamHandlerFactory(new
// HttpsURLStreamHandlerFactory());
// return null;
// }
// });
// }
//
// private Properties setTargetServerProperties(String clientXmlLocation)
// throws ConfigException {
//
// boolean isEndpointPropertySpecifiedByUser = false;
// String loadBalancingPolicy = null;
//
// Properties result = new Properties();
//
// StringBuilder completeEndpointList = new StringBuilder();
//
// //FIXME: may need to set the context in switch or generic context. but later
// try {
// if(clientXmlLocation == null || clientXmlLocation.equals("")) {
// clientXmlLocation = DEFAULT_CLIENT_CONTAINER_XML;
// }
//
// // set for com.sun.enterprise.security.jauth.ConfigXMLParser
// System.setProperty(SUNACC_XML_URL, clientXmlLocation);
// _logger.log(Level.INFO, "acc.using_xml_location", clientXmlLocation);
//
// ConfigContext ctx = ConfigFactory.createConfigContext(
// clientXmlLocation, true,
// false, false,
// ClientContainer.class,
// new ACCEntityResolver());
//
// ClientContainer cc = ClientBeansFactory.getClientBean(ctx);
//
// host = cc.getTargetServer(0).getAddress();
// port = cc.getTargetServer(0).getPort();
//
// //check for targetServerEndpoints
// TargetServer[] tServer = cc.getTargetServer();
// String targetServerEndpoints = null;
// for (int i = 0; i < tServer.length; i++) {
// if (targetServerEndpoints == null) {
// targetServerEndpoints = tServer[i].getAddress() +
// ":" + tServer[i].getPort();
// } else {
// targetServerEndpoints = targetServerEndpoints + "," +
// tServer[i].getAddress() +
// ":" + tServer[i].getPort();
// lb_enabled = true;
// }
// }
//
// setSSLData(cc);
//
// //FIXME: what do we do about realm
// ClientCredential cCrd = cc.getClientCredential();
// if(cCrd != null) {
// String uname = null;
// String upass = null;
//
// // if user entered user/password from command line,
// // it take percedence over the xml file. - y.l. 05/15/02
// if (System.getProperty(LOGIN_NAME) == null) {
// _logger.config("using login name from client container xml...");
// //System.setProperty(LOGIN_NAME, cCrd.getUserName());
// uname = cCrd.getUserName();
// }
// if (System.getProperty(LOGIN_PASSWORD) == null) {
// _logger.config("using password from client container xml...");
// //System.setProperty(LOGIN_PASSWORD, cCrd.getPassword());
// upass = cCrd.getPassword();
// }
// if( uname != null || upass != null ) {
// UsernamePasswordStore.set(uname, upass);
// }
// }
// String endpoints_property = null;
// // Check if client requires SSL to be used
// ElementProperty[] props = cc.getElementProperty();
// for ( int i=0; i | ] [-mainclass |-name ] [-xml ] [-textauth] [-user ] [-password |-passwordfile ] [app-args]");
// }
//
// private void usage() {
// System.out.println(getUsage());
// System.exit(1);
// }
//
// private void xmlMessage(String xmlFullName) throws UserError
// {
// UserError ue = new UserError(localStrings.getString("main.cannot_read_clientContainer_xml", xmlFullName,
// "Client Container xml: " + xmlFullName + " not found or unable to read.\nYou may want to use the -xml option to locate your configuration xml."));
// ue.setUsage(getUsage());
// throw ue;
//
// }
//
// private String loadPasswordFromFile(String fileName)
// throws IOException {
// InputStream inputStream = null;
// try {
// inputStream = new BufferedInputStream(new FileInputStream(fileName));
// Properties props = new Properties();
// props.load(inputStream);
// return props.getProperty("PASSWORD");
// } finally {
// if (inputStream != null) {
// inputStream.close();
// }
// }
// }
//
// private static class Cleanup extends Thread {
// private AppContainer appContainer = null;
// private AppClientInfo appClientInfo = null;
// private boolean cleanedUp = false;
// private InjectionManager injectionMgr = null;
// private ApplicationClientDescriptor appClient = null;
// private Class cls = null;
// private ScriptingSupport scriptingSupport = null;
//
// public Cleanup() {
// }
//
// public void setAppContainer(AppContainer container) {
// appContainer = container;
// }
//
// public void setAppClientInfo(AppClientInfo info) {
// appClientInfo = info;
// }
//
// public void setInjectionManager(InjectionManager injMgr, Class cls, ApplicationClientDescriptor appDesc) {
// injectionMgr = injMgr;
// this.cls = cls;
// appClient = appDesc;
// }
//
// public void setScriptingSupport(ScriptingSupport scriptingSupport) {
// this.scriptingSupport = scriptingSupport;
// }
//
// public void run() {
// _logger.info("Clean-up starting");
// cleanUp();
// }
//
// public void cleanUp() {
// if( !cleanedUp ) {
// try {
// if (scriptingSupport != null) {
// scriptingSupport.close();
// scriptingSupport = null;
// }
// if( appContainer != null ) {
// appContainer.postInvoke();
// }
// if ( appClientInfo != null ) {
// appClientInfo.close();
// }
// if ( injectionMgr != null) {
// // inject the pre-destroy methods before shutting down
// injectionMgr.invokeClassPreDestroy(cls, appClient);
// injectionMgr = null;
// }
// if(appClient != null && appClient.getServiceReferenceDescriptors() != null) {
// // Cleanup client pipe line, if there were service references
// for (Object desc: appClient.getServiceReferenceDescriptors()) {
// ClientPipeCloser.getInstance()
// .cleanupClientPipe((ServiceReferenceDescriptor)desc);
// }
// }
// }
// catch(Throwable t) {
// }
// finally {
// cleanedUp = true;
// }
// } // End if -- cleanup required
// }
// }
// /**
// *Sets up the user-provided or default sun-acc.xml and
// *wss-client-config.xml configurations.
// *@return the file name of the sun-acc.xml file
// */
// private String prepareJWSConfig() throws IOException, FileNotFoundException {
// return prepareJWSDefaultConfig();
// }
//
// /**
// *Creates temporary files for use as default sun-acc.xml and
// *wss-client-config.xml configurations.
// *@return the file name of the temporary sun-acc.xml file
// */
// private String prepareJWSDefaultConfig() throws IOException, FileNotFoundException {
// String result = null;
//
// /*
// *Retrieve the sun-acc and wss-client-config templates.
// */
// String sunACCTemplate = Util.loadResource(this.getClass(), SUN_ACC_DEFAULT_TEMPLATE);
// String wssClientConfigTemplate = Util.loadResource(this.getClass(), WSS_CLIENT_CONFIG_TEMPLATE);
//
// /*
// *Prepare the property names and values for substitution in the templates. Some
// *of the properties are specified in the environment already, so use those
// *as defaults and just add the extra ones.
// */
// Properties tokenValues = new Properties(System.getProperties());
//
// /**
// *Create the wss client config defaults, then write them to a temporary file.
// */
// String wssClientConfig = Util.replaceTokens(wssClientConfigTemplate, tokenValues);
// File wssClientConfigFile = Util.writeTextToTempFile(wssClientConfig, WSS_CLIENT_CONFIG_PREFIX, WSS_CLIENT_CONFIG_SUFFIX, retainTempFiles);
// _logger.fine("Temporary wss-client-config.xml file: " + wssClientConfigFile.getAbsolutePath() + lineSep);
//// pendingLogFine.append("Temporary wss-client-config.xml file: " + wssClientConfigFile.getAbsolutePath() + lineSep);
//
// /*
// *Now that the wss temp file is created, insert its name into the default
// *sun-acc text and write that to another temp file.
// *
// *On Windows, the backslashes in the path will be consumed by the replaceTokens method which will
// *interpret them as quoting the following character. So replace each \ with \\ first. All the slashes
// *have to do with quoting a slash to the Java compiler, then quoting it again to the regex
// *processor.
// */
// String quotedConfigFileSpec = wssClientConfigFile.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\");
// tokenValues.setProperty(SUN_ACC_SECURITY_CONFIG_PROPERTY, quotedConfigFileSpec);
//
// String sunaccContent = Util.replaceTokens(sunACCTemplate, tokenValues);
// File sunaccFile = Util.writeTextToTempFile(sunaccContent, SUN_ACC_PREFIX, SUN_ACC_SUFFIX, retainTempFiles);
// _logger.fine("Temporary sun-acc.xml file: " + sunaccFile.getAbsolutePath());
//// pendingLogFine.append("Temporary sun-acc.xml file: " + sunaccFile.getAbsolutePath());
//
// return sunaccFile.getAbsolutePath();
// }
//
// /**
// *Prepares the JAAS login configuration for a Java Web Start invocation.
// *
// */
// private void prepareJWSLoginConfig() {
// /*
// *If this is a Java Web Start invocation, prepare the user-specified
// *or default login configuration.
// */
// if (isJWS) {
// try {
// prepareJWSDefaultLoginConfig();
// } catch (Throwable thr) {
// throw new RuntimeException(localStrings.getString("appclient.errorPrepJWSLogginConfig"), thr);
// }
// }
// }
//
// /**
// *Extracts the default login.conf file into a temporary file and assigns the
// *java.security.auth.login.config property accordingly.
// */
// private void prepareJWSDefaultLoginConfig() throws IOException, FileNotFoundException {
// /*
// *For a Java Web Start launch, the default login configuration is in a
// *template bundled in the app server's jws jar file. Putting it there
// *allows this method to locate it simply by loading it as a resource, whereas
// *the command-line appclient invocation needs to be able to find the
// *file on-disk somewhere.
// *
// *The contents of the template are loaded and then written to a temp file and
// *that temp file location is assigned to the system property that directs
// *JAAS to the login configuration.
// */
// String configContent = Util.loadResource(this.getClass(), LOGIN_CONF_TEMPLATE);
// File configFile = Util.writeTextToTempFile(configContent, LOGIN_CONF_FILE_PREFIX, LOGIN_CONF_FILE_SUFFIX, retainTempFiles);
// String configFilePath = configFile.getAbsolutePath();
// _logger.fine("Temporary appclientlogin.conf file: " + configFilePath);
// System.setProperty(LOGIN_CONF_PROPERTY_NAME, configFilePath);
// }
//
// /*
// *Returns the jar or directory that contains the specified resource.
// *@param target entry name to look for
// *@return URI object for the jar or directory containing the entry
// */
// private File findContainingJar(String target) throws IllegalArgumentException, URISyntaxException {
// File result = null;
//
// /*
// *Use the current class loader to find the resource.
// */
// URL resourceURL = getClass().getResource(target);
// if (resourceURL != null) {
// URI uri = resourceURL.toURI();
// String scheme = uri.getScheme();
// String ssp = uri.getSchemeSpecificPart();
// if (scheme.equals("jar")) {
// /*
// *The scheme-specific part will look like "file:!/.class"
// *so we need to isolate the scheme and the part.
// *The subscheme (the scheme within the jar) precedes the colon
// *and the file spec appears after it and before the exclamation point.
// */
// int colon = ssp.indexOf(':');
// String subscheme = ssp.substring(0, colon);
// int excl = ssp.indexOf('!');
// String containingJarPath = ssp.substring(colon + 1, excl);
// result = new File(containingJarPath);
// } else if (scheme.equals("file")) {
// /*
// *The URI is already a file, so the part we want is the part
// *up to but not including the resource name we were looking for
// in the first place..
// */
// int resourceNamePosition = ssp.indexOf(target);
// String containingFilePath = ssp.substring(0, resourceNamePosition);
// result = new File(containingFilePath);
// } else {
// throw new IllegalArgumentException(resourceURL.toExternalForm());
// }
// }
// return result;
// }
//
// /**
// *Locate the app client jar file during a Java Web Start launch.
// *@return File object for the client jar file
// */
// private File findAppClientFileForJWSLaunch() throws URISyntaxException {
// /*
// *The JWSACCMain class has already located the downloaded app client
// *jar file and set a property pointing to it.
// */
// File containingJar = new File(System.getProperty("com.sun.aas.downloaded.appclient.jar"));
// _logger.fine("Location of appclient jar file: " + containingJar.getAbsolutePath());
// return containingJar;
// }
//
// /**
// *Creates a memory-based logger for holding log messages that may occur before
// *the user's logging set-up is read.
// *@return a Logger that buffers its log records in memory.
// */
// private BufferedLogger prepareBufferedLogging() {
// /*
// *The buffered logger adds a handler automatically during instantiation.
// */
// BufferedLogger logger = new BufferedLogger();
// return logger;
// }
//
// /**
// *Logger implementation that records its log records in memory. Normally
// *the logger will be flushed to another logger once the second logger has
// *been configured appropriately.
// */
// private class BufferedLogger extends Logger {
//
// /**
// *Creates a new instance of the buffered logger.
// */
// public BufferedLogger() {
// super(null, null);
// addHandler(new BufferedHandler());
// }
//
// /**
// *Flushes any accumulated log messages to the specified target logger.
// *@param target the Logger to receive any buffered messages
// */
// public void pushTo(Logger target) {
// for (Handler handler : getHandlers()) {
// if (handler instanceof BufferedHandler) {
// ((BufferedHandler) handler).pushTo(target);
// }
// }
// }
// }
//
// /**
// *Log handler that accumulates each log record sent to it into memory and
// *flushes those records to another logger when asked. Once this handler is
// *flushed it can no longer be used.
// */
// private class BufferedHandler extends Handler {
//
// /** holds log records until flushed to another logger */
// private Vector buffer = new Vector();
//
// /**
// *Creates a new instance of the buffered log handler.
// */
// public BufferedHandler() {
// setLevel(Level.ALL);
// setFilter(null);
// setFormatter(new SimpleFormatter());
// }
//
// /**
// *Publishes a log record to the handler.
// *
// *In this handler, the log record is saved in the memory buffer.
// *@paran record the LogRecord to be written
// */
// public synchronized void publish(LogRecord record) {
// if (buffer == null) {
// throw new IllegalStateException("Handler asked to publish log record after pushTo invoked");
// }
// buffer.add(record);
// }
//
// /**
// *Flushes any accumulated log information to the specified target Logger.
// *@param target the Logger to receive buffered messages
// */
// public synchronized void pushTo(Logger target) {
// if (buffer == null) {
// throw new IllegalStateException("Handler asked to push to target more than once");
// }
// for (LogRecord record : buffer) {
// target.log(record);
// }
// close();
// }
//
// /**
// *Closes the handler to further use.
// */
// public void close() throws SecurityException {
// buffer.clear();
// buffer = null;
// }
//
// /**
// *Does nothing because there is no intermediate buffer between the
// *handler and its storage - the storage is itself a memory buffer.
// */
// public void flush() {
// }
// }
}