From 7b31b9c41d387c85dcb68b9c5677f1d3f83cfaa7 Mon Sep 17 00:00:00 2001 From: Frank Maritato Date: Thu, 23 Sep 2010 04:11:27 +0000 Subject: [PATCH] added a class for issuing a rotate command and added a managed operation to the journaller class so we dont need to know what handler implementation is being used. git-svn-id: https://lwes.svn.sourceforge.net/svnroot/lwes/lwes-journaller-java/trunk@565 a2f82657-cdd2-4550-bd36-68a8e7111808 --- src/bin/lwes-rotate-log | 2 +- src/main/java/org/lwes/journaller/Journaller.java | 13 ++++ .../java/org/lwes/journaller/JournallerMBean.java | 5 +- src/main/java/org/lwes/journaller/util/Rotate.java | 76 ++++++++++++++++++++++ 4 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/lwes/journaller/util/Rotate.java diff --git a/src/bin/lwes-rotate-log b/src/bin/lwes-rotate-log index f28759e..de16b8f 100644 --- a/src/bin/lwes-rotate-log +++ b/src/bin/lwes-rotate-log @@ -21,4 +21,4 @@ CP=${CP}:${bin}/config $JAVA_HOME/bin/java \ -Dlog4j.configuration=log4j.xml \ -classpath $CP \ -org.lwes.TestEmitter -r $@ \ No newline at end of file +org.lwes.util.JMXUtil $@ \ No newline at end of file diff --git a/src/main/java/org/lwes/journaller/Journaller.java b/src/main/java/org/lwes/journaller/Journaller.java index 96517b7..dcd8783 100644 --- a/src/main/java/org/lwes/journaller/Journaller.java +++ b/src/main/java/org/lwes/journaller/Journaller.java @@ -21,6 +21,7 @@ import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ManagedAttribute; +import javax.management.ManagedOperation; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import java.io.IOException; @@ -253,6 +254,18 @@ public class Journaller implements Runnable, JournallerMBean { } } + /** + * Convenience method for rotating the journaller file without needing + * to know which implementation is being used (sequence, gzip, etc.) + * + * @return Returns the result of the eventHandler.rotate() call. + * @throws IOException + */ + @ManagedOperation + public boolean rotate() throws IOException { + return eventHandler.rotate(); + } + public boolean isUseGzip() { return useGzip; } diff --git a/src/main/java/org/lwes/journaller/JournallerMBean.java b/src/main/java/org/lwes/journaller/JournallerMBean.java index b668e2b..f77b4b1 100644 --- a/src/main/java/org/lwes/journaller/JournallerMBean.java +++ b/src/main/java/org/lwes/journaller/JournallerMBean.java @@ -1,8 +1,11 @@ package org.lwes.journaller; +import java.io.IOException; + /** * @author fmaritato */ public interface JournallerMBean { - + + public boolean rotate() throws IOException; } diff --git a/src/main/java/org/lwes/journaller/util/Rotate.java b/src/main/java/org/lwes/journaller/util/Rotate.java new file mode 100644 index 0000000..c67a8ca --- /dev/null +++ b/src/main/java/org/lwes/journaller/util/Rotate.java @@ -0,0 +1,76 @@ +package org.lwes.journaller.util; + +/** + * User: fmaritato + * Date: Sep 22, 2010 + * Time: 8:39:03 PM + */ + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.lwes.journaller.JournallerMBean; + +import javax.management.JMX; +import javax.management.MBeanServerConnection; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import java.io.IOException; + +public class Rotate { + + private static transient Log log = LogFactory.getLog(Rotate.class); + + /** + * @param remoteHostAndPort hostName:portNum + * @throws IOException + * @throws javax.management.MalformedObjectNameException + * + */ + public static void sendRotate(String remoteHostAndPort) throws IOException, + MalformedObjectNameException { + + StringBuilder urlStr = new StringBuilder() + .append("service:jmx:rmi:///jndi/rmi://") + .append(remoteHostAndPort) + .append("/jmxrmi"); + + if (log.isDebugEnabled()) { + log.debug(urlStr); + } + + JMXServiceURL url = new JMXServiceURL(urlStr.toString()); + JMXConnector jmxc = JMXConnectorFactory.connect(url, null); + if (log.isDebugEnabled()) { + log.debug("Connected to remote jmx agent"); + } + MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); + ObjectName mbeanName = new ObjectName("org.lwes:name=Journaller"); + JournallerMBean jmb = JMX.newMBeanProxy(mbsc, + mbeanName, + JournallerMBean.class, + true); + boolean success = jmb.rotate(); + if (log.isDebugEnabled()) { + log.debug("Rotate result: " + success); + } + jmxc.close(); + } + + public static void main(String[] args) { + if (args.length != 1) { + System.out.println("Usage: Rotate "); + } + try { + Rotate.sendRotate(args[0]); + } + catch (IOException e) { + log.error(e); + } + catch (MalformedObjectNameException e) { + log.error(e); + } + } +} -- 2.11.4.GIT