blob: dd2855fbb6628840979bedf64e3d3a5263eeccfb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.payara.spi;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;
import javax.swing.event.ChangeListener;
import org.netbeans.modules.payara.tooling.TaskState;
import org.netbeans.modules.payara.tooling.TaskStateListener;
import org.netbeans.modules.payara.tooling.admin.ResultString;
import org.netbeans.modules.payara.common.PayaraJvmMode;
import org.netbeans.modules.payara.common.PayaraInstanceProvider;
import org.netbeans.modules.payara.tooling.data.PayaraServer;
/**
* Interface implemented by common server support. Always available in server
* instance lookup.
*
* @author Peter Williams
*/
public interface PayaraModule {
// Attribute keys for InstanceProperties map
public static final String URL_ATTR = "url"; // NOI18N
public static final String INSTALL_FOLDER_ATTR = "installfolder"; // NOI18N
public static final String PAYARA_FOLDER_ATTR = "homefolder"; // NOI18N
public static final String DISPLAY_NAME_ATTR = "displayName"; // NOI18N
public static final String USERNAME_ATTR = "username"; // NOI18N
public static final String PASSWORD_ATTR = "password"; // NOI18N
public static final String ADMINPORT_ATTR = "adminPort"; // NOI18N
public static final String TARGET_ATTR = "target";
public static final String HTTPPORT_ATTR = "httpportnumber"; // NOI18N
public static final String HOSTNAME_ATTR = "host"; // NOI18N
public static final String JRUBY_HOME = "jruby.home"; // NOI18N
public static final String GEM_HOME = "GEM_HOME"; // NOI18N
public static final String GEM_PATH = "GEM_PATH"; // NOI18N
public static final String DOMAINS_FOLDER_ATTR = "domainsfolder"; // NOI18N
public static final String DOMAIN_NAME_ATTR = "domainname";
public static final String JAVA_PLATFORM_ATTR = "java.platform";
public static final String HTTP_MONITOR_FLAG = "httpMonitorOn";
public static final String DRIVER_DEPLOY_FLAG = "driverDeployOn";
public static final String START_DERBY_FLAG = "derbyStartOn";
public static final String USE_IDE_PROXY_FLAG = "useIDEProxyOn";
public static final String LOOPBACK_FLAG = "loopbackOn";
public static final String HTTPHOST_ATTR = "httphostname"; // NOI18N -- necessary for cluster and instance support
public static final String USE_SHARED_MEM_ATTR = "use.shared.mem"; // NOI18N
public static final String DEBUG_PORT = "debugPort"; // NOI18N
public static final String DEBUG_MEM = "debugMem"; // NOI18N
public static final String JVM_MODE = "jvmMode"; // NOI18N
public static final String NORMAL_MODE = PayaraJvmMode.NORMAL.toString();
public static final String DEBUG_MODE = PayaraJvmMode.DEBUG.toString();
public static final String PROFILE_MODE = PayaraJvmMode.PROFILE.toString();
public static final String COMET_FLAG = "v3.grizzly.cometSupport"; // NOI18N
// Contract provider constants (identify the different containers in V3)
public static final String EAR_CONTAINER = "ear"; // NOI18N
public static final String WEB_CONTAINER = "web"; // NOI18N
public static final String JRUBY_CONTAINER = "jruby"; // NOI18N
public static final String EJB_CONTAINER = "ejb"; // NOI18N
public static final String APPCLIENT_CONTAINER = "appclient"; // NOI18N
public static final String CONNECTOR_CONTAINER = "connector"; // NOI18N
// Resource types
public static final String JDBC = "JDBC"; // NOI18N
public static final String JDBC_RESOURCE = "jdbc-resource"; // NOI18N
public static final String JDBC_CONNECTION_POOL = "jdbc-connection-pool"; // NOI18N
public static final String HOT_DEPLOY = "hotDeploy";
public static final String SESSION_PRESERVATION_FLAG = "preserveSessionsOn";
public static final String CONNECTORS = "CONNECTORS"; // NOI18N
public static final String CONN_RESOURCE = "connector-resource"; // NOI18N
public static final String CONN_CONNECTION_POOL = "connector-connection-pool"; // NOI18N
public static final String ADMINOBJECT_RESOURCE = "admin-object"; // NOI18N
public static final String JAVAMAIL = "JAVAMAIL"; // NOI18N
public static final String JAVAMAIL_RESOURCE = "javamail-resource"; // NOI18N
/** Key to mark properties already imported into NetBeans 7.3 and fixed. */
public static final String NB73_IMPORT_FIXED = "nb73ImportFixed";
/** Properties fetching timeout [ms]. */
public static final int PROPERTIES_FETCH_TIMEOUT = 10000;
public CommandFactory getCommandFactory();
public String getResourcesXmlName();
public boolean isWritable();
/**
* Enum for the current state of the server (stopped, running, etc.)
*/
public static enum ServerState {
STARTING,
RUNNING,
RUNNING_JVM_DEBUG,
RUNNING_JVM_PROFILER,
STOPPING,
STOPPED,
STOPPED_JVM_BP,
STOPPED_JVM_PROFILER,
UNKNOWN}
/**
* Returns a read-only map of the current instance properties. Use the
* attribute constants defined in this file to locate specific properties.
*
* @return read-only map containing all current instance properties
*/
public Map<String, String> getInstanceProperties();
public PayaraInstanceProvider getInstanceProvider();
/**
* Returns true if server is remote. Remote servers have special
* properties, such as being non-startable from within the IDE.
*
* @return true if this is a remote server.
*/
public boolean isRemote();
/**
* Sets a property in the instance properties map, if that property has not
* been set yet.
*
* @param name key for this map entry.
* @param value value for this key.
* @param overwrite true if you want to overwrite the existing key value if any.
*
* @return the current value of this key, if present in the map already
* and overwrite is false. Otherwise, returns the new value being set.
*/
public String setEnvironmentProperty(String name, String value, boolean overwrite);
/**
* Start the server.
*
* @param stateListener listener to listen message describing the startup
* process as it progresses. Can be null.
* @param endState {@linkplain ServerState} the server is to be put to upon successful startup
* @return Future instance that finishes when the server startup has
* completed (or failed).
*/
public Future<TaskState> startServer(TaskStateListener stateListener, ServerState endState);
/**
* Stop the server.
*
* XXX returned Future instance shouldn't "finish" until server vm has
* terminated (or been killed if it hangs).
*
* @param stateListener listener to listen message describing the shutdown
* process as it progresses. Can be null.
*
* @return Future instance that finishes when the server shutdown message
* has been acknowledged.
*
*/
public Future<TaskState> stopServer(TaskStateListener stateListener);
/**
* Terminates local Payara server process when started from UI.
* <p/>
* @param stateListener listener to listen message describing the shutdown
* process as it progresses. Can be null.
* @return Asynchronous Payara server termination task that finishes
* when the server stops responding.
*/
public Future<TaskState> killServer(final TaskStateListener stateListener);
/**
* Restart the server. Starts the server if it's not running. Stops and
* then starts the server if it is currently running.
*
* @param stateListener listener to listen message describing the startup
* process as it progresses. Can be null.
*
* @return Future instance that finishes when the server startup has
* completed (or failed).
*/
public Future<TaskState> restartServer(TaskStateListener stateListener);
/**
* Deploy the specified directory or application archive onto the server.
*
* @param stateListener listener to listen message describing the deploy
* process as it progresses. Can be null.
* @param application either the root folder of the application (directory
* deployment) or the application archive (e.g. war file, etc.)
* @param name name to deploy this application under.
*
* @return Future instance that finishes when the deploy command has been
* completed.
*/
public Future<ResultString> deploy(TaskStateListener stateListener,
File application, String name);
/**
* Deploy the specified directory or application archive onto the server.
*
* @param stateListener listener to listen message describing the deploy
* process as it progresses. Can be null.
* @param application either the root folder of the application (directory
* deployment) or the application archive (e.g. war file, etc.)
* @param name name to deploy this application under.
* @param contextRoot to use for this application on deploy.
*
* @return Future instance that finishes when the deploy command has been
* completed.
*/
public Future<ResultString> deploy(TaskStateListener stateListener,
File application, String name, String contextRoot);
/**
* Deploy the specified directory or application archive onto the server.
*
* @param stateListener listener to listen message describing the deploy
* process as it progresses. Can be null.
* @param application either the root folder of the application (directory
* deployment) or the application archive (e.g. war file, etc.)
* @param name name to deploy this application under.
* @param contextRoot to use for this application on deploy.
* @param properties deployment properties
*
* @return Future instance that finishes when the deploy command has been
* completed.
*/
public Future<ResultString> deploy(TaskStateListener stateListener,
File application, String name, String contextRoot, Map<String,String> properties);
/**
* Redeploy the named application onto the server.The application must have
* previously been directory deployed.If not, use deploy().
*
* @param stateListener listener to listen message describing the redeploy
* process as it progresses. Can be null.
* @param name name this application is deployed under.
* @param resourcesChanged
* @param sniffers the list of containers e.g which requires restart
*
* @return Future instance that finishes when the redeploy command has been
* completed.
*/
public Future<ResultString> redeploy(final TaskStateListener stateListener,
final String name, final boolean resourcesChanged, boolean metadataChanged, List<String> sourcesChanged);
/**
* Redeploy the named application onto the server with a new context root
* value.The application must have previously been directory deployed.If not, use deploy().
*
* @param stateListener listener to listen message describing the redeploy
* process as it progresses. Can be null.
* @param name name this application is deployed under.
* @param contextRoot to use for this application on deploy (can be null to
* reuse existing contextRoot.)
* @param resourcesChanged Is application resource file modified.
* @param metadataChanged Is application metadata files modified.
* @param sourcesChanged the list of source file modified.
*
* @return Future instance that finishes when the redeploy command has been
* completed.
*/
public Future<ResultString> redeploy(final TaskStateListener stateListener,
final String name, final String contextRoot,
final boolean resourcesChanged, boolean metadataChanged, List<String> sourcesChanged);
/**
* Undeploy the named application.
*
* @param stateListener listener to listen message describing the undeploy
* process as it progresses. Can be null.
* @param name name of application to undeploy.
*
* @return Future instance that finishes when the deploy command has been
* completed.
*/
public Future<ResultString> undeploy(TaskStateListener stateListener,
String name);
/**
* Enable the named application.
*
* @param stateListener listener to listen message describing the enable
* process as it progresses. Can be null.
* @param name name of application to enable.
*
* @return Future instance that finishes when the deploy command has been
* completed.
*/
public Future<ResultString> enable(TaskStateListener stateListener,
String name);
/**
* Disable the named application.
*
* @param stateListener listener to listen message describing the disable
* process as it progresses. Can be null.
* @param name name of application to disable.
*
* @return Future instance that finishes when the deploy command has been
* completed.
*/
public Future<ResultString> disable(TaskStateListener stateListener,
String name);
// /**
// * Execute the specified server command.
// *
// * @param command Object representing the server command to execute.
// *
// * @return Future instance that finishes when the command has been completed.
// */
// public Future<TaskState> execute(ServerCommand command);
/**
* List the applications currently deployed on the server.
*
* @return array of application names current deployed.
*/
public AppDesc [] getModuleList(String container);
/**
* Map of the resources of specified type currently deployed on the server.
*
* @return map of resources current deployed.
*/
public Map<String, ResourceDesc> getResourcesMap(String type);
/**
* Returns the current server state (stopped, running, etc.)
*
* @return current server state as an enum. See enum declaration for
* possible states.
*/
public ServerState getServerState();
/**
* Adds a listener that is notified when the server state changes. Call
* <code>getServerState()</code> in the listener's method body to find out
* the current server state.
*
* @param listener listener to add.
*/
public void addChangeListener(ChangeListener listener);
/**
* Removes a server state change listener previously added.
*
* @param listener listener to remove.
*/
public void removeChangeListener(ChangeListener listener);
public static final String PASSWORD_CONVERTED_FLAG =
"this really long string is used to identify a password that has been stored in the Keyring";
/**
* Get <code>PayaraInstance</code> object associated with this object.
* <p/>
* @return <code>PayaraInstance</code> object associated with this object.
*/
public PayaraServer getInstance();
/**
* get the password for this server
*/
public String getPassword();
public boolean supportsRestartInDebug();
public boolean isRestfulLogAccessSupported();
}