2014-01-18 3 views
1

Websphere 8.5 SIB에 구성된 대기열에있는 모든 메시지를 삭제하려고합니다. 아래 두 가지 방법을 시도했지만, 그 중 아무 것도 작동하지 않는 것처럼 보이고 각각 ​​다른 예외가 throw됩니다. 누군가가이를 달성하기위한 올바른 방법에 대해 조언 해 줄 수 있습니까?대기열에있는 모든 메시지 삭제 JMX를 통한 Websphere 8.5 SIB

접근법 1

MBeanServerConnection connection = getServerConnection(); 
connection.invoke(new ObjectName("WebSphere:*,type=SIBQueuePoint,name=jms.queue.MY_QUEUE"), "deleteAllQueuedMessages", null, null); 

이 방법은 아래의 예외를 던진다.

javax.management.InstanceNotFoundException :는 WebSphere : TYPE = SIBQueuePoint 이름 = jms.queue.MY_QUEUE

접근법 2

MBeanServerConnection connection = getServerConnection(); 
ObjectName objQueue = new ObjectName(WAS85_RESOURCE_URL + ",type=SIBQueuePoint"); 
Set<ObjectName> objNames = connection.queryNames(objQueue, null); 
for(ObjectName objName: objNames) { 
    String qName = connection.getAttribute(objName,"identifier").toString(); 
    if(qName.equals("jms.queue.MY_QUEUE")) { 
     connection.invoke(objName, "deleteAllQueuedMessages", null, null); 
    } 
} 

이 방법은 아래의 예외를 던진다.

javax.management.ReflectionException : 찾을 수없는 대상 방법 : com.ibm.ws.sib.admin.impl.JsQueuePoint.deleteAllQueuedMessages

답변

0

문제를 알아 냈어.

두 번째 접근 방식이 작동합니다. 문제는 deleteAllQueuedMessages 메시지를 호출 할 때 발생했습니다. 이 메소드는 부울 인수를 사용하여 메시지를 Exception Destination으로 이동해야 함을 나타냅니다. 나는이 주장을 전달하지 않았다!

다음과 같이 구현을 수정했으며 현재 작동합니다. 당신이 exacly 쿼리를 설정할 수 있기 때문에 MBean의 JMSAdministration를 사용

String queryString = "WebSphere:*,type=JMSAdministration"; 
     ObjectName queryServer = new ObjectName(queryString); 
     String serverStr = ""; 

     Set pet = aClient.queryNames(queryServer, null); 

     Iterator itsServer = pet.iterator(); 

     if (itsServer.hasNext()) 
      serverStr = itsServer.next().toString(); 

     ObjectName obj = new ObjectName(serverStr); 

     Object param[] = { "jms/messageQueue","jms/messageCF" }; 
     String signature[] = { "java.lang.String","java.lang.String" }; 

     aClient.invoke(obj, "clear", param, signature); 

낫다 :

connection.invoke(objName, "deleteAllQueuedMessages", new Object[]{false}, new String[]{"java.lang.Boolean"}); 
0

모든 메시지를 삭제하는 더 좋은 방법은 같은 것입니다.

관련 문제