2015-03-27 1 views
0

Я пытаюсь запустить причал во встроенном режиме. Похоже, что он игнорирует все классы, включенные в мой военный файл, будь то в WFB-INF/classes или WEB-INF/lib.Встроенные причал, игнорирующие классы, упакованные в мою войну

Мой код запуска:

package rfd; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.util.resource.Resource; 
import org.eclipse.jetty.webapp.WebAppContext; 
import org.eclipse.jetty.xml.XmlConfiguration; 

public class RfdWar 
{ 
    public static void main(String[] args) throws Exception 
    { 
    System.setProperty("org.eclipse.jetty.LEVEL", "DEBUG"); 
    Server server = new Server(8080); 

    org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server); 
    classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration"); 

    Resource jettyEnv = Resource.newSystemResource("jetty-env.xml"); 
    XmlConfiguration conf = new XmlConfiguration(jettyEnv.getInputStream()); 
    Object obj = conf.configure(); 
    WebAppContext context = (WebAppContext)obj; 

    context.setWar("/tmp/thewar.war"); 
    context.setContextPath("/"); 
    context.setParentLoaderPriority(true); 

    server.setHandler(context); 

    server.start(); 
    server.join(); 
    } 
} 

Моя командная строка:

export JETTYHOME=<my_jetty_home> 
JHL=$JETTYHOME/lib 

export CLASSPATH=.:$JHL/jetty-server-9.2.10.v20150310.jar:$JHL/jetty-util-9.2.10.v20150310.jar:$JHL/jetty-http-9.2.10.v20150310.jar:$JHL/servlet-api-3.1.jar:$JHL/jetty-io-9.2.10.v20150310.jar:$JHL/jetty-webapp-9.2.10.v20150310.jar:$JHL/jetty-servlet-9.2.10.v20150310.jar:$JHL/jetty-security-9.2.10.v20150310.jar:$JHL/jetty-xml-9.2.10.v20150310.jar:$JHL/jetty-plus-9.2.10.v20150310.jar:$JHL/jetty-jndi-9.2.10.v20150310.jar:$JHL/jsp/javax.servlet.jsp-2.3.2.jar:$JHL/jsp/javax.servlet.jsp-api-2.3.1.jar 

java rfd.RfdWar 

Сервер делает запуска правильно и определенно читает web.xml упакованного в войне. Но когда я пытаюсь получить доступ к URL-адресу, я получаю сообщение об ошибке, что мой класс, упакованный с войной, отсутствует.

Есть ли что-нибудь еще, что мне нужно сделать, чтобы сказать причал, чтобы почтить классы, упакованные в войну?

ответ

2

Эта команда ...

context.setParentLoaderPriority(true); 

В основном говорит, что, когда веб-приложение пытается загрузить класс, то сервер классам проверяется, а затем путь к классам WebAPP в.

Так что, если у вас будут одинаковые классы в обоих местах, будет использоваться версия сервера, игнорируя ее в webapp.

Установите это значение false, чтобы получить честное поведение спецификации сервлета со всей изоляцией загрузчика класса WebApp.

Кроме того, это неправильно, по-разному.

Resource jettyEnv = Resource.newSystemResource("jetty-env.xml"); 
XmlConfiguration conf = new XmlConfiguration(jettyEnv.getInputStream()); 
Object obj = conf.configure(); 
WebAppContext context = (WebAppContext)obj; 

Правильный способ получить jetty-env.xml для загрузки заключается в использовании установить конфигурацию WebAPP и ClassList, который выполняет эту функцию внутри соответствующего загрузчика классов и нити сферы.

См документации на https://www.eclipse.org/jetty/documentation/current/jndi-embedded.html

И перед ответом на Can't get jetty to read jetty-env.xml

Смежные вопросы