将嵌入式 Tomcat 从 v6 更改为 v7 会导致 InitialContext 查找失败

Posted

技术标签:

【中文标题】将嵌入式 Tomcat 从 v6 更改为 v7 会导致 InitialContext 查找失败【英文标题】:Changing embedded Tomcat from v6 to v7 causes InitialContext lookup to fail 【发布时间】:2011-05-03 07:07:45 【问题描述】:

我正在使用 JUnit 测试用例来使用嵌入式 Tomcat 来运行我的 Web 服务。在 Tomcat 6 下一切正常,但是当我将项目切换到 Tomcat 7 时,我就卡住了。

设置嵌入式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 之间发生了变化,我将自己的代码更改为以下内容:

雄猫 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 测试时,实际的 Web 服务启动良好(我可以使用我的 Web 浏览器并查看正在提供的 WSDL)。

但是,在我的 Web 服务的构造函数中,我根据 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 6 设置中定义的 Tomcat 7 设置中的某些内容?

【问题讨论】:

【参考方案1】:

Mark Thomas 通过 tomcat-users 邮件列表suggested

tomcat.enableNaming();

在服务器启动之前。这对我有用(我猜他们在 6 和 7 之间更改了默认行为)。

【讨论】:

以上是关于将嵌入式 Tomcat 从 v6 更改为 v7 会导致 InitialContext 查找失败的主要内容,如果未能解决你的问题,请参考以下文章

如何将默认端口号更改为 Tomcat 端口号 8080?

如何将默认 80 端口更改为我的域名的 tomcat 8080

如何将Word中的嵌入式图片批量更改为非嵌入式?

tp-link941N路由器,v4v5v6v7有啥区别?

将 IBM MobileFirst 平台服务器从 v7.1 升级到 v8.0 时出错

启动Tomcat 7.0 报 Server Tomcat v7.0 was unable to start within 45 seconds. If the server requires mor