WebSphere Extended Deployment, Version 6.0.x     Betriebssysteme: AIX, HP-UX, Linux, Solaris, Windows, z/OS

PartitionManager

PartitionManager

Die Anwendung kann eine Instanz des PartitionManager von JNDI abrufen. Eine Instanz wird zur Laufzeit an JNDI gebunden. Das folgende Codesegment zeigt, wie die PSSB eine Instanz abrufen und anschließend mit einer Instanzvariablen in den Cache stellen kann.
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.

PartitionManager#JNDI_NAME

Mit dem Attribut JNDI_NAME kann die Anwendung den PartitionManager Service von JNDI abgerufen.

PartitionManager#createPartitionDefinition

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.

Die erste Methodendeklaration ist:

PartitionDefinition createPartitionDefinition(String Partitionsname)

Diese Deklaration erstellt eine PartitionDefinition mit der Standardklassifizierung und dem Geltungsbereich Cluster. Die Zeichenfolge für die Standardklassifizierung ist der Wert von PartitionDefinition#DEFAULT_CLASSIFICATION (_DFLT). Diese Version kann keine eindeutige Klassifizierung pro Partition erstellen. Legen Sie für die Partitionen den Geltungsbereich Knoten fest oder geben Sie eine Zuordnung an, um die Partitionen besser verwalten zu können.
Die zweite Methodendeklaration ist:

PartitionDefinition createPartitionDefinition(String Partitionsname,
String Partitionsklasse,
PartitionScope Geltungsbereich)

Diese Deklaration erstellt eine PartitionDefinition mit der angegebenen Partitionsklassifizierung (Partitionsklasse) für einen bestimmten Bereich von Partitionen. Diese Version unterstützt für die Erstellung der Partitionsdefinition keine Zuordnung von Policy-Attributen. Mit der Zuordnung zusätzlicher Policy-Attribute haben Sie bessere Möglichkeiten für die Verwaltung von Partitionen.
Die Methodendeklaration ist:

PartitionDefinition createPartitionDefinition(String Partitionsname,
String Partitionsklasse,
PartitionScope Geltungsbereich,
Map Attributzuordnung)

Diese Deklaration erstellt eine PartitionDefinition mit der angegebenen Partitionsklassifizierung (Partitionsklasse) für einen bestimmten Bereich von Partitionen. Außerdem können der Standardliste mit den Merkmalen für die HA-Manager-Gruppe für diese Partition weitere Attribut/Wert-Paare hinzugefügt werden. Mit den zusätzlichen Attributen können die HA-Manager-Policys exakter gesteuert werden. Die Zuordnungsattribute werden zur Laufzeit verwendet. Deshalb sollten die Anzahl der Attribute und die Menge der tatsächlich verwendeten Daten so gering wie möglich gehalten werden.

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.

Das folgende Beispiel veranschaulicht, wie der optionale Zuordnungsparameter implementiert werden kann:
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.

Attributeinschränkungen für createPartitionDefinition()

Die an die API createPartitionDefinition() übergebenen Attribute müssen den folgenden Regeln entsprechen, andernfalls wird bei der Erstellungsoperation eine HA-Manager-Ausnahme des Typs HAMapException ausgelöst, und die Partition wird nicht ordnungsgemäß erstellt. Diese Regeln gelten nicht nur für die Schlüssel/Wert-Paare des Zuordnungsattributs, sondern auch für den Partitionsnamen und die Klassifizierung. In diesem Fall gibt der Benutzer die Werte für die WPF-Schlüsselwerte –pn bzw. –pc an.
  • Die Zuordnung darf nicht null und nicht leer sein. WPF beugt diesem Fall mit Standardzuordnungswerten für beispielsweise den Partitionsnamen, die Standardklassifizierung und weitere Attribute, die im Abschnitt zu den HA-Manager-Policys dokumentiert sind, vor. Deshalb sollte diese Regel im Allgemeinen nicht zu Problemen führen.
  • Alle Schlüsselwerte müssen Zeichenfolgen (String) sein.
  • Alle Werte im Zuordnungsattribut müssen Zeichenfolgen sein.
  • Schlüssel dürfen nicht mit dem Unterstreichungszeichen ('_') beginnen.
  • Schlüssel und Werte dürfen kein Komma (',') enthalten.
  • Schlüssel und Werte dürfen kein Gleichheitszeichen ('=') enthalten.
  • Schlüssel und Werte dürfen keine Pipe-Zeichen ('|') enthalten.

PartitionManager#getPartitions

Mit dieser Methode kann eine Liste der bekannten Partitionen für dieses Cluster-Member abgerufen werden. Die Methodendeklaration ist:

String[] getPartitions()

PartitionManager#getApplicationName

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.

Die Methodendeklaration ist:

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.

PartitionManager#addPartition

Diese Methode wird von einer Anwendung aufgerufen, um dynamisch eine neue Partition hinzuzufügen. Die Methodendeklaration ist:

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.

PartitionManager#removePartition

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.

Die Methodendeklaration ist:

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.

PartitionManager#disablePartition

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.

Die Methodendeklaration ist:

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.

PartitionManager#reportPartitionFault

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().

PartitionManager#reportTransactionComplete

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.

Die Methodendeklaration ist:

void reportTransactionComplete(String Partitionsname, long Antwortzeit_ms)

Das Ergebnis dieser API wird gespeichert und an die Leistungsüberwachungseinrichtung von WPF übertragen. Die Leistungsüberwachungseinrichtung von WPF verfolgt die Einzelergebnisse im gesamten Cluster. Dieser Service wird später noch in verschiedenen Abschnitten dieses Dokuments erläutert. Beispiele finden Sie im Abschnitt "Erste Schritte".

Diese API wird im Beispiel WPFKeyBasedPartitionSample veranschaulicht.

PartitionManager#setHttpPartitionManager

Diese Methode zeigt WPF an, dass die Anwendung mit HTTP-Partitionierung arbeitet. Lesen Sie hierzu den Abschnitt "HTTP-Partitionierung" dieses Dokuments. Die Methodendeklaration ist:

void setHttpPartitionManager(HttpPartitionManagerInterface Manager)

PartitionManager# reportTransactionComplete

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.

Im Folgenden wird die Methodendeklaration des Interface PartitionManager vorgestellt:
	/**
	 * 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

Referenzartikel    

Nutzungsbedingungen | Feedback Letzte Aktualisierung: Mar 23, 2006 9:57:42 AM EST
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=?topic=/com.ibm.websphere.xd.doc/info/WPF51/rwpfPartitionManager.html

© Copyright IBM 2005, 2006. Alle Rechte vorbehalten.
Dieses Information Center beruht auf der Eclipse-Technologie. (http://www.eclipse.org)