Skip to content

Commit

Permalink
#149 update dependencies & move to log4j2
Browse files Browse the repository at this point in the history
  • Loading branch information
jonhare committed Jul 17, 2018
1 parent 5d94ae1 commit 8068055
Show file tree
Hide file tree
Showing 51 changed files with 1,098 additions and 1,173 deletions.
6 changes: 3 additions & 3 deletions core/core-aop-support/pom.xml
Expand Up @@ -27,9 +27,9 @@
<version>3.12.1.GA</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
Expand Down
Expand Up @@ -36,29 +36,30 @@
import java.util.ArrayList;
import java.util.List;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
import javassist.Translator;

import org.apache.log4j.Logger;

/**
* A {@link ClassFileTransformer} that applies one or more
* {@link ClassTransformer}s to a class before it is loaded.
*
*
* @author Jonathon Hare (jsh2@ecs.soton.ac.uk)
*/
public class MultiTransformClassFileTransformer implements ClassFileTransformer, Translator {
private static Logger logger = Logger.getLogger(MultiTransformClassFileTransformer.class);
private static Logger logger = LogManager.getLogger(MultiTransformClassFileTransformer.class);

private ClassPool classPool;
private List<ClassTransformer> transformers = new ArrayList<ClassTransformer>();

/**
* Construct with the given {@link ClassTransformer}s.
*
*
* @param t1
* the first transformer
* @param transformers
Expand All @@ -80,7 +81,7 @@ public byte[] transform(ClassLoader loader, String className, Class<?> classBein

/**
* Transform the given class.
*
*
* @param className
* the name of the class
* @param classfileBuffer
Expand Down
Expand Up @@ -48,26 +48,27 @@
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;

import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

/**
* Dynamic agent loader. Provides methods to extract an agent jar with
* a specific agent class, and to attempt to dynamically load agents
* on Oracle JVMs (including OpenJDK). Dynamic loading won't work on
* all JVMs (i.e. IBMs), but the standard "-javaagent" commandline option
* can be used instead. If dynamic loading fails, instructions on using
* the command line flag will be printed to stderr.
*
* Dynamic agent loader. Provides methods to extract an agent jar with a
* specific agent class, and to attempt to dynamically load agents on Oracle
* JVMs (including OpenJDK). Dynamic loading won't work on all JVMs (i.e. IBMs),
* but the standard "-javaagent" commandline option can be used instead. If
* dynamic loading fails, instructions on using the command line flag will be
* printed to stderr.
*
* @author Jonathon Hare (jsh2@ecs.soton.ac.uk)
*/
public class AgentLoader {
private static final Logger logger = Logger.getLogger(AgentLoader.class);
private static final String VMCLASS = "com.sun.tools.attach.VirtualMachine";
private static final Logger logger = LogManager.getLogger(AgentLoader.class);
private static final String VMCLASS = "com.sun.tools.attach.VirtualMachine";

private static long copy(InputStream input, OutputStream output) throws IOException {
long count = 0;
int n = 0;
byte[] buffer = new byte[4096];
final byte[] buffer = new byte[4096];

while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
Expand All @@ -78,46 +79,50 @@ private static long copy(InputStream input, OutputStream output) throws IOExcept
}

private static byte[] createManifest(Class<?> agentClass) {
StringBuffer sb = new StringBuffer();
final StringBuffer sb = new StringBuffer();

try {
agentClass.getDeclaredMethod("premain", String.class, Instrumentation.class);
sb.append("Premain-Class: "+ agentClass.getName() + "\n");
} catch (NoSuchMethodException e) {
//IGNORE//
sb.append("Premain-Class: " + agentClass.getName() + "\n");
} catch (final NoSuchMethodException e) {
// IGNORE//
}

try {
agentClass.getDeclaredMethod("agentmain", String.class, Instrumentation.class);
sb.append("Agent-Class: "+ agentClass.getName() + "\n");
} catch (NoSuchMethodException e) {
//IGNORE//
sb.append("Agent-Class: " + agentClass.getName() + "\n");
} catch (final NoSuchMethodException e) {
// IGNORE//
}

sb.append("Can-Redefine-Classes: true\n");
sb.append("Can-Retransform-Classes: true\n");

try {
return sb.toString().getBytes("US-ASCII");
} catch (UnsupportedEncodingException e) {
} catch (final UnsupportedEncodingException e) {
throw new RuntimeException("Charset US-ASCII isn't supported!! This should never happen.");
}
}

/**
* Create an agent jar file with the required manifest entries.
*
* @param file the location to create the jar
* @param agentClass the agent class
* @throws IOException if an error occurs
*
* @param file
* the location to create the jar
* @param agentClass
* the agent class
* @throws IOException
* if an error occurs
*/
public static void createAgentJar(File file, Class<?> agentClass) throws IOException {
JarOutputStream jos = new JarOutputStream(new FileOutputStream(file));
final JarOutputStream jos = new JarOutputStream(new FileOutputStream(file));

String classEntryPath = agentClass.getName().replace(".", "/") + ".class";
InputStream classStream = agentClass.getClassLoader().getResourceAsStream(classEntryPath);
final InputStream classStream = agentClass.getClassLoader().getResourceAsStream(classEntryPath);

if (classEntryPath.startsWith("/")) classEntryPath = classEntryPath.substring(1);
if (classEntryPath.startsWith("/"))
classEntryPath = classEntryPath.substring(1);

JarEntry entry = new JarEntry(classEntryPath);
jos.putNextEntry(entry);
Expand All @@ -136,18 +141,18 @@ public static void createAgentJar(File file, Class<?> agentClass) throws IOExcep
* Attempt to locate potential "tools.jar" jars
*/
private static List<File> getPotentialToolsJars() {
List<File> jars = new ArrayList<File>();
final List<File> jars = new ArrayList<File>();

File javaHome = new File(System.getProperty("java.home"));
final File javaHome = new File(System.getProperty("java.home"));

File jreSourced = new File(javaHome, "lib/tools.jar");
final File jreSourced = new File(javaHome, "lib/tools.jar");
if (jreSourced.exists()) {
jars.add(jreSourced);
}

if ("jre".equals(javaHome.getName())) {
File jdkHome = new File(javaHome, "../");
File jdkSourced = new File(jdkHome, "lib/tools.jar");
final File jdkHome = new File(javaHome, "../");
final File jdkSourced = new File(jdkHome, "lib/tools.jar");
if (jdkSourced.exists()) {
jars.add(jdkSourced);
}
Expand All @@ -166,20 +171,20 @@ private static Class<?> tryGetVMClass() {
public Class<?> run() throws Exception {
try {
return ClassLoader.getSystemClassLoader().loadClass(VMCLASS);
} catch (ClassNotFoundException e) {
for (File jar : getPotentialToolsJars()) {
} catch (final ClassNotFoundException e) {
for (final File jar : getPotentialToolsJars()) {
try {
return new URLClassLoader(new URL[] {jar.toURI().toURL()}).loadClass(VMCLASS);
} catch (Throwable t) {
logger.trace("Exception while loading tools.jar from "+ jar, t);
return new URLClassLoader(new URL[] { jar.toURI().toURL() }).loadClass(VMCLASS);
} catch (final Throwable t) {
logger.trace("Exception while loading tools.jar from " + jar, t);
}
}
}
return null;
}
});
} catch (PrivilegedActionException pae) {
Throwable actual = pae.getCause();
} catch (final PrivilegedActionException pae) {
final Throwable actual = pae.getCause();

if (actual instanceof ClassNotFoundException) {
logger.trace("No VirtualMachine found");
Expand All @@ -192,41 +197,43 @@ public Class<?> run() throws Exception {

private static void loadFailed() {
System.err.println("Unable to load the java agent dynamically");
//FIXME: instructions
// FIXME: instructions
}

/**
* Attempt to dynamically load the given agent class
*
* @param agentClass the agent class
* @throws IOException if an error occurs creating the agent jar
*
* @param agentClass
* the agent class
* @throws IOException
* if an error occurs creating the agent jar
*/
public static void loadAgent(Class<?> agentClass) throws IOException {
File tmp = File.createTempFile("agent", ".jar");
final File tmp = File.createTempFile("agent", ".jar");
tmp.deleteOnExit();
createAgentJar(tmp, agentClass);

String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName();
int p = nameOfRunningVM.indexOf('@');
String pid = nameOfRunningVM.substring(0, p);
final String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName();
final int p = nameOfRunningVM.indexOf('@');
final String pid = nameOfRunningVM.substring(0, p);

Class<?> vmClass = tryGetVMClass();
final Class<?> vmClass = tryGetVMClass();

if (vmClass == null) {
loadFailed();
} else {
try {
Method attach = vmClass.getMethod("attach", String.class);
Method loadAgent = vmClass.getMethod("loadAgent", String.class);
Method detach = vmClass.getMethod("detach");
Object vm = attach.invoke(null, pid);
final Method attach = vmClass.getMethod("attach", String.class);
final Method loadAgent = vmClass.getMethod("loadAgent", String.class);
final Method detach = vmClass.getMethod("detach");

final Object vm = attach.invoke(null, pid);
try {
loadAgent.invoke(vm, tmp.getAbsolutePath());
} finally {
detach.invoke(vm);
}
} catch (Exception e) {
} catch (final Exception e) {
logger.warn("Loading the agent failed", e);
loadFailed();
}
Expand Down
Expand Up @@ -32,7 +32,8 @@
import javassist.CtClass;
import javassist.CtMethod;

import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.openimaj.aop.ClassTransformer;
import org.openimaj.citation.annotation.Reference;
import org.openimaj.citation.annotation.References;
Expand All @@ -51,7 +52,7 @@
*
*/
public class ReferencesClassTransformer implements ClassTransformer {
private static Logger logger = Logger.getLogger(ReferencesClassTransformer.class);
private static Logger logger = LogManager.getLogger(ReferencesClassTransformer.class);

@Override
public void transform(String className, CtClass ctclz) throws Exception {
Expand Down
8 changes: 1 addition & 7 deletions core/core-experiment/pom.xml
Expand Up @@ -38,19 +38,13 @@
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>4.6.0</version>
<version>6.6.0</version>
</dependency>
<dependency>
<groupId>org.bethecoder</groupId>
<artifactId>ascii-table</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
Expand Up @@ -43,7 +43,9 @@
import org.apache.commons.lang.SystemUtils;
import org.apache.commons.lang.WordUtils;
import org.apache.commons.math.stat.descriptive.SummaryStatistics;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

import org.openimaj.citation.ReferenceListener;
import org.openimaj.citation.annotation.Reference;
import org.openimaj.citation.annotation.output.StandardFormatters;
Expand Down Expand Up @@ -82,7 +84,7 @@ public static class Variable {
}
}

private static final Logger logger = Logger.getLogger(ExperimentContext.class);
private static final Logger logger = LogManager.getLogger(ExperimentContext.class);

private boolean isLocked;

Expand Down
Expand Up @@ -37,14 +37,15 @@
import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

/**
* Create an {@link AdjustedRandomIndexAnalysis} instance
* @author Sina Samangooei (ss@ecs.soton.ac.uk)
*/
public class AdjustedRandomIndexClusterAnalyser implements ClusterAnalyser<AdjustedRandomIndexAnalysis>{
final static Logger logger = Logger.getLogger(AdjustedRandomIndexAnalysis.class);
final static Logger logger = LogManager.getLogger(AdjustedRandomIndexAnalysis.class);
@Override
public AdjustedRandomIndexAnalysis analyse(int[][] correct, int[][] estimated) {
TIntLongHashMap nij = new TIntLongHashMap();
Expand Down
Expand Up @@ -31,7 +31,9 @@

import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

import org.openimaj.logger.LoggerUtils;

/**
Expand All @@ -41,7 +43,7 @@
*/
public class NMIClusterAnalyser implements ClusterAnalyser<NMIAnalysis> {

private final static Logger logger = Logger.getLogger(NMIClusterAnalyser.class);
private final static Logger logger = LogManager.getLogger(NMIClusterAnalyser.class);

@Override
public NMIAnalysis analyse(int[][] correct, int[][] estimated) {
Expand Down

0 comments on commit 8068055

Please sign in to comment.