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.
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é.
PartitionDefinition createPartitionDefinition(String partitionName)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope,
Map attributemap)
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.
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.
String[] getPartitions()
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
void setHttpPartitionManager(HttpPartitionManagerInterface manager)
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.
/** * 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