Author: cziegeler
Date: Tue Aug 24 13:52:02 2010
New Revision: 988540

URL: http://svn.apache.org/viewvc?rev=988540&view=rev
Log:
SLING-1691 :  Improve startup behaviour

Modified:
    sling/trunk/contrib/scripting/jsp-taglib-atom/pom.xml
    
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/AbstractAbderaHandler.java
    
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/EntryTagHandler.java
    
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/internal/AbderaActivator.java

Modified: sling/trunk/contrib/scripting/jsp-taglib-atom/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/jsp-taglib-atom/pom.xml?rev=988540&r1=988539&r2=988540&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/jsp-taglib-atom/pom.xml (original)
+++ sling/trunk/contrib/scripting/jsp-taglib-atom/pom.xml Tue Aug 24 13:52:02 
2010
@@ -57,15 +57,12 @@
                             *
                         </Import-Package>
                         <Export-Package>
-                            
org.apache.sling.atom.taglib.*;version=${pom.version}
+                            org.apache.sling.atom.taglib;version=1.0.0,
+                            org.apache.sling.atom.taglib.media;version=1.0.0
                         </Export-Package>
                         <Private-Package>
-                            org.apache.sling.atom.taglib.internal.*,
-                            org.osgi.util.tracker
+                            org.apache.sling.atom.taglib.internal.*
                         </Private-Package>
-                        <Bundle-Activator>
-                            
org.apache.sling.atom.taglib.internal.AbderaActivator
-                        </Bundle-Activator>
                     </instructions>
                 </configuration>
             </plugin>
@@ -81,6 +78,7 @@
             <groupId>javax.servlet</groupId>
             <artifactId>jsp-api</artifactId>
             <version>2.0</version>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
@@ -109,8 +107,6 @@
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
-            <scope>compile</scope>
-            <optional>true</optional>
         </dependency>
     </dependencies>
 </project>

Modified: 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/AbstractAbderaHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/AbstractAbderaHandler.java?rev=988540&r1=988539&r2=988540&view=diff
==============================================================================
--- 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/AbstractAbderaHandler.java
 (original)
+++ 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/AbstractAbderaHandler.java
 Tue Aug 24 13:52:02 2010
@@ -18,40 +18,21 @@
  */
 package org.apache.sling.atom.taglib;
 
