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;
}
}