Author: lindner
Date: Wed May 12 23:39:51 2010
New Revision: 943752

URL: http://svn.apache.org/viewvc?rev=943752&view=rev
Log:
Refactor the way we configure REST/RPC handlers by using Guice multibindings

This allows for easier extension by multiple guice modules.  Thus it
now becomes possible to write shindig plugins (for the most part...)

Also remove JettyLauncher (we have mvn jetty:run now..)

Removed:
    
shindig/trunk/java/server/src/test/java/org/apache/shindig/server/JettyLauncher.java
Modified:
    shindig/trunk/UPGRADING
    shindig/trunk/config/container.js
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
    shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
    
shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
    
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
    
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/SampleModule.java
    
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
    
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java

Modified: shindig/trunk/UPGRADING
URL: 
http://svn.apache.org/viewvc/shindig/trunk/UPGRADING?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- shindig/trunk/UPGRADING (original)
+++ shindig/trunk/UPGRADING Wed May 12 23:39:51 2010
@@ -4,12 +4,25 @@ FROM 1.0.x TO 1.1.x
 Almost all interfaces have been updated from 1.0.x -> 1.1.x.  The 
 following information is not complete.
 
+
+
 == container.js config changes ==
 
-* gadgets.parentOrigins: Default ["*"]
+* gadgets.parentOrigins: Default ["*"] (NEW)
 
 An array of valid origin domains for the container.
 
+* Endpoint Changes for rpc
+
+The default RPC endpoints used for json-rpc were moved from /gadgets/api/rpc 
and /social/rpc to just /rpc
+
+
+== Java Dependency Changes ==
+
+Too many to mention.  Check the top-level pom.xml for all the new versions
+
+* servlet-api is upgraded to 2.5
+
 == Java Interface Changes ==
 
 * AbstractContainerConfig
@@ -44,6 +57,14 @@ Tag handler.
 
   Multibinder.newSetBinder(binder(), 
TagHandler.class).addBinding().to(MyCustomTagHandler.class);
 
+* SocialApiGuiceModule, DefaultGuiceModule
+
+Configuring a new Rest/RPC handler now uses Multibindings.  Adding a new 
binding
+is easy, just use the following syntax:
+
+    Multibinder.newSetBinder(binder(), Object.class, 
Names.named("org.apache.shindig.handlers"))
+        .addBinding().toInstance(MyHandler.class);
+
 == PHP Changes ==
 
 TBD

Modified: shindig/trunk/config/container.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/config/container.js?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- shindig/trunk/config/container.js (original)
+++ shindig/trunk/config/container.js Wed May 12 23:39:51 2010
@@ -84,7 +84,7 @@
 // Config param to load Opensocial data for social
 // preloads in data pipelining.  %host% will be
 // substituted with the current host.
-"gadgets.osDataUri" : "http://%host%/social/rpc";,
+"gadgets.osDataUri" : "http://%host%/rpc";,
 
 // Uncomment these to switch to a secure version
 //
@@ -148,7 +148,7 @@
     // Must be on the same domain as the gadget rendering server
     "path" : "http://%host%/social/rpc";,
     // Path to issue invalidate calls
-    "invalidatePath" : "http://%host%/gadgets/api/rpc";,
+    "invalidatePath" : "http://%host%/rpc";,
     "domain" : "shindig",
     "enableCaja" : false,
     "supportedFields" : {
@@ -168,7 +168,7 @@
   },
   "osapi" : {
     // The endpoints to query for available JSONRPC/REST services
-    "endPoints" : [ "http://%host%/social/rpc";, 
"http://%host%/gadgets/api/rpc"; ]                   
+    "endPoints" : [ "http://%host%/rpc"; ]                   
   },
   "osml": {
     // OSML library resource.  Can be set to null or the empty string to 
disable OSML

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
 Wed May 12 23:39:51 2010
@@ -23,7 +23,9 @@ import com.google.common.collect.Immutab
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
+import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.InvalidationHandler;
@@ -73,16 +75,15 @@ public class DefaultGuiceModule extends 
 
     // We perform static injection on HttpResponse for cache TTLs.
     requestStaticInjection(HttpResponse.class);
-  }
-
 
-  @Provides
-  @Singleton
-  @Named("org.apache.shindig.gadgets.handlers")
-  protected Set<Object> provideGadgetHandlers() {
-    return ImmutableSet.<Object>of(InvalidationHandler.class, 
HttpRequestHandler.class);
+    registerGadgetHandlers();
   }
 
