如何将服务器上的 GWT (RPC) 与 Weld/CDI 结合起来?
将 GWT 与 CDI (Seam/Weld) 集成下的问题没有得到解决引起了很大的关注,所以我尝试了第二次。在服务器端,我想使用 Weld/CDI(我现在正在使用 Guice)。在 Guice 中,我有一个 RemoteServiceServlet 的子类,它在一个模块中命名,该模块本身在 GuiceServletContextListener 中激活。是否有人编写了一些类来注册 RemoteServiceServlet,以便 GWT RPC 端点从 Weld 获取实例?
The question under integrating GWT with CDI (Seam/Weld) did'nt get a much of attention, so I try a second time. On the server side I want to use Weld/CDI (I am using Guice right now). In Guice I have a subclass of RemoteServiceServlet which is named in a module which itself is activated in an GuiceServletContextListener. Has anybody wrote some class to register a RemoteServiceServlet so that the GWT RPC endpoint gets the instances from Weld?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用 CDI(作为 EE6 容器的一部分),则可以使用 @WebServlet 注释 GWT RemoteServiceServlet,它们将是 CDI bean。如果配置正确,@Inject 将对它们起作用,甚至 @PersistenceContext 和 @Resource 以及其他东西(EE 服务器不需要任何配置,对于其他 Web 容器,请参阅 Weld 文档,它们需要在 web.xml 中配置一些侦听器) 。我多次使用过这种架构。
您在其他问题中提到的内容(“显然 CDI 不适用于从 javax.servlet.Servlet 派生的类。”)不应该再成立,正如评论者也指出的那样,它已在 1.1 中修复。
我现在看到的唯一问题是,如果我尝试向 @WebServlet 添加拦截器,加载将会失败,因为 GWT RemoteServiceServlet 声明了一些最终方法 (getSerializationPolicy),因此它无法对其进行代理。
If you use CDI (as part of an EE6 container), you can annotate your GWT RemoteServiceServlets with @WebServlet, and they'll be CDI beans. @Inject will work on them, even @PersistenceContext and @Resource and other stuff, if properly configured (EE servers don't need any configuration, for other web containers, see the Weld docs, they need some listeners configured in web.xml). I used this architecture many times.
What you mention in your other question ("Apparently CDI won't work with classes derived from javax.servlet.Servlet.") should not be true any more, as a commenter also pointed out, it's fixed in 1.1.
The only problem I see right now is that if I try to add an interceptor to my @WebServlet, the loading will fail because GWT RemoteServiceServlet declare some final methods (getSerializationPolicy), so it cannot make a proxy of it.