我们正在寻找一个即将到来的项目的技术,我真的想使用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);
}
有没有人设法解决这个问题 - 如果是这样你是怎么做到的?
欢呼声
菲尔
答案 0 :(得分:2)
我会编写一个自定义的HessianHttpServlet,它扩展HttpServlet并将方法调用委托给封装的HessianServlet。通过这种方式,Guice服务调用将被满足,您将使用HessianServlet行为。
答案 1 :(得分:0)
它需要一些工作,但从根本上我解决了这个问题(感谢语法!):
@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);
}
}
}
答案 2 :(得分:0)
我创建了一个小型开源项目,可以轻松集成hessian和guice。您可以使用基于注释的配置,如下所示: WebService的:
@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/