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

PartitionManager

PartitionManager

Uma instância do PartitionManager pode ser obtida pelo aplicativo a partir da JNDI. Uma instância é ligada à JNDI pelo tempo de execução. O segmento de código a seguir mostra como o PSSB (Partition Stateless Session Bean) pode consultar uma instância e, em seguida, armazená-la em cache utilizando uma variável de instância.
public void setSessionContext(javax.ejb.SessionContext ctx) {
	mySessionCtx = ctx;
	try
	{
		// armazenar em cache várias referências.
InitialContext ic = new InitialContext();
		bookHome = (PartitionManager)ic.lookup(PartitionManager.JNDI_NAME);
	}
	catch(Exception e)
	{
		throw new EJBException(e);
	}
}

Consulte os programadores de amostra para obter uso de exemplo adicional.

PartitionManager#JNDI_NAME

O atributo JNDI_NAME pode ser utilizado por um aplicativo para recuperar o serviço PartitionManager utilizando JNDI.

PartitionManager#createPartitionDefinition

Este método possui três assinaturas e cada uma é utilizada para criar uma instância PartitionDefinition que representa uma partição do aplicativo. Este método está sobrecarregado e o método apropriado deve ser escolhido dependendo do comportamento desejado.

A primeira assinatura de método é:

PartitionDefinition createPartitionDefinition(String partitionName)

Isto cria um PartitionDefinition com a classificação padrão e o escopo do cluster. A cadeia de classificação padrão é o valor de PartitionDefinition#DEFAULT_CLASSIFICATION (_DFLT). Esta versão não pode criar uma classificação exclusiva por partição, especifique partições com Escopo Definido pelo Nó ou forneça um mapa para melhor gerenciar as partições.
A segunda assinatura de método é:

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

Isto cria um PartitionDefinition com a classificação de partição especificada (partitionClass) e um escopo de partição específico. Esta versão não fornece um mapa de atributos de políticas para criar a definição de partição. O fornecimento de um mapa de atributos de políticas extras pode oferecer melhores opções de gerenciamento de partições.
A assinatura do método é:

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

Isto cria um PartitionDefinition com a classificação de partição especificada (partitionClass) e um escopo de partição específico. Além disso, um conjunto de pares de atributo e valor pode ser incluído na lista padrão de propriedades do grupo do gerenciador HA para esta partição. Os atributos extras podem ser utilizados para controlar as políticas do gerenciador HA de forma mais específica. Os atributos de mapa ficam em uso durante o tempo de execução. Portanto, é importante minimizar o número de atributos e os dados reais em uso.

O primeiro valor inserido na API put() do mapa é a chave do gerenciador HA, o segundo será o valor do gerenciador HA para esse par de chaves.

Um exemplo ao utilizar o parâmetro de mapa opcional pode ser implementado como algo semelhante ao seguinte:
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));  // possuem 3 servidores,
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;
	}

Neste caso, foi criado um mapa que tinha um atributo de chave do gerenciador HA definido como o mesmo valor para todas as partições (custom-attrib) e um segundo que é denominado activateOn e tinha um valor de cadeia 0-2. Este exemplo foi utilizado junto com o suporte de política para criar uma política para cada valor inicial e solicitar que a política de servidor preferencial seja exclusiva para cada terceira partição. Consulte as seções de política para obter detalhes adicionais sobre essa abordagem.

createPartitionDefinition() Attribute Constraints

Os atributos fornecidos para a API createPartitionDefinition() devem estar de acordo com as seguintes regras ou, durante a operação de criação, será emitida uma exceção de falha do gerenciador HA, HAMapException, e a partição não será criada corretamente. Não apenas isso se aplica aos pares de chave e valor do atributo do mapa, mas também ao nome e à classificação da partição. Neste caso, você fornece os valores para para os valores de chaves padronizados pelo WPF (recurso de particionamento) –pn e –pc, respectivamente.
  • O mapa não pode ser nulo ou vazio. O WPF garante que, neste caso, o WPF fornece valores de mapa padrão que incluem o nome da partição, a classificação padrão e outros atributos documentados na seção Política do gerenciador HA, portanto, em geral, esta regra não deve ser uma preocupação.
  • Todas as chaves no mapa devem ser Cadeias.
  • Todos os valores no mapa devem ser Cadeias.
  • Nenhuma chave pode começar com um sublinhado ('_').
  • Nenhuma chave ou valor pode conter uma vírgula (',').
  • Nenhuma chave ou valor pode conter o sinal de igual ('=').
  • Nenhuma chave ou valor pode conter uma barra vertical ('|').

