Проблема создания встроенной конечной точки Jetty в приложении на платформе NetBeans с использованием System.setProperty - PullRequest
2 голосов
/ 27 августа 2011

Я создал приложение на платформе Netbeans, используя Netbeans 7.0.1 и JDK 1.7.

Я реализовал свое собственное веб-приложение на обычном модуле, используя Embedded Jetty 7.4.5 (состоящий из веб-службы и нескольких сервлетов), и создал модуль библиотечного обертки, включающий все jar-файлы Jetty и "jetty- j2sehttpspi-7.4.5.v20110725.jar ", что мне нужно было иметь возможность публиковать конечную точку веб-службы. Веб-модуль зависит от модуля 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, что вызывает конфликт, поскольку мы получаем, что оба веб-сервера (Jetty и JDK) пытаются работать на одном и том же порту (в данном случае это 8081).

Единственный способ решить эту проблему - скопировать все файлы jar Jetty в папку JRE "lib / ext" (копирование только файла "jetty-j2sehttpspi-7.4.5.v20110725.jar" не приводит к ошибкам). , но сервер не запустится). Таким образом, система может найти необходимый класс и все его зависимости.

Я предполагаю, что происходит то, что, даже если NetBeans использует собственный загрузчик пути к классам, метод System.setProperty игнорирует это и пытается получить доступ к стандартному пути к классам, а поскольку приложение платформы NetBeans фактически не позволяет вам изменять Непосредственно по classpath (это превосходило бы цели администрирования модулей платформой NetBeans), я не знаю, как заставить его использовать библиотеку, включенную в модуль оболочки.

Я могу продолжать разработку приложения с помощью временного решения, которое я нашел, но, честно говоря, копирование содержимого в папки JRE не является приемлемым решением и в конечном итоге приведет к проблемам с распространением и установкой на клиентских компьютерах (уже пробовал в Mac OS машина, и я даже не знал, где JRE хранит свои библиотеки, чтобы попытаться сделать тот же самый грязный трюк).

Поэтому я хочу спросить вас, ребята, есть ли какое-либо решение этой конкретной проблемы или у кого-нибудь есть лучшее объяснение того, что происходит и как я мог бы это исправить, без необходимости воссоздавать всю архитектуру моего проекта (что на самом деле работает Хорошо, за исключением этого немного неудобно).

Заранее спасибо!

1 Ответ

0 голосов
/ 04 сентября 2011

Напишите ваш вопрос в списке рассылки dev@platform.netbeans.org, и вы с большей вероятностью получите ответ.

...