Skip to content

Commit 3c032ae

Browse files
committed
Support for deltaspike 1.9.6
1 parent 0727c39 commit 3c032ae

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

plugin/hotswap-agent-deltaspike-plugin/pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
<artifactId>hotswap-agent-deltaspike-plugin</artifactId>
1313

1414
<properties>
15-
<deltaspike.version>1.9.1</deltaspike.version>
16-
<org.hibernateframework.version>5.2.10.Final</org.hibernateframework.version>
15+
<deltaspike.version>1.9.6</deltaspike.version>
16+
<org.hibernateframework.version>5.6.8.Final</org.hibernateframework.version>
1717
<jaxb.version>2.3.0</jaxb.version>
1818
</properties>
1919

@@ -112,7 +112,7 @@
112112
<dependency>
113113
<groupId>org.apache.myfaces.core</groupId>
114114
<artifactId>myfaces-api</artifactId>
115-
<version>2.2.10</version>
115+
<version>2.3.9</version>
116116
<scope>test</scope>
117117
</dependency>
118118

plugin/hotswap-agent-deltaspike-plugin/src/main/java/org/hotswap/agent/plugin/deltaspike/command/ProxyClassLoadingDelegate.java

+37
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,41 @@ public static Class<?> loadClass(ClassLoader loader, String className, byte[] by
107107
}
108108
return null;
109109
}
110+
111+
// for DS >= 1.9.6
112+
public static Class<?> defineClass(ClassLoader loader, String className, byte[] bytes, Class<?> originalClass, ProtectionDomain protectionDomain) {
113+
if (MAGIC_IN_PROGRESS.get()) {
114+
try {
115+
final Class<?> originalProxyClass = loader.loadClass(className);
116+
try {
117+
Map<Class<?>, byte[]> reloadMap = new HashMap<>();
118+
reloadMap.put(originalProxyClass, bytes);
119+
PluginManager.getInstance().hotswap(reloadMap);
120+
return originalProxyClass;
121+
} catch (Exception e) {
122+
throw new RuntimeException(e);
123+
}
124+
} catch (ClassNotFoundException e) {
125+
//it has not actually been loaded yet
126+
}
127+
}
128+
try {
129+
Class<?> classDefiner = null;
130+
try {
131+
// ClassDefiner introduced in ds 1.9.6
132+
classDefiner = loader.loadClass("org.apache.deltaspike.proxy.impl.ClassDefiner");
133+
} catch (ClassNotFoundException e1) {
134+
LOGGER.error("ClassDefiner class not found!");
135+
}
136+
if (classDefiner != null) {
137+
return (Class<?>) ReflectionHelper.invoke(null, classDefiner, "defineClass",
138+
new Class[]{ClassLoader.class, String.class, byte[].class, Class.class, ProtectionDomain.class},
139+
loader, className, bytes, originalClass, protectionDomain);
140+
}
141+
} catch (Exception e) {
142+
LOGGER.error("loadClass() exception {}", e.getMessage());
143+
}
144+
return null;
145+
}
146+
110147
}

plugin/hotswap-agent-deltaspike-plugin/src/main/java/org/hotswap/agent/plugin/deltaspike/transformer/DeltaSpikeProxyTransformer.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,11 @@ public static void patchAsmDeltaSpikeProxyClassGenerator(CtClass ctClass) throws
9595
generateProxyClassMethod.instrument(
9696
new ExprEditor() {
9797
public void edit(MethodCall m) throws CannotCompileException {
98-
if (m.getClassName().equals("org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator") && m.getMethodName().equals("loadClass"))
98+
if (m.getClassName().equals("org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator") && m.getMethodName().equals("loadClass")) {
9999
m.replace("{ $_ = org.hotswap.agent.plugin.deltaspike.command.ProxyClassLoadingDelegate.loadClass($$); }");
100+
} else if (m.getClassName().equals("org.apache.deltaspike.proxy.impl.ClassDefiner") && m.getMethodName().equals("defineClass")) {
101+
m.replace("{ $_ = org.hotswap.agent.plugin.deltaspike.command.ProxyClassLoadingDelegate.defineClass($$); }");
102+
}
100103
}
101104
});
102105
LOGGER.debug("org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator patched.");

0 commit comments

Comments
 (0)