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

PartitionManager

PartitionManager

Un'istanza di PartitionManager può essere ottenuta mediante l'applicazione da JNDI. Un'istanza è legata al JNDI mediante il runtime. Il seguente segmento di codice mostra il modo in cui il PSSB (partition stateless session bean) può ricercare un'istanza e memorizzarla nella cache utilizzando una variabile di istanza.
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);
	}
}

Fare riferimento ai programmatori di esempio per ulteriori esempi di utilizzo.

PartitionManager#JNDI_NAME

L'attributo JNDI_NAME può essere utilizzato da un'applicazione per richiamare il servizio PartitionManager utilizzando JNDI.

PartitionManager#createPartitionDefinition

Questo metodo ha tre firme, ognuno delle quali utilizzata per creare un'istanza PartitionDefinition che rappresenta una partizione dell'applicazione. Questo metodo è sovraccarico e pertanto è necessario scegliere il metodo appropriato in base al comportamento desiderato.

La prima firma del metodo è:

PartitionDefinition createPartitionDefinition(String partitionName)

Essa crea una PartitionDefinition con la classificazione e l'ambito del cluster predefinito. La stringa della classificazione predefinita è il valore di PartitionDefinition#DEFAULT_CLASSIFICATION (_DFLT). Questa versione non può creare una classificazione univoca per partizione, specificare le partizioni con ambito nodo o fornire un'associazione per gestire al meglio le partizioni.
La seconda firma del metodo è:

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

Essa crea una PartitionDefinition con la classificazione della partizione specificata (partitionClass) e un ambito di partizione particolare. Questa versione non fornisce un'associazione di attributi della politica per creare la definizione della partizione. Fornendo un'associazione dei criteri della politica aggiuntivi è possibile offrire opzioni di gestione delle partizioni migliori.
La firma del metodo è:

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

Essa crea una PartitionDefinition con la classificazione della partizione specificata (partitionClass) e un ambito di partizione particolare. Inoltre, è possibile aggiungere una serie di coppie di attributi e valori all'elenco predefinito delle proprietà del gruppo del gestore HA per questa partizione. Gli attributi aggiuntivi possono essere utilizzati per controllare le politiche del gestore HA in maniera più specifica. Gli attributi di associazione sono utilizzati durante il runtime. Pertanto, la riduzione del numero di attributi e dei dati correnti in uso è di fondamentale importanza.

Il primo valore inserito nell'API put() dell'associazione è la chiave del gestore HA, il secondo sarà il valore del gestore HA per tale coppia di chiavi.

Di seguito è riportato un esempio di utilizzo del parametro di associazione opzionale:
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 questo caso, viene creata un'associazione che ha un attributo della chiave del gestore HA impostato sullo stesso valore per tutte le partizioni(custom-attrib) e un secondo attributo denominato is named activateOn che ha un valore di stringa pari a 0-2. Questo esempio è stato utilizzato insieme al supporto delle politiche per creare una politica per ogni valore di avvio e richiedere quindi che la politica del server preferito sia univoca per ogni terza partizione. Fare riferimento alla sezione sulle politiche per maggiori dettagli su questo approccio.

createPartitionDefinition() Attribute Constraints

Gli attributi forniti all'API createPartitionDefinition() devono essere conformi alle seguenti regole altrimenti durante l'operazione di creazione verrà emessa una eccezione di errore del gestore HA HAMapException e la partizione non verrà creata correttamente. Ciò non solo ciò si applica alle coppie chiave-valore dell'attributo di associazione, ma anche al nome della partizione e alla classificazione. In questo caso, vengono forniti i valori per le chiavi predefinite della funzione di partizionamento (WPF) –pn e –pc rispettivamente.
  • L'associazione non può essere null o vuota. WPF garantisce nel caso in cui WPF fornisce valori di associazione predefiniti che includono il nome della partizioni, la classificazione predefinita e altri attributi documentati nella sezione delle politiche del gestore HA.
  • Tutte le chiavi dell'associazione devono essere stringhe.
  • Tutti i valori nell'associazione devono essere stringhe.
  • Nessuna chiave può cominciare con il carattere di sottolineatura ('_').
  • Nessuna chiave o valore può contenere il carattere virgola (',').
  • Nessuna chiave o valore può contenere il carattere uguale ('=').
  • Nessuna chiave o valore può contenere il carattere barra verticale ('|').

