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 <remko.po...@gmail.com> wrote:

> Really? What about the OSGi classloader issue you mentioned?
>
> Sent from my iPhone
>
> On 2014/05/28, at 7:34, Matt Sicker <boa...@gmail.com> wrote:
>
> Will do :)
>
>
> On 27 May 2014 15:27, Gary Gregory <garydgreg...@gmail.com> wrote:
>
>> I'll leave it to you to fix that up then ;-)
>>
>> Gary
>>
>>
>> On Tue, May 27, 2014 at 4:19 PM, Matt Sicker <boa...@gmail.com> 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 <garydgreg...@gmail.com> 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 <remko.po...@gmail.com> 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, <mattsic...@apache.org> 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 <boa...@gmail.com>
>>>
>>
>>
>>
>> --
>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>> Java Persistence with Hibernate, Second 
>> Edition<http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>
>
> --
> Matt Sicker <boa...@gmail.com>
>
>


-- 
Matt Sicker <boa...@gmail.com>

Reply via email to