From 561d101120709638735fd5add2c0c545c548d5da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Galder=20Zamarren=CC=83o?= <galder@zamarreno.com> Date: Mon, 10 Feb 2014 10:11:04 +0100 Subject: [PATCH] ISPN-3974 Make it compile with JDK8 * Module name calculation in javascript driven Server/AS/Wildfly now works with both JDK7 and JDK8 by trying a split/join and if it does not work, use a replace. * spliterator() method name clashes with a new spliterator() method introduced in java.util.Collection for JDK8, so name it differently * Enable animal-sniffer maven plugin only when JDK7 is used since it does not yet work with JDK8 (not even latest version 1.10). --- as-modules/build.xml | 4 -- as-modules/lib.xml | 18 ++++++- .../EquivalentConcurrentHashMapV8.java | 6 +-- .../jdk8backported/ConcurrentHashMapV8.java | 6 +-- parent/pom.xml | 62 ++++++++++++---------- server/integration/build/lib.xml | 18 ++++++- .../org/infinispan/tools/doclet/jmx/JmxDoclet.java | 22 +++++++- 7 files changed, 93 insertions(+), 43 deletions(-) diff --git a/as-modules/build.xml b/as-modules/build.xml index c06b915..8ae2cf8 100644 --- a/as-modules/build.xml +++ b/as-modules/build.xml @@ -32,10 +32,6 @@ <maven-resource group="org.infinispan" artifact="infinispan-core" /> </module-def> - <module-def name="org.infinispan.cachestore.jdbc" slot="${infinispan.slot}" /> - - <module-def name="org.infinispan.cachestore.remote" slot="${infinispan.slot}" /> - <module-def name="org.infinispan.persistence.jdbc" slot="${infinispan.slot}"> <maven-resource group="org.infinispan" artifact="infinispan-cachestore-jdbc" /> </module-def> diff --git a/as-modules/lib.xml b/as-modules/lib.xml index ede0bf2..28b598d 100644 --- a/as-modules/lib.xml +++ b/as-modules/lib.xml @@ -87,7 +87,14 @@ <attribute name="slot"/> <![CDATA[ name = attributes.get("name"); - name = name.replace(".", "/"); + name = name.split(".").join("/"); + if (name) { + self.log("Use JDK8 method to build module names"); + } else { + name = attributes.get("name"); + name = name.replace(".", "/"); + self.log("Use JDK7 method to build module names"); + } project.setProperty("source.module.path", name + "/main"); project.setProperty("current.module.path", name + "/" + attributes.get("slot")); ]]> @@ -98,7 +105,14 @@ <attribute name="slot"/> <![CDATA[ name = attributes.get("name"); - name = name.replace(".", "/"); + name = name.split(".").join("/"); + if (name) { + self.log("Use JDK8 method to build module names"); + } else { + name = attributes.get("name"); + name = name.replace(".", "/"); + self.log("Use JDK7 method to build module names"); + } project.setProperty("current.bundle.path", name + "/" + attributes.get("slot")); ]]> </scriptdef> diff --git a/commons/src/main/java/org/infinispan/commons/util/concurrent/jdk8backported/EquivalentConcurrentHashMapV8.java b/commons/src/main/java/org/infinispan/commons/util/concurrent/jdk8backported/EquivalentConcurrentHashMapV8.java index 22ca860..f7a81a5 100644 --- a/commons/src/main/java/org/infinispan/commons/util/concurrent/jdk8backported/EquivalentConcurrentHashMapV8.java +++ b/commons/src/main/java/org/infinispan/commons/util/concurrent/jdk8backported/EquivalentConcurrentHashMapV8.java @@ -4555,7 +4555,7 @@ public boolean equals(Object o) { (containsAll(c) && c.containsAll(this)))); } - public ConcurrentHashMapSpliterator<K> spliterator() { + public ConcurrentHashMapSpliterator<K> spliteratorV8() { Node<K,V>[] t; EquivalentConcurrentHashMapV8<K,V> m = map; long n = m.sumCount(); @@ -4613,7 +4613,7 @@ public final boolean addAll(Collection<? extends V> c) { throw new UnsupportedOperationException(); } - public ConcurrentHashMapSpliterator<V> spliterator() { + public ConcurrentHashMapSpliterator<V> spliteratorV8() { Node<K,V>[] t; EquivalentConcurrentHashMapV8<K,V> m = map; long n = m.sumCount(); @@ -4702,7 +4702,7 @@ public final boolean equals(Object o) { (containsAll(c) && c.containsAll(this)))); } - public ConcurrentHashMapSpliterator<Map.Entry<K,V>> spliterator() { + public ConcurrentHashMapSpliterator<Map.Entry<K,V>> spliteratorV8() { Node<K,V>[] t; EquivalentConcurrentHashMapV8<K,V> m = map; long n = m.sumCount(); diff --git a/core/src/test/java/org/infinispan/commons/util/concurrent/jdk8backported/ConcurrentHashMapV8.java b/core/src/test/java/org/infinispan/commons/util/concurrent/jdk8backported/ConcurrentHashMapV8.java index e2db305..55811cf 100644 --- a/core/src/test/java/org/infinispan/commons/util/concurrent/jdk8backported/ConcurrentHashMapV8.java +++ b/core/src/test/java/org/infinispan/commons/util/concurrent/jdk8backported/ConcurrentHashMapV8.java @@ -4515,7 +4515,7 @@ public boolean equals(Object o) { (containsAll(c) && c.containsAll(this)))); } - public ConcurrentHashMapSpliterator<K> spliterator() { + public ConcurrentHashMapSpliterator<K> spliteratorV8() { Node<K,V>[] t; ConcurrentHashMapV8<K,V> m = map; long n = m.sumCount(); @@ -4573,7 +4573,7 @@ public final boolean addAll(Collection<? extends V> c) { throw new UnsupportedOperationException(); } - public ConcurrentHashMapSpliterator<V> spliterator() { + public ConcurrentHashMapSpliterator<V> spliteratorV8() { Node<K,V>[] t; ConcurrentHashMapV8<K,V> m = map; long n = m.sumCount(); @@ -4661,7 +4661,7 @@ public final boolean equals(Object o) { (containsAll(c) && c.containsAll(this)))); } - public ConcurrentHashMapSpliterator<Map.Entry<K,V>> spliterator() { + public ConcurrentHashMapSpliterator<Map.Entry<K,V>> spliteratorV8() { Node<K,V>[] t; ConcurrentHashMapV8<K,V> m = map; long n = m.sumCount(); diff --git a/parent/pom.xml b/parent/pom.xml index 28a032b..8df5c21 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -145,7 +145,7 @@ <version.webdav.servlet>2.0.1</version.webdav.servlet> <version.weld>1.1.13.Final</version.weld> <version.wildfly>8.0.0.Beta1</version.wildfly> - <version.javassist>3.15.0-GA</version.javassist> + <version.javassist>3.18.0-GA</version.javassist> <version.maven.animal.sniffer>1.9</version.maven.animal.sniffer> <version.maven.buildhelper>1.8</version.maven.buildhelper> <version.maven.bundle>2.4.0</version.maven.bundle> @@ -1157,30 +1157,6 @@ </executions> </plugin> <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>animal-sniffer-maven-plugin</artifactId> - <version>${version.maven.animal.sniffer}</version> - <configuration> - <signature> - <groupId>org.codehaus.mojo.signature</groupId> - <artifactId>java16</artifactId> - <version>1.0</version> - </signature> - <ignores> - <ignore>sun.misc.Unsafe</ignore> - <ignore>org.apache.lucene.store.IOContext</ignore> - </ignores> - </configuration> - <executions> - <execution> - <phase>process-classes</phase> - <goals> - <goal>check</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.1</version> <executions> @@ -1896,6 +1872,38 @@ </plugins> </build> </profile> - + <profile> + <activation> + <jdk>1.7</jdk> + </activation> + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>animal-sniffer-maven-plugin</artifactId> + <version>${version.maven.animal.sniffer}</version> + <configuration> + <signature> + <groupId>org.codehaus.mojo.signature</groupId> + <artifactId>java16</artifactId> + <version>1.0</version> + </signature> + <ignores> + <ignore>sun.misc.Unsafe</ignore> + <ignore>org.apache.lucene.store.IOContext</ignore> + </ignores> + </configuration> + <executions> + <execution> + <phase>process-classes</phase> + <goals> + <goal>check</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> </profiles> -</project> \ No newline at end of file +</project> diff --git a/server/integration/build/lib.xml b/server/integration/build/lib.xml index cf6f62d..ac7fee9 100644 --- a/server/integration/build/lib.xml +++ b/server/integration/build/lib.xml @@ -111,7 +111,14 @@ <attribute name="slot"/> <![CDATA[ name = attributes.get("name"); - name = name.replace(".", "/"); + name = name.split(".").join("/"); + if (name) { + self.log("Use JDK8 method to build module names"); + } else { + name = attributes.get("name"); + name = name.replace(".", "/"); + self.log("Use JDK7 method to build module names"); + } project.setProperty("current.module.path", name + "/" + attributes.get("slot")); ]]> </scriptdef> @@ -121,7 +128,14 @@ <attribute name="slot"/> <![CDATA[ name = attributes.get("name"); - name = name.replace(".", "/"); + name = name.split(".").join("/"); + if (name) { + self.log("Use JDK8 method to build module names"); + } else { + name = attributes.get("name"); + name = name.replace(".", "/"); + self.log("Use JDK7 method to build module names"); + } project.setProperty("current.bundle.path", name + "/" + attributes.get("slot")); ]]> </scriptdef> diff --git a/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java b/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java index db682ee..0862943 100644 --- a/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java +++ b/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java @@ -16,6 +16,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; @@ -64,7 +66,7 @@ private static String jmxTitle() { } public static int optionLength(String option) { - return (ConfigurationImpl.getInstance()).optionLength(option); + return (createConfigurationImpl()).optionLength(option); } public static boolean validOptions(String options[][], DocErrorReporter reporter) { @@ -77,7 +79,23 @@ public static boolean validOptions(String options[][], DocErrorReporter reporter else if (option[0].equals("-header")) header = option[1]; else if (option[0].equals("-doctitle")) title = option[1]; } - return (ConfigurationImpl.getInstance()).validOptions(options, reporter); + return (createConfigurationImpl()).validOptions(options, reporter); + } + + private static ConfigurationImpl createConfigurationImpl() { + try { + // Deal with JDK7/JDK8 differences + Method getInstanceMethod = ConfigurationImpl.class.getMethod("getInstance"); + return (ConfigurationImpl) getInstanceMethod.invoke(null); + } catch (NoSuchMethodException e) { + try { + return ConfigurationImpl.class.newInstance(); + } catch (Exception e1) { + throw new RuntimeException(e1); + } + } catch (Exception e1) { + throw new RuntimeException(e1); + } } private static MBeanComponent toJmxComponent(ClassDoc cd) { -- 1.9.0