import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import javax.management.AttributeChangeNotification;
import javax.management.Notification;
import javax.management.NotificationListener;
import org.jboss.logging.Logger;
public class StateNotificationListener implements NotificationListener {
public static final String RUNTIME_CONFIGURATION_FILENAME = "runtime-configuration-notifications.txt";
public static final String RUNNING_FILENAME = "running-notifications.txt";
private final Path targetFile;
public StateNotificationListener() {
this.targetFile = Paths.get("notifications/data").toAbsolutePath();
init(targetFile);
}
protected Path getRuntimeConfigurationTargetFile() {
return this.targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME);
}
protected Path getRunningConfigurationTargetFile() {
return this.targetFile.resolve(RUNNING_FILENAME);
}
protected final void init(Path targetFile) {
try {
Files.createDirectories(targetFile);
if (!Files.exists(targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME))) {
Files.createFile(targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME));
}
if (!Files.exists(targetFile.resolve(RUNNING_FILENAME))) {
Files.createFile(targetFile.resolve(RUNNING_FILENAME));
}
} catch (IOException ex) {
Logger.getLogger(StateNotificationListener.class).error("Problem handling JMX Notification", ex);
}
}
@Override
public void handleNotification(Notification notification, Object handback) {
AttributeChangeNotification attributeChangeNotification = (AttributeChangeNotification) notification;
if ("RuntimeConfigurationState".equals(attributeChangeNotification.getAttributeName())) {
writeNotification(attributeChangeNotification, getRuntimeConfigurationTargetFile());
} else {
writeNotification(attributeChangeNotification, getRunningConfigurationTargetFile());
}
}
private void writeNotification(AttributeChangeNotification notification, Path path) {
try (BufferedWriter in = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
in.write(String.format("%s %s %s %s", notification.getType(), notification.getSequenceNumber(), notification.getSource().toString(), notification.getMessage()));
in.newLine();
in.flush();
} catch (IOException ex) {
Logger.getLogger(StateNotificationListener.class).error("Problem handling JMX Notification", ex);
}
}
}
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import javax.management.AttributeChangeNotification;
import javax.management.Notification;
import javax.management.NotificationListener;
import org.jboss.logging.Logger;
public class StateNotificationListener implements NotificationListener {
public static final String RUNTIME_CONFIGURATION_FILENAME = "runtime-configuration-notifications.txt";
public static final String RUNNING_FILENAME = "running-notifications.txt";
private final Path targetFile;
public StateNotificationListener() {
this.targetFile = Paths.get("notifications/data").toAbsolutePath();
init(targetFile);
}
protected Path getRuntimeConfigurationTargetFile() {
return this.targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME);
}
protected Path getRunningConfigurationTargetFile() {
return this.targetFile.resolve(RUNNING_FILENAME);
}
protected final void init(Path targetFile) {
try {
Files.createDirectories(targetFile);
if (!Files.exists(targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME))) {
Files.createFile(targetFile.resolve(RUNTIME_CONFIGURATION_FILENAME));
}
if (!Files.exists(targetFile.resolve(RUNNING_FILENAME))) {
Files.createFile(targetFile.resolve(RUNNING_FILENAME));
}
} catch (IOException ex) {
Logger.getLogger(StateNotificationListener.class).error("Problem handling JMX Notification", ex);
}
}
@Override
public void handleNotification(Notification notification, Object handback) {
AttributeChangeNotification attributeChangeNotification = (AttributeChangeNotification) notification;
if ("RuntimeConfigurationState".equals(attributeChangeNotification.getAttributeName())) {
writeNotification(attributeChangeNotification, getRuntimeConfigurationTargetFile());
} else {
writeNotification(attributeChangeNotification, getRunningConfigurationTargetFile());
}
}
private void writeNotification(AttributeChangeNotification notification, Path path) {
try (BufferedWriter in = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
in.write(String.format("%s %s %s %s", notification.getType(), notification.getSequenceNumber(), notification.getSource().toString(), notification.getMessage()));
in.newLine();
in.flush();
} catch (IOException ex) {
Logger.getLogger(StateNotificationListener.class).error("Problem handling JMX Notification", ex);
}
}
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow