WebSphere Extended Deployment, Version 6.0.x     Systèmes d'exploitation : AIX, HP-UX, Linux, Solaris, Windows, z/OS

PartitionManager

PartitionManager

Une instance de PartitionManager peut être obtenue par l'application à partir de l'interface JNDI. Une instance est liée à JNDI par l'environnement d'exécution. Le segment de code suivant indique comment le bean PSSB (Partition Stateless Session Bean) peut rechercher une instance, puis la mettre en mémoire cache à l'aide d'une variable d'instance.
public void setSessionContext(javax.ejb.SessionContext ctx) {
	mySessionCtx = ctx;
	try
	{
		// Mise en cache de différentes références.
		InitialContext ic = new InitialContext();
		bookHome = (PartitionManager)ic.lookup(PartitionManager.JNDI_NAME);
	}
	catch(Exception e)
	{
		throw new EJBException(e);
	}
}

Pour consulter des exemples d'utilisation supplémentaires, voir les exemples des programmeurs.

PartitionManager#JNDI_NAME

L'attribut JNDI_NAME peut être utilisé par une application pour extraire le service PartitionManager à l'aide de l'interface JNDI.

PartitionManager#createPartitionDefinition

Cette méthode comporte trois signatures qui sont utilisées pour créer une instance PartitionDefinition représentant une partition de l'application. Cette méthode est utilisée très fréquemment et la méthode appropriée doit être choisie en fonction du comportement souhaité.

La première signature de la méthode est :

PartitionDefinition createPartitionDefinition(String partitionName)

Elle crée une définition de partition (PartitionDefinition) avec la classification par défaut et la portée de type "cluster". La chaîne de classification par défaut correspond à la valeur de PartitionDefinition#DEFAULT_CLASSIFICATION (_DFLT). Cette version ne permet pas de créer une classification unique par partition. Vous devez donc définir des partitions au niveau des noeuds ou fournir une mappe pour assurer une meilleure gestion des partitions.
La seconde signature de la méthode est :

PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope)

Cette signature crée une définition de partition (PartitionDefinition) avec la classification de partition indiquée (partitionClass) et une portée de partition spécifique. Cette version ne fournit pas de mappe des attributs de stratégie pour créer la définition de partition. L'utilisation d'une mappe pour les attributs de stratégie supplémentaires peut permettre une meilleure gestion des partitions.
La signature de la méthode est :

PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope,
Map attributemap)

Cette signature crée une définition de partition (PartitionDefinition) avec la classification de partition indiquée (partitionClass) et une portée de partition spécifique. En outre, un ensemble de paires attribut-valeur peut être ajouté à la liste de propriétés par défaut du gestionnaire haute disponibilité pour cette partition. Les attributs supplémentaires peuvent être utilisés pour contrôler avec plus de précision les stratégies du gestionnaire haute disponibilité. Les attributs de mappe sont utilisés pendant l'exécution. Il est donc important de limiter le nombre d'attributs et les données réelles utilisées.

La première valeur insérée dans l'API put() de la mappe est la clé du gestionnaire haute disponibilité. La seconde valeur insérée est la valeur du gestionnaire haute disponibilité définie pour cette paire clé-valeur.

Un exemple indiquant comment utiliser le paramètre facultatif map peut apparaître sous la forme suivante :
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;
	}

Dans cet exemple, on crée une mappe comportant un attribut de clé du gestionnaire haute disponibilité doté d'une valeur identique pour toutes les partitions (custom-attrib) et un second attribut appelé "activateOn" et doté de la valeur de type chaîne 0-2. Cet exemple a été utilisé avec le support de stratégie afin de créer une stratégie pour chaque valeur de début et requiert une stratégie de serveur favoris unique toutes les trois partitions. Pour plus d'informations sur cette procédure, voir les sections relatives aux stratégies.

createPartitionDefinition() Attribute Constraints

