2010-08-24 14 views
1

J'ai travaillé sur l'intégration Open Social dans un service, et en modifiant Apache Shindig pour accueillir. Il y a des fonctionnalités non-open-social que j'aimerais utiliser, et j'ai compris jusqu'à présent comment ajouter des fonctionnalités js de base et des méthodes de données côté serveur. Cependant, je voudrais ajouter à la norme Data Pipelining, et j'ai du mal à trouver de la documentation. Est-ce que quelqu'un a une idée de comment faire des changements à la partie Open Social Templates d'Apache Shindig? La documentation est, euh, éparse.Modifier Apache Shindig pour accepter les nouveaux pipelines de données

+0

Pouvez-vous donner un exemple du type de modifications que vous aimeriez apporter au modèle? Les docs n'ont pas l'air trop clairsemés. –

+0

@Vincent. J'ai un SPI personnalisé, et j'aimerais savoir comment je pourrais ajouter de nouveaux tags pour l'accepter dans la fonctionnalité de pipelining de données. Par exemple, si mon spi personnalisé dispose d'une méthode 'getInfo', comment puis-je l'associer à un DataPipeline et permettre aux gadgets d'accéder aux données avec cette API? –

Répondre

1

Je n'ai pas trop d'expérience de travail avec Shindig, je vais essayer de vous aider. Apache Shindig utilise Google Guice comme structure d'injection de dépendance, ce qui simplifie l'écrasement des implémentations de services shindig. Avec google guice, vous pouvez créer vos propres modules et les injecter dans shindig.

Probablement, vous avez besoin d'étendre org.apache.shindig.gadgets.render.ProxyRenderer, mettre en œuvre org.netmera.portal.shindig.RequestPipeline, org.apache.shindig.gadgets.templates.TemplateModule et de plus en plus ...

Je pense que, pour accrocher votre service, un module comme celui-ci est nécessaire. Ici, MyHandler.class est mon propre gestionnaire:

/** 
* Provides social api component injection. 
*/ 
public class MySocialApiModule extends SocialApiGuiceModule { 

    /* 
    * (non-Javadoc) 
    * 
    * @see 
    * org.apache.shindig.social.core.config.SocialApiGuiceModule#configure() 
    */ 
    @Override 
    protected void configure(){ 
     this.bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet")).to(DataServiceServletFetcher.class); 
     this.bind(Boolean.class).annotatedWith(Names.named(AnonymousAuthenticationHandler.ALLOW_UNAUTHENTICATED)).toInstance(Boolean.TRUE); 
     this.bind(XStreamConfiguration.class).to(XStream081Configuration.class); 
     this.bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.xml")).to(BeanXStreamConverter.class); 
     this.bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.json")).to(BeanJsonConverter.class); 
     this.bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.atom")).to(BeanXStreamAtomConverter.class); 
     this.bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider(AuthenticationHandlerProvider.class); 
     final Multibinder<Object> handlerBinder = Multibinder.newSetBinder(this.binder(), Object.class, Names.named("org.apache.shindig.handlers")); 
     for (final Class handler : this.getHandlers()) { 
      handlerBinder.addBinding().toInstance(handler); 
     } 
     this.bind(OAuthDataStore.class).to(MyOAuthDataStore.class); 
    } 

    /** 
    * Hook to provide a Set of request handlers. Subclasses may override to add 
    * or replace additional handlers. 
    */ 
    @Override 
    protected Set<Class<?>> getHandlers(){ 
     return ImmutableSet.<Class<?>> of(ActivityHandler.class, AppDataHandler.class, MyPersonHandler.class, MessageHandler.class, MyHandler.class, ACLHandler.class); 
    } 
} 

hovewer, vous devriez creuser dans Shindig et Guice pour faire les choses comme exactement ce que vous voulez. Il y a pas mal d'exemples sur le web qui expliquent comment étendre et configurer Shindig avec Guice.

+0

Merci pour l'aide. –