我使用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"之后得到以下错误。发表"叫:
Exiting C:Program Files (x86)NetBeans 7.0harnessrun.xml.
Exiting C:Program Files (x86)NetBeans 7.0harnessrun.xml.
C:Program Files (x86)NetBeans 7.0harnesssuite.xml:500:
The following error occurred while executing this line:
C:Program Files (x86)NetBeans 7.0harnessrun.xml:225:
The following error occurred while executing this line:
C:Program Files (x86)NetBeans 7.0harnessrun.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,这样你更有可能得到答案。