我正在使用JUnit测试用例来使用嵌入式Tomcat来运行我的Web服务.在Tomcat 6下,一切都运行良好,但是当我将项目切换到Tomcat 7时,我正在崩溃.
设置嵌入式Tomcat服务器的测试代码如下:
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();
Run Code Online (Sandbox Code Playgroud)
由于嵌入式API在版本6和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();
Run Code Online (Sandbox Code Playgroud)
当我执行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");
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
当我尝试创建envCtx对象时,我得到一个带有消息的NamingExceptionName java:comp is not bound in this Context.我很困惑,因为它与Tomcat 6一起工作正常.我在Tomcat 7的设置中错过了一些我之前在Tomcat 6的设置中定义的东西吗?
Mark Thomas通过tomcat-users邮件列表建议
tomcat.enableNaming();
Run Code Online (Sandbox Code Playgroud)
在服务器启动之前.这对我有用(我猜他们改变了6到7之间的默认行为).
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |