2013-09-12 3 views
0

Вот сценарий,Причал ServletContainerInitialization (ТСМ) не вызывает инициализатор расположенный внутри веб-фрагмент

  • WebApp содержит web.xml
  • один из банок содержат ServletContainerInitializer

    META-INF/services/javax.servlet.ServletContainterInitializer

Мы программически начинаем причал, используя XMLConfiguration, которая настроена с помощью объекта сервера.

XmlConfiguration configuration = new XmlConfiguration(in); 

    if (type.isInstance(server)) 
    { 
     configuration.configure(server); 

     return; 
    } 

    boolean success = false; 

    for (Handler handler : ((Server) server).getHandlers()) 
    { 
     if (type.isInstance(handler)) 
     { 
      configuration.configure(handler); 

      success = true; 
     } 
    } 

вот XML-файл, который используется.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Configure class="org.eclipse.jetty.server.Server" id="Server"> 
<Set name="ThreadPool"> 
    <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> 
     <Set name="minThreads">2</Set> 
     <Set name="maxThreads">10</Set> 
     <Set name="detailedDump">false</Set> 
    </New> 
</Set> 
<Call name="addConnector"> 
    <Arg> 
     <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> 
      <Set name="port">8080</Set> 
      <Set name="maxIdleTime">30000</Set> 
      <Set name="Acceptors">2</Set> 
      <Set name="statsOn">false</Set> 
     </New> 
    </Arg> 
</Call> 
<Set name="handler"> 
    <New class="org.eclipse.jetty.webapp.WebAppContext"> 
     <Arg type="String">src/main/webapp</Arg> 
     <Arg type="String">/</Arg> 
     <Set name="extraClasspath">S:/git/projects/p1/target/classes;   
     S:/maven.repo/org/apache/ahc/1.1.2/ahc-1.1.2.jar; 
     S:/maven.repo/com/sun/xml/bind/jaxb-xjc/2.2.3.20110115/jaxb-xjc-2.2.3.20110115.jar; 
     S:/maven.repo/com/springsource/org/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar; 
     S:/maven.repo/com/springsource/org/jdom/1.0.0/jdom-1.0.0.jar; 
     S:/maven.repo/org/apache/mina/1.1.9/mina-1.1.9.jar; 
     S:/maven.repo/com/springsource/com/mysql/jdbc/5.1.6/jdbc-5.1.6.jar; 
     </Set> 
    </New> 
</Set> 
<Set name="stopAtShutdown">true</Set> 
<Set name="sendServerVersion">true</Set> 
<Set name="sendDateHeader">true</Set> 
<Set name="gracefulShutdown">1000</Set> 
<Set name="dumpAfterStart">false</Set> 
<Set name="dumpBeforeStop">false</Set> 
</Configure> 

При вызове из CLI, молы DeploymentManager сканирует и путь к классам вызывает ServletContainerInitializer при условии внутри баночки файлов. Что эквивалентно тому, что должно быть представлено в файле конфигурации XML?

Когда код развертывается как война в причале, все работает так, как ожидалось. Итак, это подтверждает, что все правильно.

ответ

2

Nambi,

Вот ссылка на страницу документации молы, которые обсуждаются с помощью аннотаций в интегрированном режиме: http://www.eclipse.org/jetty/documentation/current/using-annotations-embedded.html

Вам просто нужно сделать эквивалент кода Java в XML - который всегда в причалу очень просто. Если вам нужны подсказки, посмотрите на свой дистрибутив и посмотрите, что делает файл etc/jetty-annotations.xml.

Кроме того, если у вас есть аннотации внутри банок, которые находятся на extraClasspath, то вам нужно использовать 9.0.6-фотоснимок из причала, как я только реализовать эту функцию :)

Jan

+0

Единственная разница - это XML vs Java. В конечном итоге оба устанавливают «org.eclipse.jetty.webapp.WebAppContext» в качестве обработчика. Мой вопрос: почему «WebAppContent» не запускает SCI (ServletContainerInitializer) во время запуска? Какие дополнительные обработчики/компоненты, которые необходимо настроить, чтобы причал мог запускать SCI во время запуска контейнера? – Nambi