I see. Thanks for the explanation. Sent from my iPhone
> On 2014/05/28, at 8:59, Matt Sicker <[email protected]> wrote: > > That was if we were loading a class via a FQCN. When you have the class > object itself, there's nothing to worry about as the class is already loaded! > > >> On 27 May 2014 18:33, Remko Popma <[email protected]> wrote: >> Really? What about the OSGi classloader issue you mentioned? >> >> Sent from my iPhone >> >>> On 2014/05/28, at 7:34, Matt Sicker <[email protected]> wrote: >>> >>> Will do :) >>> >>> >>>> On 27 May 2014 15:27, Gary Gregory <[email protected]> wrote: >>>> I'll leave it to you to fix that up then ;-) >>>> >>>> Gary >>>> >>>> >>>>> On Tue, May 27, 2014 at 4:19 PM, Matt Sicker <[email protected]> wrote: >>>>> Oh wow, I can't believe I missed that. It would work better to just use >>>>> the class instead anyhow! >>>>> >>>>> >>>>>> On 27 May 2014 13:15, Gary Gregory <[email protected]> wrote: >>>>>> Sure, @Test (expected=SomeException.class) >>>>>> >>>>>> Gary >>>>>> >>>>>> >>>>>> -------- Original message -------- >>>>>> From: Matt Sicker >>>>>> Date:05/27/2014 13:03 (GMT-05:00) >>>>>> To: Log4J Developers List >>>>>> Subject: Re: svn commit: r1597790 - in >>>>>> /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins: >>>>>> ./ util/ visitors/ >>>>>> >>>>>> You can put a class in an annotation? >>>>>> >>>>>> >>>>>>> On 27 May 2014 10:49, Remko Popma <[email protected]> wrote: >>>>>>> You may want to document that you use String FQCNs on purpose even >>>>>>> though annotations let you use Classes, to make it OSGi-friendly. >>>>>>> Otherwise the next person may refactor this... >>>>>>> >>>>>>> >>>>>>>> On Tue, May 27, 2014 at 10:57 PM, <[email protected]> wrote: >>>>>>>> Author: mattsicker >>>>>>>> Date: Tue May 27 13:57:31 2014 >>>>>>>> New Revision: 1597790 >>>>>>>> >>>>>>>> URL: http://svn.apache.org/r1597790 >>>>>>>> Log: >>>>>>>> Switch from a registry-based strategy to a meta-annotation-based >>>>>>>> strategy for associating visitors to annotations. >>>>>>>> >>>>>>>> - More easily extensible as there is no registry or special file to >>>>>>>> maintain. >>>>>>>> - Still maintains OSGi compatibility with correct ClassLoader usage. >>>>>>>> - Updated PluginVisitor(Builder|s) accordingly to use new algorithm. >>>>>>>> >>>>>>>> Added: >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>>>>>>> (with props) >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java >>>>>>>> - copied, changed from r1597667, >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java >>>>>>>> Removed: >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java >>>>>>>> Modified: >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>>>>>>> >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/package-info.java >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -32,6 +32,7 @@ import java.lang.annotation.Target; >>>>>>>> @Documented >>>>>>>> @Retention(RetentionPolicy.RUNTIME) >>>>>>>> @Target({ElementType.PARAMETER, ElementType.FIELD}) >>>>>>>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor") >>>>>>>> public @interface PluginAttribute { >>>>>>>> >>>>>>>> // TODO: could we allow a blank value and infer the attribute >>>>>>>> name through reflection? >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -29,5 +29,6 @@ import java.lang.annotation.Target; >>>>>>>> @Documented >>>>>>>> @Retention(RetentionPolicy.RUNTIME) >>>>>>>> @Target({ElementType.PARAMETER, ElementType.FIELD}) >>>>>>>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginConfigurationVisitor") >>>>>>>> public @interface PluginConfiguration { >>>>>>>> } >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -28,6 +28,7 @@ import java.lang.annotation.Target; >>>>>>>> @Documented >>>>>>>> @Retention(RetentionPolicy.RUNTIME) >>>>>>>> @Target({ElementType.PARAMETER, ElementType.FIELD}) >>>>>>>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor") >>>>>>>> public @interface PluginElement { >>>>>>>> >>>>>>>> /** >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -28,5 +28,6 @@ import java.lang.annotation.Target; >>>>>>>> @Documented >>>>>>>> @Retention(RetentionPolicy.RUNTIME) >>>>>>>> @Target({ElementType.PARAMETER, ElementType.FIELD}) >>>>>>>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginNodeVisitor") >>>>>>>> public @interface PluginNode { >>>>>>>> } >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -31,6 +31,7 @@ import java.lang.annotation.Target; >>>>>>>> @Documented >>>>>>>> @Retention(RetentionPolicy.RUNTIME) >>>>>>>> @Target(ElementType.PARAMETER) >>>>>>>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginValueVisitor") >>>>>>>> public @interface PluginValue { >>>>>>>> >>>>>>>> String value(); >>>>>>>> >>>>>>>> Added: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java?rev=1597790&view=auto >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>>>>>>> (added) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -0,0 +1,40 @@ >>>>>>>> +/* >>>>>>>> + * Licensed to the Apache Software Foundation (ASF) under one or more >>>>>>>> + * contributor license agreements. See the NOTICE file distributed >>>>>>>> with >>>>>>>> + * this work for additional information regarding copyright ownership. >>>>>>>> + * The ASF licenses this file to You under the Apache License, >>>>>>>> Version 2.0 >>>>>>>> + * (the "License"); you may not use this file except in compliance >>>>>>>> with >>>>>>>> + * the License. You may obtain a copy of the License at >>>>>>>> + * >>>>>>>> + * http://www.apache.org/licenses/LICENSE-2.0 >>>>>>>> + * >>>>>>>> + * Unless required by applicable law or agreed to in writing, software >>>>>>>> + * distributed under the License is distributed on an "AS IS" BASIS, >>>>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>>>>>>> implied. >>>>>>>> + * See the License for the specific language governing permissions and >>>>>>>> + * limitations under the License. >>>>>>>> + */ >>>>>>>> + >>>>>>>> +package org.apache.logging.log4j.core.config.plugins; >>>>>>>> + >>>>>>>> +import java.lang.annotation.Documented; >>>>>>>> +import java.lang.annotation.ElementType; >>>>>>>> +import java.lang.annotation.Retention; >>>>>>>> +import java.lang.annotation.RetentionPolicy; >>>>>>>> +import java.lang.annotation.Target; >>>>>>>> + >>>>>>>> +/** >>>>>>>> + * Meta-annotation to denote the class name to use that implements >>>>>>>> + * {@link >>>>>>>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor} >>>>>>>> for the annotated annotation. >>>>>>>> + */ >>>>>>>> +@Documented >>>>>>>> +@Retention(RetentionPolicy.RUNTIME) >>>>>>>> +@Target(ElementType.ANNOTATION_TYPE) >>>>>>>> +public @interface PluginVisitorStrategy { >>>>>>>> + >>>>>>>> + /** >>>>>>>> + * The class name to use that implements {@link >>>>>>>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor} >>>>>>>> + * for the given annotation. >>>>>>>> + */ >>>>>>>> + String value(); >>>>>>>> +} >>>>>>>> >>>>>>>> Propchange: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> svn:eol-style = native >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -34,6 +34,7 @@ import java.lang.annotation.Target; >>>>>>>> @Documented >>>>>>>> @Retention(RetentionPolicy.RUNTIME) >>>>>>>> @Target(ElementType.PARAMETER) >>>>>>>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.SensitivePluginAttributeVisitor") >>>>>>>> public @interface SensitivePluginAttribute { >>>>>>>> String value(); >>>>>>>> >>>>>>>> >>>>>>>> Modified: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -34,7 +34,7 @@ import org.apache.logging.log4j.core.con >>>>>>>> import >>>>>>>> org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; >>>>>>>> import org.apache.logging.log4j.core.config.plugins.PluginFactory; >>>>>>>> import >>>>>>>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor; >>>>>>>> -import >>>>>>>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitorRegistry; >>>>>>>> +import >>>>>>>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitors; >>>>>>>> import org.apache.logging.log4j.core.util.Assert; >>>>>>>> import org.apache.logging.log4j.core.util.Builder; >>>>>>>> import org.apache.logging.log4j.status.StatusLogger; >>>>>>>> @@ -164,7 +164,7 @@ public class PluginBuilder<T> implements >>>>>>>> continue; // already processed >>>>>>>> } >>>>>>>> final PluginVisitor<? extends Annotation> visitor = >>>>>>>> - >>>>>>>> PluginVisitorRegistry.findVisitor(a.annotationType()); >>>>>>>> + PluginVisitors.findVisitor(a.annotationType()); >>>>>>>> if (visitor != null) { >>>>>>>> final Object value = visitor.setAliases(aliases) >>>>>>>> .setAnnotation(a) >>>>>>>> @@ -200,7 +200,7 @@ public class PluginBuilder<T> implements >>>>>>>> if (a instanceof PluginAliases) { >>>>>>>> continue; // already processed >>>>>>>> } >>>>>>>> - final PluginVisitor<? extends Annotation> visitor = >>>>>>>> PluginVisitorRegistry.findVisitor( >>>>>>>> + final PluginVisitor<? extends Annotation> visitor = >>>>>>>> PluginVisitors.findVisitor( >>>>>>>> a.annotationType()); >>>>>>>> if (visitor != null) { >>>>>>>> args[i] = visitor.setAliases(aliases) >>>>>>>> >>>>>>>> Copied: >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java >>>>>>>> (from r1597667, >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java) >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java?p2=logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java&p1=logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java&r1=1597667&r2=1597790&rev=1597790&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java >>>>>>>> Tue May 27 13:57:31 2014 >>>>>>>> @@ -18,58 +18,24 @@ >>>>>>>> package org.apache.logging.log4j.core.config.plugins.visitors; >>>>>>>> >>>>>>>> import java.lang.annotation.Annotation; >>>>>>>> -import java.util.Map; >>>>>>>> -import java.util.concurrent.ConcurrentHashMap; >>>>>>>> >>>>>>>> import org.apache.logging.log4j.Logger; >>>>>>>> -import org.apache.logging.log4j.core.config.plugins.PluginAttribute; >>>>>>>> -import >>>>>>>> org.apache.logging.log4j.core.config.plugins.PluginConfiguration; >>>>>>>> -import org.apache.logging.log4j.core.config.plugins.PluginElement; >>>>>>>> -import org.apache.logging.log4j.core.config.plugins.PluginNode; >>>>>>>> -import org.apache.logging.log4j.core.config.plugins.PluginValue; >>>>>>>> -import >>>>>>>> org.apache.logging.log4j.core.config.plugins.SensitivePluginAttribute; >>>>>>>> +import >>>>>>>> org.apache.logging.log4j.core.config.plugins.PluginVisitorStrategy; >>>>>>>> import org.apache.logging.log4j.status.StatusLogger; >>>>>>>> >>>>>>>> /** >>>>>>>> - * Registry for associating Plugin annotations with PluginVisitor >>>>>>>> implementations. >>>>>>>> + * Utility class to locate an appropriate PluginVisitor >>>>>>>> implementation for an annotation. >>>>>>>> */ >>>>>>>> -public final class PluginVisitorRegistry { >>>>>>>> +public final class PluginVisitors { >>>>>>>> >>>>>>>> private static final Logger LOGGER = StatusLogger.getLogger(); >>>>>>>> >>>>>>>> - // map of annotation classes to their corresponding PluginVisitor >>>>>>>> classes >>>>>>>> - // generics are fun! >>>>>>>> - private static final Map<Class<? extends Annotation>, Class<? >>>>>>>> extends PluginVisitor<? extends Annotation>>> REGISTRY; >>>>>>>> - >>>>>>>> - static { >>>>>>>> - // register the default PluginVisitor classes >>>>>>>> - // TODO: this could probably be combined with the usual >>>>>>>> plugin architecture instead >>>>>>>> - REGISTRY = new ConcurrentHashMap<Class<? extends Annotation>, >>>>>>>> Class<? extends PluginVisitor<? extends Annotation>>>(); >>>>>>>> - registerVisitor(PluginAttribute.class, >>>>>>>> PluginAttributeVisitor.class); >>>>>>>> - registerVisitor(SensitivePluginAttribute.class, >>>>>>>> SensitivePluginAttributeVisitor.class); >>>>>>>> - registerVisitor(PluginConfiguration.class, >>>>>>>> PluginConfigurationVisitor.class); >>>>>>>> - registerVisitor(PluginNode.class, PluginNodeVisitor.class); >>>>>>>> - � >>>>> >>>>> >>>>> >>>>> -- >>>>> Matt Sicker <[email protected]> >>>> >>>> >>>> >>>> -- >>>> E-Mail: [email protected] | [email protected] >>>> Java Persistence with Hibernate, Second Edition >>>> JUnit in Action, Second Edition >>>> Spring Batch in Action >>>> Blog: http://garygregory.wordpress.com >>>> Home: http://garygregory.com/ >>>> Tweet! http://twitter.com/GaryGregory >>> >>> >>> >>> -- >>> Matt Sicker <[email protected]> > > > > -- > Matt Sicker <[email protected]>
