我们使用Adobe CQ(5.5)作为CMS。现在,我们的CQ环境包括一个作者服务器,用户可以在其中创建内容,以及2个发布服务器,用于将内容提供给互联网。
现在有一个复制代理将内容从作者服务器推送到两个发布服务器。不幸的是,有些文章阻止了复制代理的队列,因此不再发布新的内容。这不是一个问题,因为它很容易修复。真正的问题是,在用户开始抱怨不再发布更改之前,我们不会注意到这种阻塞。
我四处搜索,发现CQ提供了一个JMX API,监控应用程序可以将其自身附加到它上面。然后我试图找到一些允许我配置警报的开源软件,这样我们就能更快地做出反应,但我找不到任何东西。
这时我决定编写自己的Java应用程序,它只读取属性并在属性为true时发送邮件。我想这比我想的要复杂得多。
首先,我不是Java开发人员,但由于CQ是基于Java的,所以我试试看。我阅读了一些关于JMX和Java的文档,并且能够获得与CQ服务器的有效连接。但这几乎是我能想到的一切。
我能够发现类com.adobe.granite.replication
的类型agent
存储了每个复制代理的id(id将是复制代理的名称,例如{{1} }})。每个复制代理都有不同的属性,但与我相关的属性是“QueueBlocked”。
这是我到目前为止的代码(它基于this示例):
id=replication-publish-1
}
抛出的错误如下:
public static void main(String[] args) {
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://servername:9010/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
ClientListener listener = new ClientListener();
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
// This outputs the domains, one of them is com.adobee.granite.replication, the one which I need to use
// This is why I'm sure that at least the connection works, I don't have any com.adobe.granite.replication class on my Eclipse installation, so the output has to come from the server
String domains[] = mbsc.getDomains();
for (int i = 0; i < domains.length; i++) {
echo("\tDomain[" + i + "] = " + domains[i]);
}
ObjectName replication = new ObjectName("com.adobe.granite.replication:type=Agent,id=replication-publish-1");
mbsc.getAttribute(replication, "QueueBlocked"); // This throws the error
} catch(Exception e) {
}
据我所知,我应该创建某种实例,但我真的不知道什么实例以及如何创建它。无论是文档还是代码片段,我都非常感谢我能得到的任何帮助:)
答案 0 :(得分:4)
解决了它:)
这是我正在使用的代码:
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import javax.management.Attribute;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class Client {
public static void main(String[] args) {
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://servername:9010/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
ObjectName replication1 = new ObjectName("com.adobe.granite.replication:type=agent,id=\"replication-publish-1\"");
ObjectName replication2 = new ObjectName("com.adobe.granite.replication:type=agent,id=\"replication-publish-2\"");
String replication1Status = mbsc.getAttribute(replication1, "QueuePaused").toString();
String replication2Status = mbsc.getAttribute(replication2, "QueuePaused").toString();
} catch (Exception e) {
e.printStackTrace();
}
}
}