[jboss-cvs] JBossAS SVN: r104008 - in projects/scanning/trunk: scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Apr 15 12:12:14 EDT 2010
Author: alesj
Date: 2010-04-15 12:12:13 -0400 (Thu, 15 Apr 2010)
New Revision: 104008
Added:
projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java
projects/scanning/trunk/testsuite/src/test/resources/hibernate/pre-defaultpar.jar
Modified:
projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java
projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java
projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java
projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java
projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java
projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java
Log:
Fix annotation index serialization.
Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java 2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -22,11 +22,15 @@
package org.jboss.scanning.annotations.plugins;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.annotation.Annotation;
+
+import org.jboss.metadata.spi.signature.Signature;
import org.jboss.util.JBossObject;
-import org.jboss.metadata.spi.signature.Signature;
-import java.lang.annotation.Annotation;
-
/**
* Class name and signature pair.
* With those two we can re-create annotation value.
@@ -36,12 +40,22 @@
*
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
-public class ClassSignaturePair extends JBossObject
+public class ClassSignaturePair extends JBossObject implements Externalizable
{
+ /** The serial version UID */
+ private static final long serialVersionUID = 1L;
+
private String className;
private Signature signature;
private Annotation annotation;
+ /**
+ * Should only be used for de-serialization.
+ */
+ public ClassSignaturePair()
+ {
+ }
+
public ClassSignaturePair(String className, Signature signature)
{
this(className, signature, null);
@@ -57,6 +71,26 @@
this.annotation = annotation;
}
+ public void writeExternal(ObjectOutput out) throws IOException
+ {
+ out.writeUTF(className);
+ // signature
+ boolean bs = signature != null;
+ out.writeBoolean(bs);
+ if (bs)
+ out.writeObject(new SignatureSerializer(signature));
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+ {
+ className = in.readUTF();
+ if (in.readBoolean())
+ {
+ SignatureSerializer ss = (SignatureSerializer) in.readObject();
+ signature = ss.getSignature();
+ }
+ }
+
/**
* Get the classname.
*
Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java 2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -22,7 +22,10 @@
package org.jboss.scanning.annotations.plugins;
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.reflect.AnnotatedElement;
@@ -42,14 +45,14 @@
*
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
-public class DefaultAnnotationRepository extends MutableAnnotationRepository implements Serializable, ScanningHandle<DefaultAnnotationRepository>
+public class DefaultAnnotationRepository extends MutableAnnotationRepository implements Externalizable, ScanningHandle<DefaultAnnotationRepository>
{
/** The serial version UID */
private static final long serialVersionUID = 1L;
/** The info map */
- private transient Map<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>> env;
+ private Map<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>> env;
/** The checked class names */
- private transient Set<String> checkedClassNames;
+ private transient Set<String> checkedClassNames = new HashSet<String>();
/** Should we keep the annotation */
private boolean keepAnnotations;
@@ -59,24 +62,25 @@
public DefaultAnnotationRepository()
{
super();
- init();
}
public DefaultAnnotationRepository(ClassLoader classLoader)
{
super(classLoader);
- init();
+ env = new HashMap<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>>();
}
- /**
- * Init.
- */
- protected void init()
+ public void writeExternal(ObjectOutput out) throws IOException
{
- env = new HashMap<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>>();
- checkedClassNames = new HashSet<String>();
+ out.writeObject(env);
}
+ @SuppressWarnings("unchecked")
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+ {
+ env = (Map)in.readObject();
+ }
+
/**
* Set the keep annotations flag.
*
Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java 2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -37,6 +37,8 @@
*/
public abstract class MutableAnnotationRepository extends WeakClassLoaderHolder implements AnnotationIndex
{
+ private static final long serialVersionUID = 1l;
+
/**
* Should only be used for de-serialization.
*/
Copied: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java (from rev 103689, projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java)
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java (rev 0)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.scanning.annotations.plugins;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.jboss.metadata.spi.signature.*;
+
+/**
+ * Serialization helper for Signature
+ * TODO - move to MDR
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class SignatureSerializer implements Externalizable
+{
+ /** The serial version UID */
+ private static final long serialVersionUID = 1L;
+
+ private transient Signature signature;
+
+ public SignatureSerializer()
+ {
+ // for de-serialization
+ }
+
+ public SignatureSerializer(Signature signature)
+ {
+ this.signature = signature;
+ }
+
+ public Signature getSignature()
+ {
+ return signature;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException
+ {
+ String declaringClass = null;
+ String name = null;
+ String[] parameters = null;
+ Integer parameterIndex = -1;
+
+ if (signature instanceof ConstructorSignature)
+ {
+ ConstructorSignature constructorSignature = (ConstructorSignature) signature;
+ parameters = constructorSignature.getParameters();
+ }
+ else if (signature instanceof MethodSignature)
+ {
+ MethodSignature methodSignature = (MethodSignature) signature;
+ name = methodSignature.getName();
+ parameters = methodSignature.getParameters();
+ }
+ else if (signature instanceof DeclaredMethodSignature)
+ {
+ DeclaredMethodSignature methodSignature = (DeclaredMethodSignature) signature;
+ declaringClass = methodSignature.getDeclaringClass();
+ name = methodSignature.getName();
+ parameters = methodSignature.getParameters();
+ }
+ else if (signature instanceof MethodParametersSignature)
+ {
+ MethodParametersSignature methodSignature = (MethodParametersSignature) signature;
+ name = methodSignature.getName();
+ parameters = methodSignature.getParameters();
+ parameterIndex = methodSignature.getParam();
+ }
+ else if (signature instanceof ConstructorParametersSignature)
+ {
+ ConstructorParametersSignature constructorSignature = (ConstructorParametersSignature) signature;
+ parameters = constructorSignature.getParameters();
+ parameterIndex = constructorSignature.getParam();
+ }
+ else if (signature instanceof FieldSignature)
+ {
+ FieldSignature fieldSignature = (FieldSignature) signature;
+ name = fieldSignature.getName();
+ }
+ else
+ throw new IllegalArgumentException("Unknown signature type: " + signature);
+
+ // declaring class
+ boolean bdc = declaringClass != null;
+ out.writeBoolean(bdc);
+ if (bdc)
+ out.writeUTF(declaringClass);
+ // name
+ out.writeUTF(name);
+ // parameters
+ boolean bp = parameters != null;
+ out.writeBoolean(bp);
+ if (bp)
+ out.writeObject(parameters);
+ // index
+ out.writeObject(parameterIndex);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+ {
+ // declaring class
+ String declaringClass = null;
+ if (in.readBoolean())
+ declaringClass = in.readUTF();
+ // name
+ String name = in.readUTF();
+ // parameters
+ String[] parameters = null;
+ if (in.readBoolean())
+ parameters = (String[]) in.readObject();
+ // index
+ Integer parameterIndex = (Integer) in.readObject();
+
+ if (name == null)
+ {
+ if (parameterIndex >= 0)
+ signature = new ConstructorParametersSignature(parameterIndex, parameters);
+ else
+ signature = new ConstructorSignature(parameters);
+ }
+ else
+ {
+ if (declaringClass != null)
+ {
+ signature = new DeclaredMethodSignature(declaringClass, name, parameters);
+ }
+ else if (parameters == null)
+ {
+ signature = new FieldSignature(name);
+ }
+ else if (parameterIndex >= 0)
+ {
+ signature = new MethodParametersSignature(name, parameters, parameterIndex);
+ }
+ else
+ {
+ signature = new MethodSignature(name, parameters);
+ }
+ }
+ }
+}
\ No newline at end of file
Modified: projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java
===================================================================
--- projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java 2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -22,6 +22,7 @@
package org.jboss.scanning.plugins.helpers;
+import java.io.Serializable;
import java.lang.ref.WeakReference;
import org.jboss.util.JBossObject;
@@ -31,8 +32,10 @@
*
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
-public abstract class WeakClassLoaderHolder extends JBossObject
+public abstract class WeakClassLoaderHolder extends JBossObject implements Serializable
{
+ private static final long serialVersionUID = 1l;
+
private transient WeakReference<ClassLoader> clRef;
/**
Modified: projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java
===================================================================
--- projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java 2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -130,12 +130,12 @@
{
GZIPInputStream gis = new GZIPInputStream(is);
ois = new ObjectInputStream(gis);
+ return (ScanningHandle) ois.readObject();
}
finally
{
is.close();
}
- return (ScanningHandle) ois.readObject();
}
protected abstract ScanningHandle createHandle(ScanningPlugin plugin);
Modified: projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java
===================================================================
--- projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java 2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java 2010-04-15 16:12:13 UTC (rev 104008)
@@ -71,7 +71,7 @@
public void testPreIndexedUsage() throws Exception
{
- // testUsage("pre-defaultpar", true);
+ testUsage("pre-defaultpar", true);
}
protected void testUsage(String name, boolean preIndexed) throws Exception
Added: projects/scanning/trunk/testsuite/src/test/resources/hibernate/pre-defaultpar.jar
===================================================================
(Binary files differ)
Property changes on: projects/scanning/trunk/testsuite/src/test/resources/hibernate/pre-defaultpar.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
More information about the jboss-cvs-commits
mailing list