Con WebSphere eXtreme Scale, puede utilizar una API programática para gestionar el ciclo de vida de servidores y contenedores incorporados. Puede configurar a través de programas el servidor con cualquiera de las opciones que también puede configurar con las opciones de la línea de mandatos o las propiedades de servidor basadas en archivo. Puede configurar el servidor incorporado para que sea un servidor de contenedor, un servicio de catálogo, o ambos.
Puede ejecutar muchas tareas de administración con la API Administration. Un uso común de la API es su uso como servidor interno para almacenar el estado de la aplicación web. El servidor web puede iniciar un servidor WebSphere eXtreme Scale incorporado, realizar informes del servidor de contenedor en el servicio de catálogo y después añadirlo como un miembro de una cuadrícula distribuida mayor. Este uso puede proporcionar escalabilidad y alta disponibilidad en un almacén de datos que de lo contrario es volátil.
Puede controlar mediante programación el ciclo de vida completo de un servidor eXtreme Scale incorporado. Los ejemplos son lo más genéricos posibles y sólo muestran códigos de ejemplo de código directo para los pasos descritos.ServerProperties props = ServerFactory.getServerProperties();
props.setCatalogServiceBootstrap("host:port"); // necesario para conectarse a un servicio
// de catálogo específico
props.setServerName("ServerOne"); // name server
props.setTraceSpecification("com.ibm.ws.objectgrid=all=enabled"); // Establece la espec. de rastreo
Si desea más información sobre la interfaz CatalogServerProperties, consulte Interfaz CatalogServerProperties.
CatalogServerProperties catalogProps = ServerFactory.getCatalogProperties();
catalogProps.setCatalogServer(true); // false de forma predeterminada, es necesario establecerlo
// como un servicio de catálogo
catalogProps.setQuorum(true); // habilitar / inhabilitar el quórum
Si desea más información sobre la interfaz Server, consulte Interfaz Server. Si desea más información sobre la clase ServerFactory, consulte Clase ServerFactory.
El siguiente ejemplo muestra cómo crear la instancia de Server: Server server = ServerFactory.getInstance();
Mediante la revisión del ejemplo anterior, la clase ServerFactory proporciona un método estático que devuelve una instancia de Server. La clase ServerFactory tiene como objetivo ser la única interfaz para obtener una instancia de Server. Por lo tanto, la clase garantiza que la instancia es un singleton, o una instancia para cada JVM o cargador de clases aislado. El método getInstance inicializa la instancia de Server. Debe configurar todas las propiedades de servidor antes de inicializar la instancia. La clase Server es responsable de crear las nuevas instancias de Container. Puede utilizar ambas clases, ServerFactory y Server, para gestionar el ciclo de vida de la instancia de Server incorporada.
Si desea más información sobre la interfaz Container, consulte Interfaz Container.
Política de despliegue = DeploymentPolicyFactory.createDeploymentPolicy(new
URL("file://urltodeployment.xml"),
new URL("file://urltoobjectgrid.xml"));
Container container = server.createContainer(policy);
Puede eliminar y borrar un servidor de contenedor utilizando el método teardown en ejecución en la instancia de Container obtenida. Ejecutar el método teardown en un contenedor correctamente borra el contenedor y elimina el contenedor del servidor incorporado.
container.teardown();
ServerFactory.stopServer(); // Utiliza la fábrica para matar el proceso singleton de Server
// o
server.stopServer(); // Utiliza directamente la instancia de Server
server.waitFor(); // Se devuelve este valor cuando el servidor ha completado correctamente
sus procedimientos de conclusión.
Ejemplo de código completo: import java.net.MalformedURLException;
import java.net.URL;
import com.ibm.websphere.objectgrid.ObjectGridException;
import com.ibm.websphere.objectgrid.deployment.DeploymentPolicy;
import com.ibm.websphere.objectgrid.deployment.DeploymentPolicyFactory;
import com.ibm.websphere.objectgrid.server.Container;
import com.ibm.websphere.objectgrid.server.Server;
import com.ibm.websphere.objectgrid.server.ServerFactory;
import com.ibm.websphere.objectgrid.server.ServerProperties;
public class ServerFactoryTest {
public static void main(String[] args) {
try {
ServerProperties props = ServerFactory.getServerProperties();
props.setCatalogServiceBootstrap("catalogservice-hostname:catalogservice-port");
props.setServerName("ServerOne"); // name server
props.setTraceSpecification("com.ibm.ws.objectgrid=all=enabled"); // TraceSpec
/*
* En la mayoría de los casos, el servidor actuará sólo como un servidor de contenedor
* y se conectará a un servicio de catálogo externo. Este es un método más disponible
* de realizar acciones. La siguiente excepción de código comentada
* permitirá que este Server sea un servicio de catálogo.
*
*
* CatalogServerProperties catalogProps =
* ServerFactory.getCatalogProperties();
* catalogProps.setCatalogServer(true); // habilitar el servicio de catálogo
* catalogProps.setQuorum(true); // habilitar quórum
*/
Server server = ServerFactory.getInstance();
DeploymentPolicy policy = DeploymentPolicyFactory.createDeploymentPolicy
(new URL("url to deployment xml"), new URL("url to objectgrid xml file"));
Container container = server.createContainer(policy);
/*
* Ahora el fragmento se colocará en este contenedor, si se cumplen los
* requisitos de despliegue.
* Esto engloba la creación del contenedor y del servidor incorporados.
*
* Las líneas siguientes simplemente demostrarán la llamada a métodos de limpieza
*/
container.teardown();
server.stopServer();
int success = server.waitFor();
} catch (ObjectGridException e) {
// El contenedor no se ha podido inicializar
} catch (MalformedURLException e2) {
// url no válido para los archivos xml
}
}
}