Active MQ Purge Queue not working - credential
Bonjour à tous,
J'utilise Active MQ 5.5.1 et Tomcat 7 et je souhaiterais purger une queue (persistante) depuis tomcat. J'utilise un credential afin de sécuriser la connection à ActiveMQ
Voici le code que j'utilise mais qui ne fonctionne pas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
private static MBeanServerConnection connect() {
JMXConnector connector = null;
MBeanServerConnection connection = null;
try {
Map<String,String[]> env = new HashMap<String,String[]>();
String[] credentials = new String[] { "mon_role", "mon_mdp" };
env.put(JMXConnector.CREDENTIALS, credentials);
connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(Configuration.getProperty("activemq.jmxrmiURL")), env);
connector.connect();
connection = connector.getMBeanServerConnection();
} catch (Exception e) {
logger.log(Level.INFO, e.getMessage());
}
return connection;
}
private static void purgeQueue(String queueName) {
ObjectName brokerObjName;
try {
MBeanServerConnection connection = connect();
long start = System.currentTimeMillis();
brokerObjName = assertRegisteredObjectName("org.apache.activemq:Type=Queue,Destination=" + queueName + ",BrokerName=localhost", connection);
QueueViewMBean proxy = (QueueViewMBean)MBeanServerInvocationHandler.newProxyInstance(connection, brokerObjName, QueueViewMBean.class, true);
logger.log(Level.INFO, "[Queue Purge] Begin Queue " + queueName + " of " + proxy.getQueueSize() + " items purge ... / Memory : " + proxy.getMemoryPercentUsage());
proxy.purge();
logger.log(Level.INFO, "[Queue Purge] Queue " + queueName + " after : " + proxy.getQueueSize() + " / purge end in " + (System.currentTimeMillis() - start) + " ms ! Now memory : " + proxy.getMemoryPercentUsage());
} catch (Exception e) {
logger.log(Level.INFO, e.getMessage());
}
}
private static ObjectName assertRegisteredObjectName(String name, MBeanServerConnection connection) throws MalformedObjectNameException, NullPointerException, IOException {
ObjectName objectName = new ObjectName(name);
if (!connection.isRegistered(objectName)) {
logger.log(Level.INFO, "[JMX Bean Registration] Could not find MBean " + objectName + " - Purge cannot work !");
}
return objectName;
} |
Pour information, j'arrive bien à me connecter à JMX et à supprimer des topics avec la méthode Connect() puis celle ci dessous, donc je ne pense pas qu'il s'agisse d'un problème de connection à JMX.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
private static void removeTopic(MBeanServerConnection conn, String topicName) {
Object[] params = {topicName};
String[] sig = {"java.lang.String"};
ObjectName brokerObjName;
try {
brokerObjName = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Broker");
conn.invoke(brokerObjName, "removeTopic", params, sig);
} catch (Exception e) {
e.printStackTrace();
}
} |
Voici la trace que j'ai lors de la tentative de purge de la queue :
Code:
1 2 3 4 5 6 7 8
|
private static String dashBoardQueueName = "dashboard";
public void purgeDashBoardQueue() {
purgeQueue(dashBoardQueueName);
}
INFO [Queue Purge] Begin Queue dashboard of 0 items purge ... / Memory : 0
INFO [Queue Purge] Queue dashboard after : 0 / purge end in 2 ms ! Now memory : 0 |
Donc j'ai l'impression qu'il se connecte bien au Bean de JMX mais qu'il n'arrive déjà pas à récupérer la bonne taille de ma queue (elle n'est pas vide).
Avez-vous déjà utilisé cette méthode pour purger une queue ? Si oui, avez-vous une idée de mon problème ?
Merci à tous !!
Cdt,
Guillaume