-import javax.servlet.ServletContext;
 import javax.servlet.ServletRequest;
 import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.BodyTagSupport;
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
+import org.apache.sling.atom.taglib.internal.AbderaActivator;
 
 public class AbstractAbderaHandler extends BodyTagSupport {
 
-    public static final String ABDERA_ATTRIBUTE = "org.apache.abdera.Abdera";
-
-    private static final long serialVersionUID = 1L;
-
-    public AbstractAbderaHandler() {
-        super();
-    }
+    private static final long serialVersionUID = 2L;
 
     protected Abdera getAbdera() throws JspException {
-        return getAbdera(pageContext);
-    }
-
-    protected Abdera getAbdera(PageContext pageContexxt) throws JspException {
-        ServletContext context = pageContext.getServletContext();
-
-        Object obj = context.getAttribute(ABDERA_ATTRIBUTE);
-        if (obj instanceof Abdera) {
-            return (Abdera) obj;
-        }
-
-        // fallback to failure !!
-        throw new JspException("Abdera not available");
+        return AbderaActivator.getAbdera();
     }
 
     protected Feed getFeed(ServletRequest request) throws JspException {

Modified: 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/EntryTagHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/EntryTagHandler.java?rev=988540&r1=988539&r2=988540&view=diff
==============================================================================
--- 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/EntryTagHandler.java
 (original)
+++ 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/EntryTagHandler.java
 Tue Aug 24 13:52:02 2010
@@ -22,7 +22,6 @@ import java.util.Date;
 
 import javax.servlet.jsp.JspException;
 
-import org.apache.abdera.i18n.text.UrlEncoding;
 import org.apache.abdera.model.Entry;
 
 public class EntryTagHandler extends AbstractAbderaHandler {

Modified: 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/internal/AbderaActivator.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/internal/AbderaActivator.java?rev=988540&r1=988539&r2=988540&view=diff
==============================================================================
--- 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/internal/AbderaActivator.java
 (original)
+++ 
sling/trunk/contrib/scripting/jsp-taglib-atom/src/main/java/org/apache/sling/atom/taglib/internal/AbderaActivator.java
 Tue Aug 24 13:52:02 2010
@@ -18,104 +18,46 @@
  */
 package org.apache.sling.atom.taglib.internal;
 
-import javax.servlet.ServletContext;
+import javax.servlet.jsp.JspException;
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.ext.media.MediaExtensionFactory;
 import org.apache.abdera.ext.opensearch.model.OpenSearchExtensionFactory;
 import org.apache.abdera.factory.Factory;
 import org.apache.abdera.parser.stax.FOMFactory;
-import org.apache.sling.atom.taglib.AbstractAbderaHandler;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
 
-public class AbderaActivator implements BundleActivator {
+public abstract class AbderaActivator {
 
-    private static final String SERVLET_CONTEXT_SERVICE = 
"javax.servlet.ServletContext";
+    private static Abdera ABDERA;
 
-    private ServiceTracker servletContext;
+    private static final Object LOCK = new Object();
 
-    private Abdera abdera;
-
-    public void start(BundleContext context) {
-        servletContext = new ServletContextTracker(context);
-        servletContext.open();
-    }
-
-    public void stop(BundleContext context) {
-        if (servletContext != null) {
-            servletContext.close();
-            servletContext = null;
-        }
-
-        abdera = null;
-    }
-
-    private class ServletContextTracker extends ServiceTracker {
-
-        private ServletContextTracker(BundleContext context) {
-            super(context, SERVLET_CONTEXT_SERVICE, null);
-        }
-
-        @Override
-        public Object addingService(ServiceReference reference) {
-            Object service = super.addingService(reference);
-            if (service instanceof ServletContext) {
-                ServletContext ctx = (ServletContext) service;
-                Object attr = 
ctx.getAttribute(AbstractAbderaHandler.ABDERA_ATTRIBUTE);
-                if (attr instanceof Abdera) {
-                    // nothing to do, strange that it already is here, 
though...
-                } else if (attr != null) {
-                    // some other attribute of the same name ??
-                    // might log this and do nothing !
-                } else {
-                    // create Abdera
-                    final Abdera abdera = getAbdera();
-                    ctx.setAttribute(AbstractAbderaHandler.ABDERA_ATTRIBUTE,
-                        abdera);
-                }
-            }
-            return service;
-        }
-
-        @Override
-        public void removedService(ServiceReference reference, Object service) 
{
-            if (service instanceof ServletContext) {
-                ServletContext ctx = (ServletContext) service;
-                Object attr = 
ctx.getAttribute(AbstractAbderaHandler.ABDERA_ATTRIBUTE);
-                if (attr == abdera) {
-                    
ctx.removeAttribute(AbstractAbderaHandler.ABDERA_ATTRIBUTE);
+    public static Abdera getAbdera() throws JspException {
+        if (ABDERA == null) {
+            synchronized ( LOCK ) {
+                if ( ABDERA == null ) {
+                    final ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
+                    final ClassLoader osgiClassloader = 
AbderaActivator.class.getClassLoader();
+                    
Thread.currentThread().setContextClassLoader(osgiClassloader);
+
+                    try {
+
+                        final Abdera a = new Abdera();
+                        final Factory f = a.getFactory();
+                        if (f instanceof FOMFactory) {
+                            FOMFactory ff = (FOMFactory) f;
+                            ff.registerExtension(new MediaExtensionFactory());
+                            ff.registerExtension(new 
OpenSearchExtensionFactory());
+                        }
+                        ABDERA = a;
+
+                    } finally {
+                        
Thread.currentThread().setContextClassLoader(classLoader);
+                    }
                 }
             }
-
-            super.removedService(reference, service);
-        }
-    }
-
-    private Abdera getAbdera() {
-        if (abdera == null) {
-            ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
-
-            try {
-                ClassLoader osgiClassloader = getClass().getClassLoader();
-                Thread.currentThread().setContextClassLoader(osgiClassloader);
-
-                abdera = new Abdera();
-                Factory f = abdera.getFactory();
-                if (f instanceof FOMFactory) {
-                    FOMFactory ff = (FOMFactory) f;
-                    ff.registerExtension(new MediaExtensionFactory());
-                    ff.registerExtension(new OpenSearchExtensionFactory());
-                }
-
-            } finally {
-
-                Thread.currentThread().setContextClassLoader(classLoader);
-            }
         }
 
-        return abdera;
+        return ABDERA;
     }
 }


Reply via email to