Les attributs transmis à l'API createPartitionDefinition() doivent respecter les règles ci-après. Dans le cas contraire, une exception HAMapException liée à la défaillance du gestionnaire haute disponibilité est générée lors de l'opération de création et la partition n'est pas créée correctement. Cela s'applique non seulement à la paire valeur-clé de l'attribut de mappe mais également au nom de la partition et à la classification (dans ce cas, vous devez indiquer les valeurs de clés WPF par défaut, respectivement –pn et –pc).
  • La mappe ne doit pas être indéfinie (null) ni vide. WPF permet d'éviter de rencontrer ce cas de figure en fournissant des valeurs de mappe par défaut avec le nom de partition, la classification par défaut et d'autres attributs décrits dans la section relative à la stratégie du gestionnaire haute disponibilité. Cette règle ne doit donc pas poser de problème particulier.
  • Toutes les clés de la mappe doivent être des chaînes.
  • Toutes les valeurs de la mappe doivent être des chaînes.
  • Aucune clé ne doit commencer par le caractère trait de soulignement ('_').
  • Aucune clé ou valeur ne doit contenir une virgule (',').
  • Aucune clé ou valeur ne doit contenir le signe égal ('=').
  • Aucune clé ou valeur ne doit contenir de barre verticale ('|').

PartitionManager#getPartitions

Cette méthode peut être appelée pour extraire la liste des partitions connues pour ce membre de cluster. La signature de la méthode est :

String[] getPartitions()

PartitionManager#getApplicationName

Cette méthode peut être appelée pour extraire le nom de l'application déterminé par l'administrateur lors du déploiement. Cette chaîne peut être utilisée dans le nom de la partition pour s'assurer qu'elle est unique au sein du cluster (le nom de l'application déployée doit être unique au sein d'un cluster WebSphere).

La signature de la méthode est :

String getApplicationName()

Si vous l'utilisez lors de la création d'une partition, il est conseillé de déployer l'application J2EE partitionnée en utilisant un nom de chaîne court car ce nom est utilisé dans l'environnement d'exécution du gestionnaire haute disponibilité.

L'une des procédures courantes est d'utiliser cette méthode pour associer une version aux références de la partition en ayant la même application J2EE partitionnée sur le même cluster mais installée avec un nom différent et chaque partition. La partition PartitionA peut ensuite être appelée Appv2r2.PartitionA. Dans le cluster, vous pouvez donc avoir des partitions Appv2r1.PartitionA et Appv2r2.PartitionA qui sont actives simultanément. L'application adresse les demandes à la version avec laquelle elles sont compatibles. C'est une procédure parmi d'autres.

PartitionManager#addPartition

Cette méthode est appelée par une application pour ajouter une nouvelle partition de manière dynamique. La signature de la méthode est :

void addPartition(PartitionDefinition name)

Si un membre du cluster ajoute une partition, celle-ci est également ajoutée de manière asynchrone à tous les membres du cluster en cours. Si vous utilisez la stratégie définie au niveau du cluster par défaut, la partition est généralement activée sur le membre qui reçoit la demande mais ce comportement n'est pas systématique. En outre, l'activation d'une partition sur un cluster est une fonction répartie. Pour cette raison, un délai doit être pris en compte entre le renvoi de l'API et l'activation réelle de la partition. Les programmeurs doivent prendre ces éléments en considération.

Cette API est présentée dans l'exemple WPFKeyBasedPartition.

PartitionManager#removePartition

Cette méthode permet à une application de supprimer une partition de manière dynamique. Si la partition est active sur l'un des membres du cluster, elle est également désactivée. La partition est supprimée de tous les membres du cluster en ligne.

La signature de la méthode est :

void removePartition(String name)

La désactivation d'une partition sur un cluster est une fonction répartie. Pour cette raison, un délai doit être pris en compte entre le renvoi de l'API et l'activation réelle de la partition. Les programmeurs doivent prendre ces éléments en considération.

Dans les scénarios ou une erreur temporaire est suspectée plutôt qu'une erreur permanente, le programmeur doit envisager d'utiliser l'API disablePartition(). Dans ce cas, le mécanisme de la stratégie peut être utilisé pour déterminer si la partition ne doit pas redémarrer ou si elle peut redémarrer sur un autre membre du cluster, dans la mesure du possible.

PartitionManager#disablePartition

Cette méthode permet de désactiver une partition. L'appel de la méthode entraîne la désactivation de la partition sur les membres du cluster en cours. Cette opération peut également être effectuée à l'aide de la commande wpfadmin.

La signature de la méthode est :

void removePartition(String name)

Lorsque la méthode est appelée, la partition passe à l'état "désactivé" ou elle s'active immédiatement sur un autre membre du cluster capable de l'héberger. La partition est désactivée en fonction des paramètres de stratégie en cours mais elle est activée par défaut sur un autre membre du cluster si celui-ci est disponible. Si la partition n'est pas automatiquement réactivée, wpfadmin peut être utilisé pour activer le membre, une fois que l'administrateur a vérifié les journaux et déterminé les actions à exécuter avant la réactivation de la partition.

