Author: [email protected]
Date: Tue Apr 5 10:28:58 2011
New Revision: 942
Log:
[sandbox] ShindigRegistrationServiceImpl must monitor DispatcherService to
manage shindig servlet lifecycles
Modified:
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigRegistrationServiceImpl.java
Modified:
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
==============================================================================
---
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
(original)
+++
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
Tue Apr 5 10:28:58 2011
@@ -146,6 +146,7 @@
createComponent()
.setImplementation(ShindigRegistrationServiceImpl.class)
.setInterface(new String[] { ShindigService.class.getName() },
null)
+
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
.add(createServiceDependency().setService(LogService.class).setRequired(true))
.add(createServiceDependency().setService(GuiceInjectorService.class).setRequired(true))
.add(createServiceDependency().setService(SocialApiModule.class).setRequired(true))
Modified:
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigRegistrationServiceImpl.java
==============================================================================
---
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigRegistrationServiceImpl.java
(original)
+++
branches/AMDATU-283-dev/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigRegistrationServiceImpl.java
Tue Apr 5 10:28:58 2011
@@ -33,7 +33,6 @@
import org.amdatu.opensocial.shindig.ShindigService;
import org.amdatu.opensocial.shindig.osgi.Activator;
import org.amdatu.web.dispatcher.DispatcherService;
-import org.amdatu.web.httpcontext.ResourceProvider;
import org.apache.felix.dm.Component;
import org.apache.felix.dm.DependencyManager;
import org.apache.shindig.auth.AuthenticationServletFilter;
@@ -48,14 +47,12 @@
import org.apache.shindig.protocol.JsonRpcServlet;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
-import org.osgi.service.http.HttpService;
import org.osgi.service.log.LogService;
/**
- * This service is responsible for registration and unregistration of Shindig
servlets, filters and static
- * resources.
- *
- * @author ivol
+ * This service manages construction/destruction and
registration/deregistration of
+ * shindig servlets and filters. These depend on
<code>GuiceInjectorService</code>
+ * availability and <code>DispatcherService</code> lifecycle.
*/
public class ShindigRegistrationServiceImpl implements ShindigService {
@@ -104,7 +101,6 @@
registerAuthenticationFilter();
m_logService.log(LogService.LOG_INFO, getClass().getName() + " service
initialized");
-
}
/**
@@ -210,30 +206,28 @@
}
/**
- * This method sets the given {@link HttpService} object and initializes
all Shindig-specific servlets.
- * Since it can only be invoked when the Guice context is available, it is
invoked from there
+ * Register additional servlets
*/
private void registerResources() {
try {
// Register the gadget rendering servlet. The gadget rendering
servlet takes a gadget XML file
// (for example
http://gerculanum.appspot.com/gadgets/com.example.chessgadget.client.ChessGadget.gadget.xml)
// and converts it to HTML. 'ifr' stands for the 'iframe' way of
gadget rendering
- registerServlet(GADGET_SERVLET_BASE, new GadgetRenderingServlet());
+ registerServlet(GADGET_SERVLET_BASE, new GadgetRenderingServlet(),
null);
+
+ registerServlet(MAKEREQUEST_BASE, new MakeRequestServlet(), null);
+ registerServlet(PROXY_BASE, new ProxyServlet(), null);
+ registerServlet(CONCAT_BASE, new ConcatProxyServlet(), null);
+ registerServlet(OAUTH_CALLBACK_BASE, new OAuthCallbackServlet(),
null);
+ registerServlet(METADATA_BASE, new RpcServlet(), null);
+ registerServlet(JS_BASE, new JsServlet(), null);
- // Register other servlets
Properties servletProperties = new Properties();
servletProperties.put("init.handlers",
"org.apache.shindig.social.handlers");
- registerServlet(MAKEREQUEST_BASE, new MakeRequestServlet());
- registerServlet(PROXY_BASE, new ProxyServlet());
- registerServlet(CONCAT_BASE, new ConcatProxyServlet());
- registerServlet(OAUTH_CALLBACK_BASE, new OAuthCallbackServlet());
- registerServlet(METADATA_BASE, new RpcServlet());
- registerServlet(JS_BASE, new JsServlet());
registerServlet(REST_BASE, new DataServiceServlet(),
servletProperties);
registerServlet(GADGETS_REST_BASE, new DataServiceServlet(),
servletProperties);
registerServlet(GADGETS_RPC_BASE, new JsonRpcServlet(),
servletProperties);
registerServlet(ECHO_BASE, new EchoServlet(), servletProperties);
-
}
catch (Throwable t) {
m_logService.log(LogService.LOG_ERROR, "Can not activate
OpenSocial API.", t);
@@ -241,41 +235,23 @@
}
/**
- * This method sets the given {@link HttpService} object and deregisters
all Shindig-specific servlets.
+ * Destroy all components to guard Servlet lifecycle
*/
private void unregisterResources() {
for (Component servletComponent : m_registeredServletComponents) {
m_dependencyManager.remove(servletComponent);
}
m_registeredServletComponents.clear();
-
- }
-
- public URL getResource(String name) {
- final String pathPrefix = Activator.ALIAS + "/";
- if (name != null && name.startsWith(pathPrefix)) {
- return
m_bundleContext.getBundle().getResource(name.substring(pathPrefix.length()));
- }
- return null;
- }
-
- private void registerServlet(String alias, Servlet servlet) {
- registerServlet(alias, servlet, null);
}
/**
- * Registers a servlet whiteboard-style. Note that we should not mix
whiteboard style with direct calls to the
- * HttpService;
- * they do not share the same servlet context and the Guice injector is
only registered on the servlet context for
- * the
- * whiteboard-style http service.
+ * Register servlet under the common opensoial contextId
*/
private void registerServlet(String alias, Servlet servlet, Properties
servletProperties) {
- Properties properties = new Properties();
+ final Properties properties = new Properties();
if (servletProperties != null) {
properties.putAll(servletProperties);
}
-
properties.put(DispatcherService.ALIAS_KEY, alias);
properties.put(DispatcherService.CONTEXT_ID_KEY, Activator.CONTEXTID);
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits