public void setSessionContext(javax.ejb.SessionContext ctx) { mySessionCtx = ctx; try { // cache various references. InitialContext ic = new InitialContext(); bookHome = (PartitionManager)ic.lookup(PartitionManager.JNDI_NAME); } catch (Exception e) { throw new EJBException(e); } }Verwenden Sie die Beispielprogramme, um nähere Informationen zur Verwendung zu erhalten.
Diese Methode hat drei Deklarationen, und jede Deklaration wird zum Erstellen einer PartitionDefinition-Instanz für eine Anwendungspartition verwendet. Diese Methode ist überladen, und je nach gewünschtem Verhalten muss die entsprechende Methode ausgewählt werden.
PartitionDefinition createPartitionDefinition(String Partitionsname)
PartitionDefinition createPartitionDefinition(String Partitionsname,
String Partitionsklasse,
PartitionScope Geltungsbereich)
PartitionDefinition createPartitionDefinition(String Partitionsname,
String Partitionsklasse,
PartitionScope Geltungsbereich,
Map Attributzuordnung)
Der erste Wert, der in die Methode put() der Map-API eingefügt wird, ist der HA-Manager-Schlüssel, der zweite Wert der HA-Manager-Wert.
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)); // have 3 servers, balance at start 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; }
In diesem Fall wird eine Zuordnung mit einem HA-Manager-Schlüssel, der für alle Partitionen (custom-attrib) denselben Wert definiert, und eine zweite Zuordnung mit dem Namen activateOn und dem Zeichenfolgewert 0-2 verwendet. Dieses Beispiel wird zusammen mit der Policy-Unterstützung verwendet, um eine Policy für jeden Startwert zu erstellen und festzulegen, dass die Policy für bevorzugte Server für jede weitere Partition eindeutig sein muss. Nähere Einzelheiten zu diesem Konzept finden Sie im Abschnitt über Policys.
String[] getPartitions()
Mit dieser Methode kann der vom Administrator während der Implementierung festgelegte Anwendungsname abgerufen werden. Diese Zeichenfolge kann im Namen der Partition verwendet werden, um sicherzustellen, dass der Name im Cluster eindeutig ist. Die Namen implementierter Anwendungen in einem WebSphere-Cluster müssen eindeutig sein.
String getApplicationName()
Wenn Sie diese Methode beim Erstellen einer Partition verwenden, wird empfohlen, die partitionierte J2EE-Anwendung mit einem Namen in Bezug auf die Länge minimalen Namen zu implementieren, da der Name zur gesamten Laufzeit des HA Manager verwendet wird.Ein gebräuchlicher Anwendungsfall ist die Versionssteuerung von Partitionsreferenzen, bei der dieselbe J2EE-Anwendung mehrfach im Cluster installiert wird und bei der Installation einfach unterschiedliche Namen angegeben werden. "PartitionA" kann beispielsweise zu "Appv2r2.PartitionA" werden. Somit könnte der Benutzer im Cluster die Partitionen "Appv2r1.PartitionA" und "Appv2r2.PartitionAh" gleichzeitig ausführen. Die Anwendungen würde ihre Anforderungen einfach an die für sie kompatible Version senden. Dies ist ein Ansatz zur Lösung des Problems.
void addPartition(PartitionDefinition Name)
Wenn ein Cluster-Member eine Partition hinzufügt, wird sie automatisch auch asynchron allen aktuellen Cluster-Membern hinzugefügt. Bei Verwendung der Cluster-bezogenen Standard-Policy (default cluster scoped policy) wird die Partition typischerweise auf dem Cluster-Member aktiviert, das die Anforderung empfängt. Allerdings ist dies nicht garantiert. Das Aktivieren einer Partition in einem Cluster ist eine verteilte Funktion. Deshalb ist es sinnvoll, eine Zeitverzögerung zwischen der Rückkehr der API und der eigentlichen Aktivierung der Partition einzufügen. Programmierer sollten dies berücksichtigen.
Diese API wird im Beispiel WPFKeyBasedPartition veranschaulicht.
Mit dieser Methode kann eine Anwendung eine Partition dynamisch entfernen. Wenn die Partition derzeit auf einem Cluster-Member aktiviert ist, wird sie außerdem inaktiviert. Die Partitionen wird von allen Online-Cluster-Membern entfernt.
void removePartition(String Name)
Das Inaktivieren einer Partition in einem Cluster ist eine verteilte Funktion. Deshalb ist es sinnvoll, eine Zeitverzögerung zwischen der Rückkehr der API und der eigentlichen Inaktivierung der Partition einzufügen. Programmierer sollten dies berücksichtigen.Erwägen Sie die Verwendung der API disablePartition() in Szenarios, in denen temporäre und permanente Fehler nicht tolerierbar sind. In diesem Fall kann der Policy-Mechanismus verwendet werden, um festzustellen, ob die Partition nicht erneut gestartet oder auf einem anderem Cluster-Member gestartet werden soll, falls die Möglichkeit besteht.
Mit dieser Methode kann eine Partition dynamisch inaktiviert werden. Beim Aufruf dieser Methode wird die Partition auf den aktuellen Cluster-Membern inaktiviert. Sie können hierfür auch den Befehl wpfadmin verwenden.
void removePartition(String Name)
Beim Aufruf der Methode wird die Partition entweder inaktiviert und sofort auf einem anderen Cluster-Member aktiviert, das die Partition aufnehmen kann. Die Partition wird inaktiviert, wenn dies in den aktuellen Policy-Einstellungen vorgesehen ist. Standardmäßig wird die Partition jedoch auf einem anderen Cluster-Member aktiviert, sofern ein Member verfügbar ist. Falls die Partition nicht automatisch reaktiviert wird, können Sie mit dem Befehl wpfadmin das Member aktivieren, sobald der Administrator die Protokolle einsehen und feststellen konnte, ob vor dem erneuten Aktivieren der Partition bestimmte Aktionen ausgeführt werden müssen.Die Methode partitionUnloadEvent(...) wird nicht aufgerufen, weil die Anwendung diese Methode aufruft und vor dem Aufruf die entsprechenden Bereinigungsaktionen durchführt.
Diese Methode wird von der Anwendung aufgerufen, wenn ein Problem bei einer aktiven Partition festgestellt wird. Dies bewirkt, dass der HA Manager entsprechend dem Wert des Wertigkeitsparameters reagiert. Diese Methode ist für spätere Verwendung bestimmt und ist derzeit nicht implementiert. Informationen zu den Maßnahmen zur Fehlerbehebung finden Sie in der Beschreibung von disablePartition().
Diese Methode wird von einer Anwendung aufgerufen, um eine soeben mit einer bestimmten Antwortzeit für eine bestimmte Partition ausgeführte Transaktion zu melden. Sie wird normalerweise verwendet, wenn die Anwendung eine asynchrone Methode für den Empfang von Anforderungen und keine synchronen IIOP-Anforderungen verwendet.
void reportTransactionComplete(String Partitionsname, long Antwortzeit_ms)
Diese API wird im Beispiel WPFKeyBasedPartitionSample veranschaulicht.
void setHttpPartitionManager(HttpPartitionManagerInterface Manager)
WPF PMI enthält eine Statistik, responseTime, mit der Sie die Antwortzeit von Transaktionen und die Anzahl der für eine bestimmte Partition ausgeführten Transaktionen messen können. Die Antwortzeit wird von Benutzeranwendungen erfasst. Benutzeranwendungen aktualisieren die PMI-Statistik durch Aufruf der Methode reportTransactionComplete des Interface com.ibm.websphere.wpf.PartitionManager.
/** * Diese Methode muss aufgerufen werden, um die Laufzeitumgebung darüber zu * informieren, wenn eine Transaktion/Operation in dieser Partition * abgeschlossen wird. Damit kann nachvollzogen werden, wie viele * Transaktionen pro Sekunde pro Partition ausgeführt werden. * @param Partitionsname Der Name der Partition. * @param Antwortzeit_ms Die Antwortzeit für die Transaktion. * @throws IllegalStateException Falls die aufrufende Anwendung keine Handler-Bean für die Partition hat. */ void reportTransactionComplete(String Partitionsname, long Antwortzeit_ms)
Sie können PartitionManager.reportTransactionComplete in der Partition Stateless Session Bean aufrufen. Es empfiehlt sich, die Transaktionszeit einer Transaktion zu berechnen und anschließend mit dieser API die Transaktionszeit zu melden. Es folgt ein Beispiel. Die Methode buy ist eine Methode, um die Transaktion in der Bean WPFKeyBasedPartition in der Anwendung WPFKeyBasedPartitionSample zu simulieren.
/** * Eine buy-Methode. Diese Methode tut nicht anderes, als den Abschluss * der Transaktion zu melden. Der Wert kann ein zufälliger Wert zwischen * 0 ms und 1000 ms sein. * * @param Partitionsname * @return Der Partitionsname. */ public String buy(String Partitionsname) { String serverName = AdminServiceFactory.getAdminService().getNodeName() +"/"+AdminServiceFactory.getAdminService().getProcessName(); ivManager.reportTransactionComplete(Partitionsname, (long) (1000 * Math.random())); logger.trace( RASITraceEvent.TYPE_LEVEL1, this, "buy", "Die Methode wurde für " + Servername + "." + Partitionsname + " aufgerufen"); return "partition=" + Partitionsname + ",server=" + Servername; }
Wenn PartitionManager.reportTransactionComplete zum ersten Mal für eine bestimmte Partition in einem Anwendungsserver aufgerufen wird, wird ein PMI-Modul für diese Partition, gruppiert nach dem Anwendungsnamen und dem Namen der Session-EJB erstellt. Beispiel: Wenn der Anwendungsname app1 und der Name der Session-EJB session1 lautet, wird das PMI-Modul nach app1#session1 gruppiert. Dieses Verfahren wird detaillierter im Abschnitt über den PMI-Pfad beschrieben.
Mit der Statistik responseTime können verschiedene Statistikdaten berechnet werden, wie z. B. die durchschnittliche Antwortzeit, die Mindestantwortzeit, die maximale Antwortzeit und die Summe der Quadrate der Antwortzeiten. Der Benutzer kann durch Abfrage der PMI-Daten mit dem Befehl wpfadmin, dem Befehl wsadmin oder der MBean auf diese Daten zugreifen.
Related concepts
Programmiermodell des Partitionierungs-Feature