Модифицировать Apache Shindig для принятия новых конвейеров данных - PullRequest
1 голос
/ 24 августа 2010

Я работаю над интеграцией Open Social в службу и изменением Apache Shindig для удобства. Есть некоторые не открытые социальные функции, которые я хотел бы использовать, и я уже выяснил, как добавить базовые функции js и методы данных на стороне сервера. Однако я хотел бы добавить к стандарту Data Pipelining , и мне трудно найти документацию. У кого-нибудь есть идеи, как вносить изменения в раздел «Открытые социальные шаблоны» Apache Shindig? Документация скудная.

1 Ответ

1 голос
/ 08 сентября 2010

У меня нет большого опыта работы с Shindig, но я постараюсь помочь.

Apache Shindig использует Google Guice в качестве среды внедрения зависимостей, которая упрощает перезапись реализаций службы shindig. С помощью Google Guice вы можете создавать свои собственные модули и вставлять их в Shindig.

Возможно, вам нужно расширить org.apache.shindig.gadgets.render.ProxyRenderer, внедрить org.netmera.portal.shindig.RequestPipeline, org.apache.shindig.gadgets.templates.TemplateModule и многое другое ...

Я думаю, чтобы подключить ваш сервис, нужен такой модуль. Здесь MyHandler.class - мой собственный обработчик:

/**
 * 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);
    }
}

Ховевер, тебе надо копаться в Шиндиг и Гисе, чтобы сделать вещи именно такими, как ты хочешь. В Интернете есть немало примеров, объясняющих расширение и настройку Shindig с Guice.

...