PartitionManager#getPartitions

Questo metodo può essere richiamato per ottenere un elenco delle partizioni note per questo membro del cluster. La firma del metodo è:

String[] getPartitions()

PartitionManager#getApplicationName

Questo metodo può essere richiamato per ottenere il nome dell'applicazione determinata dall'amministratore in fase di distribuzione. Questa stringa può essere utilizzata con il nome della partizione per verificare che sia univoca nel cluster (il nome dell'applicazione distribuita deve essere sempre univoco in un cluster WebSphere).

La firma del metodo è:

String getApplicationName()

Se questa viene utilizzata durante la creazione di una partizione, è preferibile distribuire l'applicazione J2EE con partizione con un nome minimo in termini di lunghezza di stringa, come ad esempio il nome utilizzato nel runtime del gestore HA.

È molto comune l'utilizzo di questo nome nei riferimenti alla partizione della versione che hanno la stessa applicazione J2EE con partizione nello stesso cluster, semplicemente installata con un nome differente, e ogni partizione, ad esempio PartitionA può essere invece chiamata Appv2r2.PartitionA. Pertanto, nel cluster l'utente può avere le partizioni Appv2r1.PartitionA e Appv2r2.PartitionAh attive contemporaneamente. L'applicazione indirizza la richiesta alla versione con cui è più compatibile. Questo è soltanto uno dei vari approcci al problema.

PartitionManager#addPartition

Questo metodo viene richiamato da un'applicazione per aggiungere dinamicamente una nuova partizione. La firma del metodo è:

void addPartition(PartitionDefinition name)

Se un membro del cluster aggiunge una partizione allora questa viene aggiunta automaticamente in maniera asincrona a tutti i membri del cluster. Utilizzando la politica dell'ambito cluster predefinita la partizione verrà attivata sul membro del cluster ricevendo la richiesta nonostante non sia garantito il funzionamento. Inoltre, l'attivazione di una partizione su un cluster è una funzione distribuita pertanto è possibile che si verifichi un ritardo tra l'ora in cui viene restituita l'API e l'attivazione reale della partizione. I programmatori dovrebbero tenere conto di tale ritardo.

Questa API viene dimostrata nell'esempio WPFKeyBasedPartition.

PartitionManager#removePartition

Questo metodo consente a un'applicazione di rimuovere una partizione in maniera dinamica. Se la partizione è attiva su un membro del cluster, allora viene anche disattivata. La partizione viene rimossa da tutti i membri del cluster online.

La firma del metodo è:

void removePartition(String name)

La disattivazione di una partizione su un cluster è una funzione distribuita pertanto è possibile che si verifichi un ritardo tra l'ora in cui viene restituita l'API e la disattivazione reale della partizione. I programmatori dovrebbero tenere conto di tale ritardo.

Per gli scenari in cui è più probabile che si verifichi un errore temporaneo piuttosto che un errore permanente, il programmatore dovrebbe utilizzare l'API disablePartition(). In questo caso, il meccanismo della politica può essere utilizzato per determinare se la partizione non deve essere riavviata o se deve essere riavviata su un altro membro del cluster, se ne esiste la possibilità.

PartitionManager#disablePartition

Questo metodo disabilita dinamicamente una partizione. Il richiamo di questo metodo disabilita la partizione su tutti i membri correnti del cluster. Ciò è possibile mediante il comando wpfadmin.

La firma del metodo è:

void removePartition(String name)

Quando il metodo viene richiamato, la partizione entra in uno stato disattivato oppure viene immediatamente attivata su un altro membro del cluster capace di ospitare la partizione. La partizione viene disattivata in base alle impostazioni della politica corrente ma per impostazione predefinita viene attivata su un altro membro del cluster, se disponibile. Se la partizione non viene riattivata automaticamente, il comando wpfadmin può essere utilizzato per abilitare il membro una volta che l'amministratore può esaminare i log e determinare le operazioni che devono essere effettuate prima di riabilitare la partizione.

partitionUnloadEvent(...) non viene richiamato in quanto l'applicazione richiama questo metodo ed elimina quante più informazioni prima di questo richiamo.

PartitionManager#reportPartitionFault

Questo metodo viene richiamato dall'applicazione per indicare un problema con una partizione attiva. Ciò provoca una reazione del gestore HA in base al valore del parametro di gravità. Questo metodo è riservato per un uso futuro e non è implementato in questo momento. Fare riferimento a disablePartition() per intraprendere un'azione correttiva.

PartitionManager#reportTransactionComplete

Questo metodo viene richiamato da un'applicazione per riportare che una transazione è stata completata con un determinato tempo di riposta per una partizione specifica. Esso viene di solito utilizzato quando l'applicazione utilizza un metodo asincrono ricevere le richieste di lavoro in opposizione delle richieste IIOP sincrone.

La firma del metodo è:

void reportTransactionComplete(String partitionName, long responseTime_ms)

Questo risultato dell'API è memorizzato e trasferito alla funzione di controllo delle prestazioni WPF. Tale funzione tiene traccia dei singoli risultati sull'intero cluster. Questo servizio viene discusso in più sezioni di questo manuale e i relativi esempi sono riportati nella sezione Introduzione.

Questa API viene dimostrata nell'esempio WPFKeyBasedPartitionSample.

PartitionManager#setHttpPartitionManager

Questo metodo indica a WPF che questa applicazione utilizza un partizionamento HTTP. Fare riferimento alla sezione relativa al partizionamento HTTP in questo manuale. La firma del metodo è:

void setHttpPartitionManager(HttpPartitionManagerInterface manager)

PartitionManager# reportTransactionComplete

Il PMI WPF contiene una statistica, responseTime, che viene utilizzata per misurare il tempo di risposta delle transazioni e il numero di transazioni eseguite per conto di una determinata partizione. Il tempo di risposta è raccolto dalle applicazioni utente. Le applicazioni utente aggiornano le statistiche PMI richiamando il metodo reportTransactionComplete dell'interfaccia com.ibm.websphere.wpf.PartitionManager.

Di seguito è riportata la firma del metodo nell'interfaccia PartitionManager:
	/**
	 * Tale firma deve essere chiamata per informare il runtime quando una transaz./operaz.
	 * viene completata sulla partizione. Viene utilizzata per registrare quante
	 * transazioni al secondo vengono eseguite per partizione.
	 * @param partitionName il nome della partizione.
	 * @param responseTime_ms il tempo di risposta per la transazione.
	 * @throws IllegalStateException Se l'applicazione della chiamata non ha una partizione 
handler bean
	 */	
   void reportTransactionComplete(String partitionName, long responseTime_ms)

È possibile richiamare PartitionManager.reportTransactionComplete nel bean PSSB (partition stateless session bean). La procedura ottimale consiste nel calcolo da parte degli utenti del tempo di transazione di una transazione e utilizzare quindi questa API per riportare tale tempo. Di seguito è riportato un esempio. Il metodo buy è un metodo per simulare la transazione nel bean WPFKeyBasedPartition nell'applicazione WPFKeyBasedPartitionSample.

/**
	 * Un metodo buy. Questo metodo non effettua alcuna operazione oltre a riportare il completamento
	 * della transazione. La transazione ha un valore casuale compreso 
   tra 0 ms e 1000 ms.
	 * 
	 * @param partitionName
	 * @return the partition name
	 */
	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 prima volta che viene richiamato il metodo PartitionManager.reportTransactionComplete per una determinata partizione su un server delle applicazioni, viene creato un modulo PMI per questa partizione raggruppato in base al nome dell'applicazione e al nome EJB della sessione. Ad esempio, se il nome dell'applicazione è app1 e il nome EJB di sessione è session1, allora il modulo PMI sarà raggruppato in base a app1#session1. Ciò verrà descritto successivamente nella sezione relativa al percorso PMI.

Le statistiche di responseTime sono progettate per calcolare alcuni fattori statistici, ad esempio il tempo di risposta medio, il tempo di risposta minimo, il tempo di risposta massimo e la somma dei quadrati dei tempi di risposta. Gli utenti possono accedere a tali dati interrogando i dati PMI mediante il comando wpfadmin, il comando wsadmin o MBean.




Related concepts
Modello di programmazione della struttura per l'utilità di partizione

Argomento Riferimenti    

Termini di utilizzo | Commenti Ultimo aggiornamento: Mar 20, 2006 1:10:47 PM 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. Tutti i diritti riservati.
Questo centro informazioni utilizza la tecnologia Eclipse. (http://www.eclipse.org)