Tôi đang cố gắng @Inject dịch vụ Guice vào @ServerEndpoint. Tôi đang sử dụng Tomcat 8.0.15 khi triển khai JSR-356. Tuy nhiên, tiêm phụ thuộc không hoạt động. Có bất kỳ cấu hình bổ sung nào cần được thực hiện để cho phép phun Guice không? Lưu ý rằng tôi đang sử dụng tất cả các chú thích javax tiêu chuẩn.Tomcat8 WebSockets (JSR-356) với Guice 3.0
Trả lời
Tôi đã tìm ra điều này. Điểm cuối Websocket cần phải có một trình cấu hình tùy chỉnh, tạo ra và trả về các cá thể bằng cách sử dụng cá thể bộ phun Guice.
Ví dụ:
Tuỳ chỉnh Guice bối cảnh servlet nghe:
public class CustomServletContextListener extends GuiceServletContextListener {
public static Injector injector;
@Override
protected Injector getInjector() {
injector = Guice.createInjector(...);
return injector;
}
}
Websockets tùy chỉnh cấu hình:
public class CustomConfigurator extends Configurator {
@Override
public <T> T getEndpointInstance(Class<T> clazz)
throws InstantiationException {
return CustomServletContextListener.injector.getInstance(clazz);
}
}
Và sau đó trong thiết bị đầu cuối WebSocket:
@ServerEndpoint(value = "/ws/sample_endpoint", configurator = CustomConfigurator.class)
public class SampleEndpoint {
private final SomeService service;
@Inject
public SampleEndpoint(SomeService service) {
this.service = service;
}
...
}
Building theo câu trả lời của Aritra:
Thành thật mà nói, tôi không biết chắc chắn nếu điều này làm việc với Guice 3.0, nhưng nó hoạt động với 4.0, đó là bản phát hành ổn định hiện tại.
Tôi nghĩ rằng một cách tiếp cận hơi sạch hơn là thay đổi CustomConfigurator của bạn vào một cái gì đó như thế này:
public class CustomConfigurator extends Configurator {
@Inject
private static Injector injector;
public <T> T getEndpointInstance(Class<T> endpointClass) {
return injector.getInstance(endpointClass);
}
}
Và sau đó từ mở rộng ServletModule
lớp học của bạn configureServlets
phương pháp, gọi requestStaticInjection(CustomConfigurator.class)
Bằng cách đó bạn sẽ không phơi nhiễm vòi phun cho mọi người. Tôi không biết về bạn, nhưng nó mang lại cho tôi một cảm giác tốt đẹp và mờ bên trong để biết rằng không ai có thể gây rối với vòi phun của tôi :-).
- 1. Guice 3.0 + Tomcat 7.0 = rò rỉ bộ nhớ ClassLoader
- 2. nhớ Tomcat8 rò rỉ
- 3. Tiêm generics với Guice
- 4. Dịch vụ tomcat8 không thể khởi động bằng cách sử dụng dịch vụ tomcat8 bắt đầu
- 5. Express.js với websockets
- 6. Làm quen với Google Guice
- 7. Các WebSockets JavaScript với UDP?
- 8. WebWorkers và WebSockets với Firefox
- 9. Quản lý lâu dài với Google Guice
- 10. Tiêm phụ thuộc vào ServletContextListener với Guice
- 11. tham số Pass tới constructor với Guice
- 12. Ví dụ đơn giản với Guice Servlets
- 13. Numpy với python 3.0
- 14. Thông báo PostgreSQL và WebSockets với Rails
- 15. Yêu cầu đồng bộ với Websockets
- 16. Node http proxy với proxytable và websockets
- 17. Firefox WebSockets
- 18. Google Guice Properties Management
- 19. Overriding Binding in Guice
- 20. tiêm tên Guice singleton
- 21. Guice ThrowingProvider vấn đề
- 22. Guice: Tránh tiêm lười
- 23. Websockets in Flask
- 24. go websockets eof
- 25. Websockets nhanh hơn WebRTC?
- 26. Halogen và websockets PureScript
- 27. Hỗ trợ JBoss Websockets?
- 28. Overhead of Idle WebSockets
- 29. Apache proxyPassReverse và Websockets
- 30. nginx và proxy WebSockets
"tiêm phụ thuộc không hoạt động" ... bạn có thể mô tả chi tiết hơn không? –
Tôi nhận được một ngoại lệ instantiation khi tôi cố gắng để làm một constructor injection bằng cách sử dụng @Inject bên trong SeverEndpoint. – Aritra