public void setSessionContext(javax.ejb.SessionContext ctx) { mySessionCtx = ctx; try { // colocar en antememoria varias referencias. InitialContext ic = new InitialContext(); bookHome = (PartitionManager)ic.lookup(PartitionManager.JNDI_NAME); } catch(Exception e) { throw new EJBException(e); } }Consulte los ejemplos de programadores para obtener más ejemplos de uso.
Este método tiene tres signaturas y cada una se utiliza para crear una instancia de PartitionDefinition que representa una partición de la aplicación. Este método se sobrecarga y se debe escoger el método adecuado según el comportamiento deseado.
PartitionDefinition createPartitionDefinition(String partitionName)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope,
Map attributemap)
El primer valor insertado en la API map put() es la clave de HA Manager, el segundo será el valor de HA Manager para ese par de claves.
public PartitionDefinition[] getPartitions() { String names = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; PartitionDefinition[] rc = new PartitionDefinition[names.length()]; for(int i = 0; i < names.length(); ++i) { Map testMap = new HashMap(); testMap.put(“custom-attrib", "samplevalue"); testMap.put("activateOn", Integer.toString(i%3)); // tener 3 servidores, equilibrar durante el inicio rc[i] = ivRuntime.createPartitionDefinition(names.substring(i, i + 1), "MapExamle", PartitionScope.K_NODE, testMap); testMap = null; } logger.trace(RASITraceEvent.TYPE_LEVEL1, this, "getPartitions", "Returning partitions", rc); return rc; }
En este caso, se ha creado una correlación con un atributo de clave de HA Manager establecido en el mismo valor para todas las particiones (custom-attrib) y un segundo con el nombre activateOn y un valor de serie 0-2. Este ejemplo se ha utilizado junto el soporte de políticas para crear una política para todos los valores de inicio y solicitar a la política de servidor preferida que sea exclusiva en el caso de todas las particiones terceras. Consulte las secciones sobre políticas para obtener más información sobre este enfoque.
String[] getPartitions()
Se puede llamar a este método para obtener el nombre de aplicación determinado por el administrador durante el tiempo de despliegue. Esta serie de puede utilizar en el nombre de la partición para garantizar que sea exclusivo dentro del clúster (el nombre de la aplicación desplegada debe ser exclusivo dentro de un clúster Websphere).
String getApplicationName()
Si ésta se utiliza al crear una partición, sugerimos que despliegue la aplicación J2EE particionada con un nombre mínimo en términos de la longitud de serie, ya que el nombre se utiliza durante todo el tiempo de ejecución de HA manager.Un uso común puede ser utilizarla para crear versiones de las referencias de partición que tengan la misma aplicación J2EE particionada en el mismo clúster simplemente instalada con un nombre distinto, y cada partición como, por ejemplo, PartitionA puede llamarse Appv2r2.PartitionA. De este modo, el usuario podría tener Appv2r1.PartitionA y Appv2r2.PartitionAh activas simultáneamente. La aplicación entonces simplemente dirigiría sus peticiones a la versión con las que son compatibles. Este es uno de los enfoques para solucionar este problema.
void addPartition(PartitionDefinition name)
Si un miembro de clúster añade una partición, se añade automáticamente a todos los miembros de modo asíncrono. Al utilizar la política con ámbito de clúster por omisión, la partición se activará generalmente en el miembro de clúster que reciba la petición, aunque no se garantiza este comportamiento. Asimismo, la activación de una partición en todo un clúster es una función distribuida, de modo que un retraso es razonable entre el momento en que se devuelve la API y el momento en que ocurre la activación real de la partición. Los programadores deben tenerlo en cuenta.
Se ofrece una demostración de esta API en el ejemplo de WPFKeyBasedPartition.
Este método permite que una aplicación elimine una partición dinámicamente. Si la partición está activa en ese momento en cualquier miembro de clúster, también se desactiva. La partición se elimina de todos miembros de clúster en línea.
void removePartition(String name)
La desactivación de una partición en todo un clúster es una función distribuida, de modo que un retraso es razonable entre el momento en que se devuelve la API y el momento en que ocurre la desactivación real de la partición. Los programadores deben tenerlo en cuenta.Para casos en que se sospecha de un error temporal en lugar de uno permanente, el programador debería considerar utilizar la API de disablePartition(). Es este caso, el mecanismo de política se puede utilizar para determinar si la partición no se debe reiniciar o si, de hecho, puede reiniciarse en otro miembro de clúster si se da el caso.
Inhabilita dinámicamente una partición. La llamada a este método inhabilita la partición en los miembros de clúster actuales. También puede realizarse mediante el mandato wpfadmin.
void removePartition(String name)
Cuando se invoca el método, la partición entrará en un estado desactivado o se activará inmediatamente en otro miembro de clúster capaz de albergar la partición. La partición se desactiva según los valores de política actuales, aunque por omisión se activa en otro miembro de clúster si hay alguno disponible. Si la partición no vuelve a activarse automáticamente, se puede utilizar wpfadmin para habilitar el miembro una vez que el administrador haya revisado las anotaciones cronológicas y determinado si es necesaria alguna acción anterior a volver a habilitar la partición.No se llama a partitionUnloadEvent(...), ya que la aplicación llama a este método y puede limpiar tanto como sea posible antes de la invocación.
La aplicación llama a este método para indicar un problema con una partición activa. Esto hace que HA Manager reaccione de acuerdo con el valor del parámetro de gravedad. Este método se reserva para un uso futuro y no se implemente en este momento. Consulte disablePartition() para corregir el problema.
Una aplicación llama a este método para notificar que se ha completado una transacción con un tiempo de respuesta específico para una partición determinada. Este método se utiliza generalmente cuando la aplicación utiliza un método asíncrono para recibir peticiones de trabajo en lugar de peticiones IIOP síncronos.
void reportTransactionComplete(String partitionName, long responseTime_ms)
Se ofrece una demostración de esta API en el ejemplo WPFKeyBasedPartitionSample.
void setHttpPartitionManager(HttpPartitionManagerInterface manager)
PMI WPF PMI contiene responseTime, una estadística que se utiliza para medir el tiempo de respuesta de las transacciones y el número de transacciones ejecutadas en nombre de una determinada partición. Las aplicaciones de usuario recopilan el tiempo de respuesta. Las aplicaciones de usuario actualizan las estadísticas de PMI llamando al método reportTransactionComplete de la interfaz com.ibm.websphere.wpf.PartitionManager.
/** * Debe llamarse para informar al tiempo de ejecución cuando una * transacción/operación se completa en esta partición. * Se utiliza para registrar cuántas * transacciones por segundo se ejecutan por partición. * @param partitionName el nombre de la partición. * @param responseTime_ms el tiempo de respuesta de la transacción. * @throws IllegalStateException Si la aplicación que llama no tiene bean * manejador de partición */ void reportTransactionComplete(String partitionName, long responseTime_ms)
Puede llamar a PartitionManager.reportTransactionComplete en el bean de sesión sin estado de particiones (PSSB). La mejor práctica es que los usuarios calculen el tiempo de transacción de una transacción y, a continuación, utilicen esta API para notificar el tiempo de transacción. A continuación aparece un ejemplo. El método buy es un método para simular la transacción en el Bean WPFKeyBasedPartition de la aplicación WPFKeyBasedPartitionSample.
/** * El método buy. Este método no hace nada ahora excepto notificar el * final de la transacción. La transacción toma un valor aleatorio de * 0 a 1000 mseg. * * @param partitionName * @return nombre de partición */ public String buy(String partitionName) { String serverName = AdminServiceFactory.getAdminService().getNodeName() +"/"+AdminServiceFactory.getAdminService().getProcessName(); ivManager.reportTransactionComplete(partitionName, (long) (1000 * Math.random())); logger.trace( RASITraceEvent.TYPE_LEVEL1, this, "buy", "The method called at " + serverName + "." + partitionName); return "partiton=" + partitionName + ",server=" + serverName; }
La primera vez que se llama a PartitionManager.reportTransactionComplete para una determinada partición en un servidor de aplicaciones, se crea un módulo PMI para esta partición agrupada por el nombre de aplicación y el nombre EJB de sesión. Por ejemplo, si el nombre de la aplicación es app1 y el nombre del EJB de sesión es session1, el módulo PMI se agrupa mediante app1#session1. Obtendrá una descripción más detallada en la sección de la vía de acceso de PMI.
La estadística responseTime se ha diseñado para calcular algunas cuestiones estadísticas, por ejemplo, el tiempo de respuesta medio, el tiempo de respuesta mínimo, el tiempo de respuesta máximo y la suma de los cuadrados de los tiempos de respuesta. Los usuarios pueden acceder a estos datos, consultando los datos PMI mediante el mandato wpfadmin, wsadmin o MBean.