【问题标题】:How to integrate Hessian with Guice?如何将 Hessian 与 Guice 集成?
【发布时间】:2014-05-03 23:21:16
【问题描述】:

我们正在为一个即将到来的项目寻找技术,我真的很想使用 Guice 作为我们的依赖注入框架,我也想使用 Hessian 进行客户端/服务器通信,但它似乎不兼容与 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); 

}

有没有人设法解决了这个问题 - 如果有,你是怎么解决的?

干杯

菲尔

【问题讨论】:

    标签: java guice hessian


    【解决方案1】:

    我会编写一个自定义的 HessianHttpServlet,它扩展 HttpServlet 并将方法调用委托给封装的 HessianServlet。这样,Guice 服务调用将被满足,您将使用 HessianServlet 行为。

    【讨论】:

      【解决方案2】:

      它需要一些工作,但从根本上我解决了这个问题(感谢语法!):

      @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);
              }
      
          }
      }
      

      【讨论】:

        【解决方案3】:

        我创建了一个小型开源项目,可以轻松集成 hessian 和 guice。您可以像这样使用基于注释的配置: 网络服务:

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

        Guice 配置:

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

        或使用 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");
                            }
                        }
                );
            }
        }
        

        更多信息、配置选项和完整示例可在此处获得:https://bitbucket.org/richard_hauswald/hessian-guice/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-03
          • 2011-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-24
          相关资源
          最近更新 更多