cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Freeman Fang <freeman.f...@gmail.com>
Subject Re: cxf git commit: [CXF-6131]JAX-RS resource spring auto-discovery doesn't work in OSGi
Date Wed, 03 Dec 2014 13:38:57 GMT
Hi Andriy, Sergey,

Yeah, I saw that change, +1 for it
-------------
Freeman(Yue) Fang

Red Hat, Inc. 
FuseSource is now part of Red Hat



On 2014-12-3, at 下午8:40, Sergey Beryozkin wrote:

> Hi Andriy
> Indeed - as I mentioned I reverted the changes to the parser
> Cheers, Sergey
> 
> On 03/12/14 12:38, Andrey Redko wrote:
>> Hi guys,
>> 
>> Thanks a lot for adding OSGi support. One question though: I think we
>> should hide the environment discovery (OSGi/non-OSGI) inside the
>> ClasspathScanner class.
>> ClasspathScanner, when instantiated, can figure out if it runs in OSGi
>> and create the right classpath scanner delegate (so
>> JAXRSServerFactoryBeanDefiniti__onParser will stay unchanged).
>> Thanks.
>> 
>> Best Regards,
>>     Andriy Redko
>> 
>> 
>> 
>> On Wed, Dec 3, 2014 at 6:03 AM, Sergey Beryozkin <sberyozkin@gmail.com
>> <mailto:sberyozkin@gmail.com>> wrote:
>> 
>>    Hi Freeman
>> 
>>    Thanks for this effort, I did a minor update to avoid updating all
>>    of ClasspathScanner client code (JAX-RS server & client for now -
>>    but possibly JAXWS Spring parsers in the future too).
>>    Dan may likely have more comments but for now I have a couple of
>>    questions,
>>    - is FrameworkUtil.getBundle useful ? That returns a CXF bundle, right ?
>>    - should this Spring DM code be pushed to a dedicated SpringOsgiUtil
>>    to minimize the risk of some JVMs failing with some eager resolution
>>    class loading exceptions in non-OSGI cases ?
>> 
>>    Cheers, Sergey
>> 
>> 
>>    On 03/12/14 05:06, ffang@apache.org <mailto:ffang@apache.org> wrote:
>> 
>>        Repository: cxf
>>        Updated Branches:
>>            refs/heads/master 76c4df1bc -> 0de0309f2
>> 
>> 
>>        [CXF-6131]JAX-RS resource spring auto-discovery doesn't work in OSGi
>> 
>> 
>>        Project: http://git-wip-us.apache.org/__repos/asf/cxf/repo
>>        <http://git-wip-us.apache.org/repos/asf/cxf/repo>
>>        Commit:
>>        http://git-wip-us.apache.org/__repos/asf/cxf/commit/0de0309f
>>        <http://git-wip-us.apache.org/repos/asf/cxf/commit/0de0309f>
>>        Tree: http://git-wip-us.apache.org/__repos/asf/cxf/tree/0de0309f
>>        <http://git-wip-us.apache.org/repos/asf/cxf/tree/0de0309f>
>>        Diff: http://git-wip-us.apache.org/__repos/asf/cxf/diff/0de0309f
>>        <http://git-wip-us.apache.org/repos/asf/cxf/diff/0de0309f>
>> 
>>        Branch: refs/heads/master
>>        Commit: 0de0309f28e1543660c763c158f435__3d6d2189be
>>        Parents: 76c4df1
>>        Author: Freeman Fang <freeman.fang@gmail.com
>>        <mailto:freeman.fang@gmail.com>>
>>        Authored: Wed Dec 3 13:06:42 2014 +0800
>>        Committer: Freeman Fang <freeman.fang@gmail.com
>>        <mailto:freeman.fang@gmail.com>>
>>        Committed: Wed Dec 3 13:06:42 2014 +0800
>> 
>>        ------------------------------__------------------------------__----------
>>           core/pom.xml                                    | 20
>>        ++++++++++++++++++-
>>           .../org/apache/cxf/bus/osgi/__CXFActivator.java   | 13
>>        ++++++++++++
>>           .../cxf/common/util/__SpringClasspathScanner.java | 21
>>        ++++++++++++++++++--
>>           parent/pom.xml                                  | 11 ++++++++++
>>           .../__JAXRSServerFactoryBeanDefiniti__onParser.java | 12
>>        +++++++++--
>>           5 files changed, 72 insertions(+), 5 deletions(-)
>>        ------------------------------__------------------------------__----------
>> 
>> 
>>        http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__core/pom.xml
>>        <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/core/pom.xml>
>>        ------------------------------__------------------------------__----------
>>        diff --git a/core/pom.xml b/core/pom.xml
>>        index 83ec6f8..d7e8f7a 100644
>>        --- a/core/pom.xml
>>        +++ b/core/pom.xml
>>        @@ -44,7 +44,13 @@
>> 
>>        org.slf4j*;resolution:=__optional;version="${cxf.osgi.__slf4j.version}",
>>                       org.apache.log4j*;resolution:=__optional,
>> 
>>        net.sf.cglib*;resolution:=__optional;version="${cxf.cglib.__osgi.version}",
>>        -
>>        org.springframework*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>>        + org.springframework.osgi.io
>>        <http://org.springframework.osgi.io>;__resolution:=optional;version="__${cxf.osgi.spring.osgi.__version}",
>>        +
>>        org.springframework.osgi.util;__resolution:=optional;version="__${cxf.osgi.spring.osgi.__version}",
>>        +
>>        org.springframework.aop*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>>        +
>>        org.springframework.beans*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>>        +
>>        org.springframework.context*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>>        +
>>        org.springframework.core*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>>        +
>>        org.springframework.util*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>> 
>>        org.objectweb.asm*;resolution:__=optional;version="${cxf.osgi.__asm.version}",
>> 
>>        javax.activation;version="${__cxf.osgi.javax.activation.__version}",
>> 
>>        javax.annotation;version="${__cxf.osgi.javax.annotation.__version}",
>>        @@ -205,6 +211,18 @@
>>                       <optional>true</optional>
>>                       <scope>provided</scope>
>>                   </dependency>
>>        +        <dependency>
>>        +            <groupId>org.springframework.__osgi</groupId>
>>        +            <artifactId>spring-osgi-io</__artifactId>
>>        +            <optional>true</optional>
>>        +            <scope>provided</scope>
>>        +        </dependency>
>>        +        <dependency>
>>        +            <groupId>org.springframework.__osgi</groupId>
>>        +            <artifactId>spring-osgi-core</__artifactId>
>>        +            <optional>true</optional>
>>        +            <scope>provided</scope>
>>        +        </dependency>
>>               </dependencies>
>>               <build>
>>                   <plugins>
>> 
>>        http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__core/src/main/java/org/apache/__cxf/bus/osgi/CXFActivator.java
>>        <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/core/src/main/java/org/apache/cxf/bus/osgi/CXFActivator.java>
>>        ------------------------------__------------------------------__----------
>>        diff --git
>>        a/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>>        b/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>>        index 3fed8a8..cb9cce1 100644
>>        ---
>>        a/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>>        +++
>>        b/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>>        @@ -45,14 +45,23 @@ import org.osgi.util.tracker.__ServiceTracker;
>>            * - Blueprint namespaces
>>            */
>>           public class CXFActivator implements BundleActivator {
>>        +
>>        +    /*
>>        +     * a flag to tell if run the CXF in OSGi cont
>>        +     */
>>        +    private static boolean inOSGi;
>>        +
>>               private List<Extension> extensions;
>>               private ManagedWorkQueueList workQueues = new
>>        ManagedWorkQueueList();
>>               private ServiceTracker configAdminTracker;
>>               private CXFExtensionBundleListener cxfBundleListener;
>>               private ServiceRegistration workQueueServiceRegistration;
>>        +
>>        +
>> 
>>               /** {@inheritDoc}*/
>>               public void start(BundleContext context) throws Exception {
>>        +        inOSGi = true;
>>                   cxfBundleListener = new
>>        CXFExtensionBundleListener(__context.getBundle().__getBundleId());
>>                   context.addBundleListener(__cxfBundleListener);
>>                   cxfBundleListener.__registerExistingBundles(__context);
>>        @@ -123,5 +132,9 @@ public class CXFActivator implements
>>        BundleActivator {
>>                   configAdminTracker.close();
>>                   ExtensionRegistry.__removeExtensions(extensions);
>>               }
>>        +
>>        +    public static boolean isInOSGi() {
>>        +        return inOSGi;
>>        +    }
>> 
>>           }
>> 
>>        http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__core/src/main/java/org/apache/__cxf/common/util/__SpringClasspathScanner.java
>>        <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java>
>>        ------------------------------__------------------------------__----------
>>        diff --git
>>        a/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>>        b/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>>        index 769d1f0..ce4dd7f 100644
>>        ---
>>        a/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>>        +++
>>        b/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>>        @@ -28,7 +28,10 @@ import java.util.HashSet;
>>           import java.util.List;
>>           import java.util.Map;
>> 
>>        +import org.apache.cxf.bus.osgi.__CXFActivator;
>>           import org.apache.cxf.common.__classloader.ClassLoaderUtils;
>>        +import org.osgi.framework.Bundle;
>>        +import org.osgi.framework.__FrameworkUtil;
>>           import org.springframework.core.io
>>        <http://org.springframework.core.io>.__Resource;
>>           import org.springframework.core.io
>>        <http://org.springframework.core.io>.__support.__PathMatchingResourcePatternRes__olver;
>>           import org.springframework.core.io
>>        <http://org.springframework.core.io>.__support.__ResourcePatternResolver;
>>        @@ -36,6 +39,8 @@ import
>>        org.springframework.core.type.__AnnotationMetadata;
>>           import
>>        org.springframework.core.type.__classreading.__CachingMetadataReaderFactory;
>>           import
>>        org.springframework.core.type.__classreading.MetadataReader;
>>           import
>>        org.springframework.core.type.__classreading.__MetadataReaderFactory;
>>        +import org.springframework.osgi.io
>>        <http://org.springframework.osgi.io>.__OsgiBundleResourcePatternResol__ver;
>>        +import org.springframework.osgi.util.__BundleDelegatingClassLoader;
>>           import org.springframework.util.__ClassUtils;
>> 
>>           class SpringClasspathScanner extends ClasspathScanner {
>>        @@ -156,8 +161,20 @@ class SpringClasspathScanner extends
>>        ClasspathScanner {
>>               }
>> 
>>               private ResourcePatternResolver getResolver(ClassLoader
>>        loader) {
>>        -        return loader != null
>>        -            ? new PathMatchingResourcePatternRes__olver(loader)
>>        : new PathMatchingResourcePatternRes__olver();
>>        +        if (CXFActivator.isInOSGi()) {
>>        +            //in OSGi should use spring-dm
>>        OsgiBundleResourcePatternResol__ver
>>        +            // which can handle bundle url
>>        +            Bundle bundle = null;
>>        +            if (loader instanceof BundleDelegatingClassLoader) {
>>        +                bundle =
>>        ((BundleDelegatingClassLoader)__loader).getBundle();
>>        +            } else {
>>        +                bundle =
>>        FrameworkUtil.getBundle(__SpringClasspathScanner.class);
>>        +            }
>>        +            return new OsgiBundleResourcePatternResol__ver(bundle);
>>        +        } else {
>>        +            return loader != null
>>        +                ? new
>>        PathMatchingResourcePatternRes__olver(loader) : new
>>        PathMatchingResourcePatternRes__olver();
>>        +        }
>>               }
>> 
>>               private boolean shouldSkip(final String classname) {
>> 
>>        http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__parent/pom.xml
>>        <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/parent/pom.xml>
>>        ------------------------------__------------------------------__----------
>>        diff --git a/parent/pom.xml b/parent/pom.xml
>>        index cc4cbaa..7122127 100644
>>        --- a/parent/pom.xml
>>        +++ b/parent/pom.xml
>>        @@ -56,6 +56,7 @@
>>                   <cxf.osgi.symbolic.name
>>        <http://cxf.osgi.symbolic.name>>${__project.groupId}.${project.__artifactId}</cxf.osgi.__symbolic.name
>>        <http://cxf.osgi.symbolic.name>>
>>                   <cxf.osgi.dynamic.import />
>> 
>>        <cxf.osgi.spring.version>[3.1,__5)</cxf.osgi.spring.version>
>>        +
>>        <cxf.osgi.spring.osgi.version>__[1.2.0,2)</cxf.osgi.spring.__osgi.version>
>> 
>>        <cxf.osgi.commons.lang.__version>[2.4,3)</cxf.osgi.__commons.lang.version>
>> 
>>        <cxf.osgi.slf4j.version>[1.5,__2)</cxf.osgi.slf4j.version>
>> 
>>        <cxf.osgi.javax.annotation.__version>[0.0,2)</cxf.osgi.__javax.annotation.version>
>>        @@ -1296,6 +1297,16 @@
>>                           </exclusions>
>>                       </dependency>
>>                       <dependency>
>>        +                <groupId>org.springframework.__osgi</groupId>
>>        +                <artifactId>spring-osgi-io</__artifactId>
>>        +                <version>${cxf.spring.osgi.__version}</version>
>>        +            </dependency>
>>        +            <dependency>
>>        +                 <groupId>org.springframework.__osgi</groupId>
>>        +                 <artifactId>spring-osgi-core</__artifactId>
>>        +                 <version>${cxf.spring.osgi.__version}</version>
>>        +            </dependency>
>>        +            <dependency>
>>                           <groupId>commons-codec</__groupId>
>>                           <artifactId>commons-codec</__artifactId>
>>                           <version>${cxf.commons-codec.__version}</version>
>> 
>>        http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>>        <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java>
>>        ------------------------------__------------------------------__----------
>>        diff --git
>>        a/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>>        b/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>>        index 40b6286..e17bd1a 100644
>>        ---
>>        a/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>>        +++
>>        b/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>>        @@ -21,6 +21,7 @@ package org.apache.cxf.jaxrs.spring;
>>           import java.io.IOException;
>>           import java.lang.annotation.__Annotation;
>>           import java.util.ArrayList;
>>        +import java.util.Arrays;
>>           import java.util.Collection;
>>           import java.util.List;
>>           import java.util.Map;
>>        @@ -31,6 +32,7 @@ import javax.xml.namespace.QName;
>> 
>>           import org.w3c.dom.Element;
>> 
>>        +import org.apache.cxf.bus.osgi.__CXFActivator;
>>           import
>>        org.apache.cxf.bus.spring.__BusWiringBeanFactoryPostProces__sor;
>>           import org.apache.cxf.common.util.__ClasspathScanner;
>>           import org.apache.cxf.common.util.__StringUtils;
>>        @@ -192,8 +194,14 @@ public class
>>        JAXRSServerFactoryBeanDefiniti__onParser extends
>>        AbstractBeanDefiniti
>> 
>>                       try {
>>                           if (basePackages != null) {
>>        -                    final Map< Class< ? extends Annotation >,
>>        Collection< Class< ? > > > classes =
>>        -
>>        ClasspathScanner.findClasses(__basePackages, Provider.class,
>>        Path.class);
>>        +                    //if run CXF in OSGi, we should pass in the
>>        classloader associated with
>>        +                    //the bundle which has JAXRS resources
>>        under a certain basePackages
>>        +                    ClassLoader loader =
>>        Thread.currentThread().__getContextClassLoader();
>>        +                    final Map< Class< ? extends Annotation >,
>>        Collection< Class< ? > > > classes =
>>        +                        CXFActivator.isInOSGi()
>>        +                            ? ClasspathScanner.findClasses(
>>        +                                  basePackages,
>>        Arrays.asList(Provider.class, Path.class), loader)
>>        +                            :
>>        ClasspathScanner.findClasses(__basePackages, Provider.class,
>>        Path.class);
>> 
>> 
>>        this.setProviders(createBeans(__classes.get(Provider.class)));
>> 
>>        this.setServiceBeans(__createBeans(classes.get(Path.__class)));
>> 
>> 
>> 
>>    --
>> 
>> 
> 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message