2010-08-30 15 views
0

Nous étudions ici les technologies pour un projet prometteur et je souhaite vraiment utiliser Guice comme framework d'injection de dépendances. Je souhaite également utiliser Hessian pour les communications client/serveur, mais cela ne semble pas compatible avec Guice.Comment intégrer Hessian avec Guice?

public class WebMobule extends ServletModule { 

@Override 
protected void configureServlets() { 

    serve("/fileupload").with(FileUploadServlet.class); 

    // this doesn't work! AuthenticationServlet extends HessianServlet 
    // HessianServlet extends GenericServlet - Guice wants something that extends 
    // HttpServlet 
    serve("/authentication").with(AuthenticationServlet.class); 

} 

Est-ce que quelqu'un a réussi à résoudre ce problème? Si oui, comment l'avez-vous fait?

acclamations

Phil

Répondre

2

J'écrire un HessianHttpServlet de mesure qui étend HttpServlet et les délégués méthode appelle à un HessianServlet encapsulé. De cette façon, l'appel de Guice sera satisfait et vous utiliserez le comportement de HessianServlet.

0

Il a besoin d'un peu de travail, mais fondamentalement je résolu le problème avec cette (merci de syntaxe!):

@Singleton 
public class AuthenticationWrapperServlet extends HttpServlet { 

    private static final Logger LOG = Logger.getLogger(HessianDelegateServlet.class); 

    // this is the HessianServlet 
    private AuthenticationServlet authenticationServlet; 

    @Override 
    public void init(ServletConfig config) throws ServletException { 
     LOG.trace("init() in"); 
     try { 
      if (authenticationServlet == null) { 
       authenticationServlet = new AuthenticationServlet(); 
      } 
      authenticationServlet.init(config); 
     } catch (Throwable t) { 
      LOG.error("Error initialising hessian servlet", t); 
      throw new ServletException(t); 
     } 
     LOG.trace("init() out"); 
    } 

    @Override 
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 

     try { 
      authenticationServlet.service(request, response); 
     } catch (Throwable t) { 
      LOG.error("Error calling service()", t); 
      throw new ServletException(t); 
     } 

    } 
} 
0

J'ai créé un petit projet open source qui permet une intégration facile de Guice et la toile de jute. Vous pouvez utiliser la configuration à base d'annotation comme ceci: WebService:

@HessianWebService 
public class UserServiceImpl implements UserService { 
    ... 
} 

configuration Guice:

public class WebServiceGuiceServletContextListener extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(
       /* your guice modules */ 
       new HessianWebServicesModule("your web service implementations package") 
     ); 
    } 
} 

ou la façon manuelle à l'aide du EDSL:

public class WebServiceGuiceServletContextListener extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(
       /* your guice modules */ 
       new HessianWebServicesModule(){ 
        @Override 
        protected void configureHessianWebServices() { 
         serveHessianWebService(UserService.class).usingUrl("/Users"); 
        } 
       } 
     ); 
    } 
} 

Plus d'informations, options de configuration et des exemples complets sont disponibles ici: https://bitbucket.org/richard_hauswald/hessian-guice/