PartitionManager#getPartitions

Este método pode ser chamado para obter uma lista das partições conhecidas para este membro de cluster. A assinatura do método é:

String[] getPartitions()

PartitionManager#getApplicationName

Este método pode ser chamado para obter o nome do aplicativo determinado pelo administrador no momento da implementação. Esta cadeia pode ser utilizada no nome da partição para assegurar que ele seja exclusivo no cluster (o nome do aplicativo implementado deve ser exclusivo em um cluster do WebSphere).

A assinatura do método é:

String getApplicationName()

Se isso for utilizado ao criar uma partição, sugerimos que implemente o aplicativo J2EE particionado com um nome mínimo em termos de comprimento de cadeia, como o nome é utilizado em todo o tempo de execução do gerenciador HA.

Uma aplicação comum pode ser utilizar isso para referências de partição de versão que possuem o mesmo aplicativo J2EE particionado no mesmo cluster, simplesmente instalado com um nome diferente e cada partição, por exemplo, PartitionA pode ser então chamado de Appv2r2.PartitionA. Portanto, no cluster, o usuário pode ter Appv2r1.PartitionA e Appv2r2.PartitionAh ativos simultaneamente. O aplicativo apenas endereçaria o pedido para a versão com a qual ele é compatível. Isto é apenas uma abordagem deste problema.

PartitionManager#addPartition

Este método é chamado por um aplicativo para incluir dinamicamente uma nova partição. A assinatura do método é:

void addPartition(PartitionDefinition name)

Se um membro de cluster incluir uma partição, ela também será incluída de forma assíncrona em todos os membros de cluster automaticamente. Utilizando a política com escopo de cluster padrão, a partição geralmente será ativada no membro de cluster que recebe o pedido, embora esse não seja um comportamento garantido. Além disso, a ativação de uma partição em um cluster é uma função distribuída, portanto, um retardo de tempo é aceitável entre o tempo em que a API é retornada e a ocorrência da ativação real da partição. Isto deve ser considerado pelos programadores.

Esta API é demonstrada no exemplo de WPFKeyBasedPartition.

PartitionManager#removePartition

Este método permite que um aplicativo remova uma partição dinamicamente. Se a partição estiver ativa atualmente em qualquer membro de cluster, ela também será desativada. A partição é removida de todos os membros de cluster on-line.

A assinatura do método é:

void removePartition(String name)

A desativação de uma partição em um cluster é uma função distribuída, portanto, um retardo de tempo é aceitável entre o tempo em que a API é retornada e a ocorrência da desativação real da partição. Isto deve ser considerado pelos programadores.

Para cenários nos quais há suspeita de um erro temporário em vez de um erro permanente, o programador deve considerar a utilização da API disablePartition(). Neste caso, o mecanismo de política pode ser utilizado para determinar se a partição realmente não deve ser reiniciada ou se, de fato, pode ser reiniciada em outro membro de cluster, se possível.

PartitionManager#disablePartition

Isto desativa dinamicamente uma partição. A chamada deste método desativa a partição nos membros de cluster atuais. Isso também pode ser realizado através do comando wpfadmin.

A assinatura do método é:

void removePartition(String name)

Quando o método for chamado, a partição entrará em um estado desativado ou será ativada imediatamente em outro membro de cluster capaz de hospedar a partição. A partição será desativada, dependendo das configurações de política atuais mas, por padrão, será ativada em outro membro de cluster, se houver algum disponível. Se a partição não for automaticamente reativada, o wpfadmin poderá ser utilizado para ativar o membro depois que o administrador puder rever os registros e determinar qualquer ação que deva ser feita antes de reativar a partição.

O partitionUnloadEvent(...) não será chamado, pois o aplicativo chamará este método e poderá limpar o máximo possível antes da chamada.

