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); } }자세한 사용 예는 샘플 프로그래머를 참조하십시오.
이 메소드에는 세 개의 서명이 있으며 각 서명은 응용프로그램 파티션을 표시하는 PartitionDefinition 인스턴스를 작성하는 데 사용됩니다. 이 메소드는 과부하되며 원하는 작동에 따라 적절한 메소드를 선택해야 합니다.
PartitionDefinition createPartitionDefinition(String partitionName)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope)
PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope,
Map attributemap)
맵 put() API에 삽입된 첫 번째 값은 HA 관리자 키이고 두 번째 값은 해당 키 쌍의 HA 관리자 값입니다.
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; }
이 경우 하나의 HA 관리자 키 속성을 모든 파티션에서 동일한 값으로 설정하며(custom-attrib) 두 번째는 이름이 activateOn이고 문자열 값이 0 - 2인 맵을 작성합니다. 이 예를 정책 지원과 함께 사용하여 각 시작 값에 대한 정책을 작성했으며 선호하는 서버 정책을 모든 세 번째 파티션의 고유 정책으로 요청했습니다. 이 접근 방법에 대한 세부사항은 정책 섹션을 참조하십시오.
String[] getPartitions()
전개 시 관리자가 판별한 응용프로그램 이름을 보려면 이 메소드를 사용합니다. 클러스터에서 고유한 이름이 되도록 이 문자열을 파티션 이름에 사용할 수 있습니다. 전개된 응용프로그램 이름은 WebSphere 클러스터에서 고유해야 합니다.
String getApplicationName()
파티션 작성 시 사용할 경우 이름은 HA 관리자 런타임 전체에서 사용되므로 문자열 길이가 최소인 이름으로 파티션된 J2EE 응용프로그램을 전개하는 것이 좋습니다.동일한 파티션된 J2EE 응용프로그램의 동일한 클러스터를 단순히 다른 이름으로 설치하여 파티션 참조를 버전화하는 데 사용할 수 있으며 각 파티션, 예를 들어 PartitionA를 Appv2r2.PartitionA로 대체할 수 있습니다. 따라서 클러스터에서 사용자는 Appv2r1.PartitionA 및 Appv2r2.PartitionAh를 동시에 활성화할 수 있습니다. 응용프로그램은 호환되는 버전에 간단하게 요청을 지정합니다. 이 방법은 이 문제점에 대한 한 가지 접근 방법입니다.
void addPartition(PartitionDefinition name)
클러스터 구성원이 파티션을 추가하면, 자동으로 현재 모든 클러스터 구성원에 비동기식으로 추가됩니다. 일반적으로 파티션은 기본 클러스터 범위 정책을 사용하여 요청을 수신하는 클러스터 구성원에서 활성화되지만 이 작동이 보장된 것은 아닙니다. 또한 클러스터에서 파티션 활성화는 분배된 기능이므로 API가 리턴하는 시간과 파티션의 실제 활성화가 발생하는 사이의 시간 지연은 적당합니다. 프로그래머가 이를 담당해야 합니다.
이 API는 WPFKeyBasedPartition 예에서 시연됩니다.
이 메소드를 통해 응용프로그램은 파티션을 동적으로 제거할 수 있습니다. 파티션이 클러스터 구성원에서 현재 활성화되어 있다면 또한 비활성화됩니다. 모든 온라인 클러스터 구성원에서 파티션이 제거됩니다.
void removePartition(String name)
클러스터에서 파티션 비활성화는 분배된 기능이므로 API가 리턴하는 시간과 파티션의 실제 비활성화가 발생하는 사이의 시간 지연은 적당합니다. 프로그래머가 이를 담당해야 합니다.영구적인 오류가 아닌 임시 오류가 의심되는 시나리오의 경우 프로그래머는 disablePartition() API 사용을 고려해야 합니다. 이 경우 정책 메커니즘을 사용하여 파티션을 실제로 재시작해서는 안되는지 또는 기회가 있으면 다른 클러스터 구성원에서 재시작할 수 있는지를 판별할 수 있습니다.
파티션을 동적으로 사용 불가능하게 합니다. 이 메소드를 호출하면 현재 클러스터 구성원에서 파티션이 사용 불가능합니다. 또한 wpfadmin 명령을 통해 수행할 수 있습니다.
void removePartition(String name)
메소드가 호출되면 파티션은 비활성화된 상태가 되거나 파티션을 호스트할 수 있는 다른 클러스터 구성원에서 즉시 활성화됩니다. 파티션은 현재 정책 설정에 따라 비활성화되지만 기본적으로 사용 가능한 다른 클러스터 구성원에서 활성화됩니다. 파티션이 자동으로 재활성화되지 않는 경우 관리자가 로그를 검토하고 파티션을 다시 사용 가능하게 하기 전에 수행해야 하는 조치를 판별할 수 있으면 wpfadmin을 사용하여 구성원을 사용 가능하게 할 수 있습니다.partitionUnloadEvent(...)는 응용프로그램이 이 메소드를 호출할 때 호출되지 않으며 호출 전에 가능한 많이 정리할 수 있습니다.
이 메소드는 활성 파티션에 문제가 있음을 표시하기 위해 응용프로그램에서 호출합니다. HA 관리자는 심각도 매개변수의 값에 따라 반응합니다. 이 메소드는 나중에 사용하기 위해 예약되어 있으며 현재 구현되지 않습니다. 정정 조치를 수행하려면 disablePartition()을 참조하십시오.
이 메소드는 특정 파티션의 특정 응답 시간으로 트랜잭션이 완료되었음을 보고하기 위해 응용프로그램에서 호출합니다. 동기 IIOP 요청과는 반대로 일반적으로 응용프로그램이 작업 요청을 수신하기 위해 비동기 메소드를 사용할 때 사용됩니다.
void reportTransactionComplete(String partitionName, long responseTime_ms)
이 API는 WPFKeyBasedPartitionSample 예에서 시연됩니다.
void setHttpPartitionManager(HttpPartitionManagerInterface manager)
WPF PMI에는 트랜잭션의 응답 시간 및 특정 파티션 대신 실행된 트랜잭션 수를 측정하는 데 사용되는 하나의 통계 responseTime이 들어 있습니다. 응답 시간은 사용자 응용프로그램에서 수집합니다. 사용자 응용프로그램은 com.ibm.websphere.wpf.PartitionManager 인터페이스의 reportTransactionComplete 메소드를 호출하여 PMI 통계를 갱신합니다.
/** * This should be called to inform the runtime when a transaction/operation * completes on this partition. This is used for records how many * transactions per seconds are being executed per partition. * @param partitionName the name of the partition. * @param responseTime_ms the response time for the transaction. * @throws IllegalStateException If the calling application has no partition handler bean */ void reportTransactionComplete(String partitionName, long responseTime_ms)
사용자는 PSSB(Partition Stateless Session Bean)에서 PartitionManager.reportTransactionComplete를 호출할 수 있습니다. 가장 적절한 예로 사용자가 트랜잭션의 트랜잭션 시간을 계산한 후에 이 API를 사용하여 트랜잭션 시간을 보고하는 경우가 있습니다. 다음은 예제입니다. 메소드 buy는 WPFKeyBasedPartitionSample 응용프로그램의 WPFKeyBasedPartition Bean에서 트랜잭션을 시뮬레이트하는 메소드입니다.
/** * A buy method. This method does nothing now except report the transaction * completion. The transaction takes a random value ranging from 0 ms to 1000ms. * * @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; }
한 Application Server의 특정 파티션에서 PartitionManager.reportTransactionComplete를 처음 호출하는 경우 이 파티션에서 응용프로그램 이름 및 세션 EJB 이름별로 그룹화된 PMI 모듈이 작성됩니다. 예를 들어, 응용프로그램 이름이 app1이고 세션 EJB 이름이 session1인 경우 PMI 모듈은 app1#session1로 그룹화됩니다. PMI 경로 섹션에서 더 자세히 설명합니다.
responseTime 통계는 예를 들어, 평균 응답 시간, 최소 응답 시간, 최대 응답 시간 및 응답 시간 제곱의 합과 같은 일부 통계 요인을 계산하기 위한 것입니다. wpfadmin 명령, wsadmin 명령 또는 MBean을 통해 PMI 데이터를 조회하여 이 데이터에 액세스할 수 있습니다.
Related concepts
파티션 기능 프레임워크 프로그래밍 모델