Изменение встроенного Tomcat с версии 6 на версию 7 приводит к сбою поиска InitialContext

#tomcat #jndi

#tomcat #jndi

Вопрос:

Я использую тестовые примеры JUnit для использования моего веб-сервиса с использованием встроенного Tomcat. Под Tomcat 6 все работало нормально, но когда я переключил свой проект на Tomcat 7, я отклеился.

Тестовый код для настройки встроенного сервера Tomcat выглядит следующим образом:

Tomcat 6

 Embedded container = new Embedded();
container.setCatalinaHome("C:\Program Files\Apache Software Foundation\Tomcat 7.0.11");
container.setRealm(new MemoryRealm());
container.setName("Catalina");
Engine engine = container.createEngine();
container.addEngine(engine);
Host host = container.createHost("localhost", "/DecoderServiceTest");
Context rootContext = container.createContext("/DecoderServiceTest", System.getProperty("user.dir")   "/build/web");
host.addChild(rootContext);
engine.setName("Catalina");
engine.addChild(host);
engine.setDefaultHost("localhost");
container.addEngine(engine);
Connector connector = container.createConnector(InetAddress.getLocalHost(), 4321, false);
container.addConnector(connector);
container.start();
  

Поскольку встроенный API изменился между версиями 6 и 7, я изменил свой собственный код на следующий:

Tomcat 7

 Tomcat tomcat = new Tomcat();
tomcat.setBaseDir("C:\Program Files\Apache Software Foundation\Tomcat 7.0.11");
tomcat.setPort(1234);
tomcat.addWebApp("/DecoderServiceTest", System.getProperty("user.dir") "/build/web");
tomcat.setHostname("localhost");
tomcat.start();
  

Фактический веб-сервис запускается нормально, когда я выполняю тест JUnit (я могу использовать свой веб-браузер и видеть, как обслуживается WSDL).

Однако в конструкторе моего веб-сервиса я инициализирую некоторые переменные на основе значений в web.xml файле (который находится в System.getProperty("user.dir") "/build/web/WEB-INF/web.xml" ) следующим образом:

   Context initCtx = new InitialContext();
  Context envCtx = (Context) initCtx.lookup("java:comp/env");
  int thumbnailSize = (Integer) envCtx.lookup("thumbnail-pixel-size");
  

Где мой web.xml файл содержит следующую запись:

 <env-entry>
  <env-entry-name>thumbnail-pixel-size</env-entry-name>
  <env-entry-type>java.lang.Integer</env-entry-type>
  <env-entry-value>64</env-entry-value>
</env-entry>
  

Когда я пытаюсь создать envCtx объект, я получаю исключение NamingException с сообщением, что Name java:comp is not bound in this Context . Я в замешательстве, потому что он отлично работал с Tomcat 6. Я что-то пропустил в настройке Tomcat 7, которую я ранее определил в настройке Tomcat 6?

Ответ №1:

Отметьте Томаса в <a rel="noreferrer noopener nofollow" href="https:///mail-archives.apache.org/mod_mbox/tomcat-users/201105.mbox/» rel=»noreferrer»>предложенном списке рассылки tomcat-users

 tomcat.enableNaming();
  

перед запуском сервера. У меня это сработало (я предполагаю, что они изменили поведение по умолчанию между 6 и 7).