+  protected void registerGadgetHandlers() {
+    Multibinder<Object> handlerBinder = Multibinder.newSetBinder(binder(), 
Object.class, Names.named("org.apache.shindig.handlers"));
+    handlerBinder.addBinding().to(InvalidationHandler.class);
+    handlerBinder.addBinding().to(HttpRequestHandler.class);
+  }
 
   public static final ThreadFactory DAEMON_THREAD_FACTORY =
     new ThreadFactory() {

Modified: shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml (original)
+++ shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml Wed May 12 
23:39:51 2010
@@ -31,6 +31,7 @@
     <param-value>
       org.apache.shindig.common.PropertiesModule:
       org.apache.shindig.gadgets.DefaultGuiceModule:
+      org.apache.shindig.social.core.config.SocialApiGuiceModule:
       org.apache.shindig.social.sample.SampleModule:
       org.apache.shindig.gadgets.oauth.OAuthModule:
       org.apache.shindig.common.cache.ehcache.EhCacheModule:
@@ -91,6 +92,8 @@
     <url-pattern>/gadgets/makeRequest</url-pattern>
     <url-pattern>/gadgets/api/rpc/*</url-pattern>
     <url-pattern>/gadgets/api/rest/*</url-pattern>
+    <url-pattern>/rpc/*</url-pattern>
+    <url-pattern>/rest/*</url-pattern>
   </filter-mapping>
 
   <listener>
@@ -158,50 +161,26 @@
     <servlet-class>org.apache.shindig.gadgets.servlet.JsServlet</servlet-class>
   </servlet>
 
-  <!-- Serve social REST api -->
   <servlet>
-    <servlet-name>socialRestapiServlet</servlet-name>
+    <servlet-name>restapiServlet</servlet-name>
     <servlet-class>
       org.apache.shindig.protocol.DataServiceServlet
     </servlet-class>
     <init-param>
       <param-name>handlers</param-name>
-      <param-value>org.apache.shindig.social.handlers</param-value>
+      <param-value>org.apache.shindig.handlers</param-value>
     </init-param>
   </servlet>
 
   <!-- Serve social RPC api -->
   <servlet>
-    <servlet-name>socialJsonRpcServlet</servlet-name>
+    <servlet-name>jsonRpcServlet</servlet-name>
     <servlet-class>
       org.apache.shindig.protocol.JsonRpcServlet
     </servlet-class>
     <init-param>
       <param-name>handlers</param-name>
-      <param-value>org.apache.shindig.social.handlers</param-value>
-    </init-param>
-  </servlet>
-
-  <!-- Serve gadgets RPC api -->
-  <servlet>
-    <servlet-name>gadgetsJsonRpcServlet</servlet-name>
-    <servlet-class>
-      org.apache.shindig.protocol.JsonRpcServlet
-    </servlet-class>
-    <init-param>
-      <param-name>handlers</param-name>
-      <param-value>org.apache.shindig.gadgets.handlers</param-value>
-    </init-param>
-  </servlet>
-
-  <servlet>
-    <servlet-name>gadgetsRestapiServlet</servlet-name>
-    <servlet-class>
-      org.apache.shindig.protocol.DataServiceServlet
-    </servlet-class>
-    <init-param>
-      <param-name>handlers</param-name>
-      <param-value>org.apache.shindig.gadgets.handlers</param-value>
+      <param-value>org.apache.shindig.handlers</param-value>
     </init-param>
   </servlet>
 
@@ -229,13 +208,17 @@
   </servlet-mapping>
 
   <servlet-mapping>
-    <servlet-name>gadgetsJsonRpcServlet</servlet-name>
+    <servlet-name>jsonRpcServlet</servlet-name>
+    <url-pattern>/rpc/*</url-pattern>
     <url-pattern>/gadgets/api/rpc/*</url-pattern>
+    <url-pattern>/social/rpc/*</url-pattern>
   </servlet-mapping>
 
   <servlet-mapping>
-    <servlet-name>gadgetsRestapiServlet</servlet-name>
+    <servlet-name>restapiServlet</servlet-name>
+    <url-pattern>/rest/*</url-pattern>
     <url-pattern>/gadgets/api/rest/*</url-pattern>
+    <url-pattern>/social/rest/*</url-pattern>
   </servlet-mapping>
 
   <servlet-mapping>
@@ -264,16 +247,6 @@
   </servlet-mapping>
 
   <servlet-mapping>
-    <servlet-name>socialRestapiServlet</servlet-name>
-    <url-pattern>/social/rest/*</url-pattern>
-  </servlet-mapping>
-
-  <servlet-mapping>
-    <servlet-name>socialJsonRpcServlet</servlet-name>
-    <url-pattern>/social/rpc/*</url-pattern>
-  </servlet-mapping>
-
-  <servlet-mapping>
     <servlet-name>sampleOAuth</servlet-name>
     <url-pattern>/oauth/*</url-pattern>
   </servlet-mapping>

Modified: 
shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- 
shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
 (original)
+++ 
shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
 Wed May 12 23:39:51 2010
@@ -29,6 +29,7 @@ import org.apache.shindig.gadgets.servle
 import org.apache.shindig.gadgets.servlet.MakeRequestServlet;
 import org.apache.shindig.protocol.DataServiceServlet;
 import org.apache.shindig.protocol.JsonRpcServlet;
+import org.apache.shindig.social.core.config.SocialApiGuiceModule;
 import org.apache.shindig.social.sample.SampleModule;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.ResourceHandler;
@@ -114,8 +115,12 @@ public class EndToEndServer {
 
     Map<String, String> initParams = Maps.newHashMap();
     String modules = Joiner.on(":")
-        .join(SampleModule.class.getName(), DefaultGuiceModule.class.getName(),
-            PropertiesModule.class.getName(), OAuthModule.class.getName());
+        .join(SocialApiGuiceModule.class.getName(),
+              SampleModule.class.getName(), 
+              DefaultGuiceModule.class.getName(),
+              PropertiesModule.class.getName(), 
+              OAuthModule.class.getName()
+             );
 
     initParams.put(GuiceServletContextListener.MODULES_ATTRIBUTE, modules);
     context.setInitParams(initParams);
@@ -127,13 +132,13 @@ public class EndToEndServer {
     // Attach DataServiceServlet, wrapped in a proxy to fake errors
     ServletHolder restServletHolder = new ServletHolder(new ForceErrorServlet(
         new DataServiceServlet()));
-    restServletHolder.setInitParameter("handlers", 
"org.apache.shindig.social.handlers");
+    restServletHolder.setInitParameter("handlers", 
"org.apache.shindig.handlers");
     context.addServlet(restServletHolder, REST_BASE);
     context.addFilter(AuthenticationServletFilter.class, REST_BASE, 0);
 
     // Attach JsonRpcServlet, wrapped in a proxy to fake errors
     ServletHolder rpcServletHolder = new ServletHolder(new 
ForceErrorServlet(new JsonRpcServlet()));
-    rpcServletHolder.setInitParameter("handlers", 
"org.apache.shindig.social.handlers");
+    rpcServletHolder.setInitParameter("handlers", 
"org.apache.shindig.handlers");
     context.addServlet(rpcServletHolder, JSON_RPC_BASE);
     context.addFilter(AuthenticationServletFilter.class, JSON_RPC_BASE, 0);
 
@@ -143,7 +148,7 @@ public class EndToEndServer {
 
     // Attach the Gadget 
     ServletHolder gadgetsJsonRpcServletHolder = new ServletHolder(new 
JsonRpcServlet());
-    gadgetsJsonRpcServletHolder.setInitParameter("handlers", 
"org.apache.shindig.gadgets.handlers");
+    gadgetsJsonRpcServletHolder.setInitParameter("handlers", 
"org.apache.shindig.handlers");
     context.addServlet(gadgetsJsonRpcServletHolder, GADGET_RPC_BASE);
     context.addFilter(AuthenticationServletFilter.class, GADGET_RPC_BASE, 0);
 

Modified: 
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- 
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
 (original)
+++ 
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
 Wed May 12 23:39:51 2010
@@ -40,6 +40,7 @@ import java.util.Set;
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.AbstractModule;
 import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Names;
 
 /**
@@ -70,8 +71,10 @@ public class SocialApiGuiceModule extend
     bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider(
         AuthenticationHandlerProvider.class);
 
-    bind(new 
TypeLiteral<Set<Object>>(){}).annotatedWith(Names.named("org.apache.shindig.social.handlers"))
-        .toInstance(getHandlers());
+    Multibinder<Object> handlerBinder = Multibinder.newSetBinder(binder(), 
Object.class, Names.named("org.apache.shindig.handlers"));
+    for (Class handler : getHandlers()) {
+      handlerBinder.addBinding().toInstance(handler);
+    }
 
     
bind(Long.class).annotatedWith(Names.named("org.apache.shindig.serviceExpirationDurationMinutes")).toInstance(60L);
   }
@@ -80,8 +83,8 @@ public class SocialApiGuiceModule extend
    * Hook to provide a Set of request handlers.  Subclasses may override
    * to add or replace additional handlers.
    */
-  protected Set<Object> getHandlers() {
-    return ImmutableSet.<Object>of(ActivityHandler.class, AppDataHandler.class,
+  protected Set<Class<?>> getHandlers() {
+    return ImmutableSet.<Class<?>>of(ActivityHandler.class, 
AppDataHandler.class,
         PersonHandler.class, MessageHandler.class);
   }
 }

Modified: 
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/SampleModule.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/SampleModule.java?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- 
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/SampleModule.java
 (original)
+++ 
shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/SampleModule.java
 Wed May 12 23:39:51 2010
@@ -17,7 +17,6 @@
  */
 package org.apache.shindig.social.sample;
 
-import org.apache.shindig.social.core.config.SocialApiGuiceModule;
 import org.apache.shindig.social.opensocial.oauth.OAuthDataStore;
 import org.apache.shindig.social.opensocial.spi.ActivityService;
 import org.apache.shindig.social.opensocial.spi.AppDataService;
@@ -30,6 +29,9 @@ import org.apache.shindig.social.sample.
 import java.util.Set;
 
 import com.google.common.collect.ImmutableSet;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Names;
 
 /**
@@ -38,12 +40,10 @@ import com.google.inject.name.Names;
  * but does provide a good overview of the pieces of Shindig that require
  * custom container implementations.
  */
-public class SampleModule extends SocialApiGuiceModule {
+public class SampleModule extends AbstractModule {
 
   @Override
   protected void configure() {
-    super.configure();
-    
     bind(String.class).annotatedWith(Names.named("shindig.canonical.json.db"))
         .toInstance("sampledata/canonicaldb.json");
     bind(ActivityService.class).to(JsonDbOpensocialService.class);
@@ -53,13 +53,7 @@ public class SampleModule extends Social
     
     bind(OAuthDataStore.class).to(SampleOAuthDataStore.class);
 
-  }
-
-  @Override
-  protected Set<Object> getHandlers() {
-    ImmutableSet.Builder<Object> handlers = ImmutableSet.builder();
-    handlers.addAll(super.getHandlers());
-    handlers.add(SampleContainerHandler.class);
-    return handlers.build();
+    Multibinder<Object> handlerBinder = Multibinder.newSetBinder(binder(), 
Object.class, Names.named("org.apache.shindig.handlers"));
+    handlerBinder.addBinding().toInstance(SampleContainerHandler.class);
   }
 }

Modified: 
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- 
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
 (original)
+++ 
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
 Wed May 12 23:39:51 2010
@@ -69,7 +69,7 @@ public class SocialApiTestsGuiceModule e
         BeanJsonConverter.class);
 
     bind(new TypeLiteral<Set<Object>>(){}).annotatedWith(
-        Names.named("org.apache.shindig.social.handlers"))
+        Names.named("org.apache.shindig.handlers"))
         .toInstance(ImmutableSet.<Object>of(ActivityHandler.class, 
AppDataHandler.class,
             PersonHandler.class, MessageHandler.class));
 

Modified: 
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=943752&r1=943751&r2=943752&view=diff
==============================================================================
--- 
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
 (original)
+++ 
shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
 Wed May 12 23:39:51 2010
@@ -96,7 +96,7 @@ public abstract class AbstractLargeRestf
 
     HandlerRegistry dispatcher = injector.getInstance(HandlerRegistry.class);
     dispatcher.addHandlers(injector.getInstance(Key.get(new 
TypeLiteral<Set<Object>>(){},
-        Names.named("org.apache.shindig.social.handlers"))));
+        Names.named("org.apache.shindig.handlers"))));
     servlet.setHandlerRegistry(dispatcher);
     ContainerConfig containerConfig = 
EasyMock.createMock(ContainerConfig.class);
     EasyMock.expect(containerConfig.<String>getList(null, 
"gadgets.parentOrigins")).andReturn(Collections.<String>singletonList("*")).anyTimes();


Reply via email to