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.
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.
PartitionDefinition createPartitionDefinition(String partitionName)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope,
Map attributemap)
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.
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.
String[] getPartitions()
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).
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.
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.
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.
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.
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.
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.
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.
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.
void reportTransactionComplete(String partitionName, long responseTime_ms)
Essa API é demonstrada no exemplo de WPFKeyBasedPartitionSample.
void setHttpPartitionManager(HttpPartitionManagerInterface manager)
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.
/** * 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