gpt4 book ai didi

java - 使用 System.setProperty 在 NetBeans 平台应用程序中创建嵌入式 Jetty 端点时出现问题

转载 作者:行者123 更新时间:2023-11-29 09:19:51 26 4
gpt4 key购买 nike

我使用 Netbeans 7.0.1 和 JDK 1.7 创建了一个 Netbeans 平台应用程序。

我使用嵌入式 Jetty 7.4.5(由一个 Web 服务和几个 servlet 组成)在一个普通模块上实现了我自己的 Web 应用程序,并创建了一个包含所有 Jetty jar 文件和“jetty- j2sehttpspi-7.4.5.v20110725.jar”,我需要能够发布 Web 服务的端点。 Web 模块依赖于 Jetty 模块。

我使用的代码是这样的:

System.setProperty("com.sun.net.httpserver.HttpServerProvider",
"org.mortbay.jetty.j2sehttpspi.JettyHttpServerProvider");

server = new Server();
JettyHttpServerProvider.setServer(server);

//We read the config file
String[] configFiles = {"etc/jetty.xml"};
for(String configFile : configFiles) {
XmlConfiguration configuration =
new XmlConfiguration(new File(configFile).toURI().toURL());
configuration.configure(server);
}

// Web Services
QueryWeb qWS = new QueryWeb();
Endpoint.publish("http://0.0.0.0:" +
(server.getConnectors()[0].getPort()) + "/ws", qWS);

// Servlets
HandlerCollection hc = (HandlerCollection)server.getHandler();
ServletContextHandler sch =
new ServletContextHandler(ServletContextHandler.SESSIONS);
sch.setContextPath("/web");
sch.addServlet(stream.class, "/stream");
// We add the servlet handler to the server's context handler collection
// because it's the one used by the Web Service Endpoint
ContextHandlerCollection chc = (ContextHandlerCollection)hc.getHandlers()[0];
chc.addHandler(sch);

server.start();

当我尝试运行应用程序时,在“Endpoint.publish”调用后出现以下错误:

Exiting C:\Program Files (x86)\NetBeans 7.0\harness\run.xml.
Exiting C:\Program Files (x86)\NetBeans 7.0\harness\run.xml.
C:\Program Files (x86)\NetBeans 7.0\harness\suite.xml:500:
The following error occurred while executing this line:
C:\Program Files (x86)\NetBeans 7.0\harness\run.xml:225:
The following error occurred while executing this line:
C:\Program Files (x86)\NetBeans 7.0\harness\run.xml:193:
The application is already running within the test user directory.
You must shut it down before trying to run it again.

据我所知,这是因为系统找不到“org.mortbay.jetty.j2sehttpspi.JettyHttpServerProvider”类。因此它默认返回到 JDK 中包含的 Web 服务器,这会导致冲突,因为我们让两个 Web 服务器(Jetty 和 JDK 的)试图在同一端口(在本例中为 8081)上运行。

我设法解决此问题的唯一方法是将所有 Jetty jar 文件复制到 JRE 的“lib/ext”文件夹中(仅复制“jetty-j2sehttpspi-7.4.5.v20110725.jar”不会导致错误,但服务器不会启动)。通过这种方式,系统可以找到它需要的类及其所有依赖项。

我想即使 NetBeans 使用它自己的类路径加载器,System.setProperty 方法也会忽略它并尝试访问标准类路径,因为 NetBeans 平台应用程序实际上不允许您更改直接类路径(这会破坏由 NetBeans 平台管理模块的全部目的),我真的不知道如何让它使用包装器模块中包含的库。

我可以继续使用我找到的临时解决方案开发应用程序,但老实说,将内容复制到 JRE 文件夹中不是一个可接受的解决方案,最终会导致客户端机器中的分发和安装问题(已经在 Mac OS 中尝试过)机器,我什至不知道 JRE 把它的库放在哪里来尝试做同样的卑鄙把戏)。

因此,我想问问你们是否有解决这个特定问题的方法,或者是否有人可以更好地解释正在发生的事情以及我如何解决它而不必重新创建我的项目的整个架构(这实际上是有效的好的,除了这个有点不方便)。

提前致谢!

最佳答案

将您的问题写到邮件列表 dev@platform.netbeans.org,您更有可能得到答案。

关于java - 使用 System.setProperty 在 NetBeans 平台应用程序中创建嵌入式 Jetty 端点时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com