我使用Netbeans 7.0.1和JDK 1.7创建了一个Netbeans平台应用程序。
我使用Embedded 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平台应用程序实际上并不允许您更改classpath直接(这将超过NetBeans平台管理模块的整个目的),我真的不知道如何使用包装模块中包含的库。
我可以使用我找到的临时解决方案继续开发应用程序,但老实说,将内容复制到JRE文件夹中是不可接受的解决方案,最终会导致客户端计算机中的分发和安装问题(已在Mac OS中尝试过)机器,我甚至不知道JRE在哪里保留它的库来尝试做同样的肮脏伎俩。)
因此,我想问你们这些特定问题是否有任何解决方案,或者是否有人能够更好地解释发生了什么以及如何解决这个问题,而无需重新创建项目的整个架构(实际上有效)好的,除了这个有点不方便)。
提前致谢!
答案 0 :(得分:0)
将您的问题写入邮件列表dev@platform.netbeans.org,您更有可能得到答案。