有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用WebSocket在JavaFX和Jetty中注入java依赖项

我正在开发一个JavaFX应用程序,它启动一个嵌入式Jetty服务器来监听网络请求。我有一个用例,需要响应正常的HTTP请求和WebSocket。由于stage由这些请求控制,因此我有一个manager类从基本应用程序类接管stage的控制。为了进行说明,下面是应用程序类:

public class ServerApplication extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
    Log.InitLogger("subject server", Level.ALL);
    DBServer.StartServer();
    final LoginManager manager = new LoginManager(primaryStage);
    final ResourceConfig rc = new ResourceConfig().register(
            new AbstractBinder() {
                @Override
                protected void configure() {
                    bind(manager).to(SService.class);
                    bind(manager).to(DCS.class);
                }
            });
    Server server = new Server(rc);
    server.start();

    manager.showLoginScreen();
}
}

以下是服务器类的构造函数:

   public Server(final ResourceConfig rc) throws ServletException,  DeploymentException, IOException {

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");

    jettyServer = new Server(65534  );
    jettyServer.setHandler(context);
    ServerConnector connector = new ServerConnector(jettyServer);
    ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext(context);
    serverContainer.addEndpoint(Socket.class);

    jettyServer.addConnector(connector);

    final ServletHolder jerseyServlet;
    if(rc == null) {
        jerseyServlet = context.addServlet(ServletContainer.class, "/*");
        jerseyServlet.setInitParameter("jersey.config.server.provider.packages", SUBJECT_REST_PACKAGES);
    }
    else {
        rc.packages(REST_PACKAGES);
        jerseyServlet = new ServletHolder(new ServletContainer(rc));
        context.addServlet(jerseyServlet, "/*");
    }

    jerseyServlet.setInitOrder(0);

    // Tells the Jersey Servlet which REST service/class to load.


    jmDNS = JmDNS.create(InetAddress.getLocalHost());
    serviceInfo = ServiceInfo.create("_http._tcp.local.", "Service", 65534, "Ready");

}

对于我的REST_包中定义的类,HK2可以成功地工作并解析绑定。然而,我遇到了websocket类和依赖注入的问题。我发现了这篇文章:EnityManager Injection via HK2 in WebSockets,它几乎可以工作,但是当WebSocket被实例化时,我得到一个错误int,HK2无法解析DCSService类,这是socket所需要的。所以我的问题是,是否有一种方法可以将所有这些技术,JavaFX、Websockets、Jetty和HK2组合在一起工作?我知道可能有其他的方法来实现这一点,但像事件和酒吧/酒吧模型这样的东西似乎并不适合。这似乎是一个极端的情况

根据请求进行更新,以下是配置程序的代码:

公共类MyConfigurator扩展配置程序{ 专用ServiceLocator ServiceLocator

public MyConfigurator() {
    serviceLocator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
    ServiceLocatorUtilities.enableImmediateScope(serviceLocator);
    ServiceLocatorUtilities.bind(serviceLocator, new AbstractBinder() {

        @Override
        protected void configure() {
            bind(MySocket.class).to(MySocket.class);
            bind(LManager.class).to(DCService.class);

        }
    });
}

@Override
public <T> T getEndpointInstance(Class<T> endpointClass) {
    return serviceLocator.getService(endpointClass);
}
}

共 (0) 个答案