La méthode partitionUnloadEvent(...) n'est pas appelée car l'application appelle cette méthode et peut nettoyer autant de données que possible avant l'invocation.

PartitionManager#reportPartitionFault

Cette méthode est appelée par l'application pour signaler un incident sur une partition active. Elle entraîne la réaction du gestionnaire haute disponibilité en fonction de la valeur du paramètre de gravité. Cette méthode est réservée pour une utilisation ultérieure et n'est pas encore disponible. Voir disablePartition() pour exécution d'une action corrective.

PartitionManager#reportTransactionComplete

Cette méthode est appelée par une application pour signaler qu'une transaction vient de se terminer avec un temps de réponse donné pour une partition spécifique. Elle est généralement utilisée lorsqu'une application fait appel à une méthode asynchrone pour recevoir les demandes, par opposition aux demandes synchrones IIOP.

La signature de la méthode est :

void reportTransactionComplete(String nom_partition, long temps_réponse_ms)

Le résultat de cette API est stocké et transmis au composant WPF Performance Monitoring. Le composant WPF Performance Monitoring suit les résultats spécifiques dans l'ensemble du cluster. Ce service est décrit dans plusieurs parties du présent document et des exemples sont également inclus dans la section consacrée au démarrage.

Cette API est présentée dans l'exemple WPFKeyBasedPartitionSample.

PartitionManager#setHttpPartitionManager

Cette méthode indique à WPF que cette application utilise la fonction de partitionnement HTTP. Voir la section relative à la fonction de partitionnement HTTP du présent document. La signature de la méthode est :

void setHttpPartitionManager(HttpPartitionManagerInterface manager)

PartitionManager# reportTransactionComplete

Le composant WPF PMI inclut une statistique, responseTime, qui est utilisée pour évaluer le temps de réponse des transactions et le nombre de transactions exécutées pour une partition donnée. Le temps de réponse est collecté par des applications utilisateur. Les applications utilisateur mettent à jour les statistiques PMI en appelant la méthode reportTransactionComplete de l'interface com.ibm.websphere.wpf.PartitionManager.

La signature de la méthode dans l'interface PartitionManager est indiquée ci-après :
	/**
	 * Cette méthode doit être appelée pour indiquer à l'environnement d'exécution quand une transaction/opération
	 * est terminée sur cette partition. Elle permet de consigner le nombre de transactions effectuées par
	 * seconde et par partition.
	 * @param nom_partition est le nom de la partition.
	 * @param temps_réponse_ms est le temps de réponse pour la transaction.
	 * @throws IllegalStateException si l'application appelante ne dispose pas de 
bean gestionnaire de partition
	 */	
   void reportTransactionComplete(String nom_partition, long temps_réponse_ms)

Les utilisateurs peuvent appeler PartitionManager.reportTransactionComplete dans le bean PSSB. La procédure recommandée consiste à calculer le temps d'une transaction, puis à utiliser cette API pour signaler le le temps de transaction. Voici un exemple. La méthode buy permet de simuler la transaction dans le bean WPFKeyBasedPartition Bean au sein de l'application WPFKeyBasedPartitionSample.

/**
	 * Méthode buy. Cette méthode est chargée uniquement d'indiquer que la transaction
	 * est terminée. La transaction est associée à une valeur aléatoire comprise entre 
   0 ms et 1000 ms.
	 * 
	 * @param nom_partition
	 * @return nom de la partition
	 */
	public String buy(String nom_partition) {
    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 première fois que PartitionManager.reportTransactionComplete est appelée pour une partition donnée sur un serveur d'applications, un module PMI est créé pour cette partition et classé en fonction du nom de l'application et du nom du bean session (EJB). Par exemple, si le nom de l'application est app1 et que le nom du bean session est session1, le module PMI est classé sous le nom app1#session1. Cette procédure est décrite plus en détails dans la section relative au chemin PMI.

Les statistiques responseTime sont conçues pour calculer certaines données statistiques, par exemple le temps de réponse moyen, minimal et maximal et la somme des carrés des temps de réponses. Vous pouvez accéder à ces informations en interrogeant les données PMI à l'aide de la commande wpfadmin, wsadmin ou du MBean.




Related concepts
Modèle de programmation de la fonction de partitionnement

Rubrique Référence    

Conditions d'utilisation | Commentaires Dernière mise à jour le : Mar 16, 2006 10:01:30 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. All Rights Reserved.
Ce centre de documentation s'appuie sur la technologie Eclipse. (http://www.eclipse.org)