PartitionManager#reportPartitionFault

Este método é chamado pelo aplicativo para indicar um problema com uma partição ativa. Isto faz com que o gerenciador HA reaja de acordo com o valor do parâmetro de gravidade. Este método está reservado para utilização futura e não será implementado neste momento. Consulte disablePartition() para executar a ação corretiva.

PartitionManager#reportTransactionComplete

Este método é chamado por um aplicativo para relatar uma transação recém-concluída com um tempo de resposta específico para uma determinada partição. Isto normalmente é utilizado quando o aplicativo está utilizando um método assíncrono para receber pedidos de trabalho em oposição a pedidos de IIOP síncronos.

A assinatura do método é:

void reportTransactionComplete(String partitionName, long responseTime_ms)

Este resultado da API é armazenado e transferido para o recurso WPF Performance Monitoring. O recurso WPF Performance Monitoring rastreará os resultados individuais em todo o cluster. Este serviço é discutido em várias partes deste documento e os exemplos também estão incluídos na seção de Introdução.

Essa API é demonstrada no exemplo de WPFKeyBasedPartitionSample.

PartitionManager#setHttpPartitionManager

Isto indica ao WPF que este aplicativo utiliza o HTTP Partitioning. Consulte a seção HTTP Partitioning deste documento. A assinatura do método é:

void setHttpPartitionManager(HttpPartitionManagerInterface manager)

PartitionManager# reportTransactionComplete

O WPF PMI contém uma estatística, responseTime, que é utilizada para calcular o tempo de resposta de transações e o número de transações executadas em nome de uma partição específica. O tempo de resposta é coletado por aplicativos de usuários. Os aplicativos do usuário atualizam as estatísticas de PMI chamando o método reportTransactionComplete da interface com.ibm.websphere.wpf.PartitionManager.

A seguir está a assinatura do método na interface PartitionManager:
	/**
	 * Isto deve ser chamado para informar o tempo de execução quando uma
    transação/operação
	 * é concluída nesta partição. É utilizado para registrar quantas
	 * transações por segundo estão sendo executadas por partição.
	 * @param partitionName o nome da partição.
	 * @param responseTime_ms o tempo de resposta da transação.
	 * @throws IllegalStateException Se o aplicativo de chamada não tiver nenhuma partição
handler bean
	 */	
   void reportTransactionComplete(String partitionName, long responseTime_ms)

Você pode chamar PartitionManager.reportTransactionComplete no PSSB (Partition Stateless Session Bean). A prática recomendável é que os usuários calculem o tempo de transação de uma transação e, em seguida, utilizem esta API para relatar o tempo de transação. Aqui está um exemplo. O método buy é um método para simular a transação no Bean WPFKeyBasedPartition no aplicativo WPFKeyBasedPartitionSample.

/**
	 * Um método buy. Este método apenas relata a conclusão
	 * da transação. A transação utiliza um valor aleatório que vai de
   0 ms a 1000 ms.
	 * 
	 * @param partitionName
	 * @return o nome da partição
	 */
	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;
	}

Na primeira vez em que o PartitionManager.reportTransactionComplete é chamado para uma determinada partição em um servidor de aplicativos, é criado um módulo de PMI para esta partição agrupada pelo nome do aplicativo e pelo nome EJB da sessão. Por exemplo, se o nome do aplicativo for app1 e o nome EJB da sessão for session1, o módulo PMI será ignorado por app1#session1. Descreveremos isto mais detalhadamente na seção do caminho de PMI.

As estatísticas de responseTime são designadas para calcular alguns fatos estatísticos, por exemplo, tempo médio de resposta, tempo mínimo de resposta, tempo máximo de resposta e a soma dos quadrados dos tempos de resposta. Os usuários podem acessar estes dados consultando os dados de PMI utilizando o comando wpfadmin, o comando wsadmin ou MBean.




Related concepts
Modelo de Programação de Estrutura do Recurso de Particionamento

Tópico de Referência    

Termos de Uso | Feedback Última atualização: Mar 21, 2006 12:52:01 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. Todos os Direitos Reservados.
Este centro de informações é desenvolvido em tecnologia Eclipse. (http://www.eclipse.org)