1

我有一个在 tomcat 上运行的 web 服务(并且正在工作)。我想将端点 URL 提取到战争之外的文件中,以便可以更改它而无需重新部署战争。我在 Windows XP 上使用独立的 Tomcat 6 在本地运行。

我的想法是将它放在上下文中,作为上下文参数或作为环境变量。

我不确定哪个更好,而且由于我无法识别上下文,我不知道哪个会起作用。所以我的第一个问题是,我应该使用以下哪些条目(如果有的话)?

<Context path="/myapp" docBase="myapp">

<Environment name="webserviceURI" type="java.lang.String" override="true" value="endpointURLredacted"/>

<context-parameter>
<name>uri</name>
<value>endpointURLredacted</value>
</context-parameter>

</Context>

假设 Environment 行是正确的,我要检索的代码是:

InitialContext ic = new InitialContext();
endpoint = (String)ic.lookup("webserviceURI");

然而....

我已经尝试将它添加到一个 context.xml 文件到 META-INF 文件夹中,我的印象是,当我部署战争时,在这里引用另一个问题的答案,“当你部署 WAR 时,上下文片段(META-INF/context.xml)被复制到 conf/Catalina/[host] 目录。” 好吧,这不会发生。我真的不想那样做,因为我希望上下文完全独立于战争而存在,但这是一个测试,看看我是否能走得那么远。失败。

所以我尝试手动将上下文 xml(重命名为 myapp.xml)添加到该文件夹​​(必须先创建它),但我仍然认为该文件没有被读取。

当我运行应用程序时,我收到类似“javax.naming.NameNotFoundException: Name webserviceURI is not bound in this Context”的错误。

我尝试打印出初始上下文的环境:

Context:     {java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory,java.naming.factory.url.pkgs=org.apache.naming}

所以我不认为上下文文件被读取,无论我把它放在哪里。

如果这很重要,这不是一个 servlet(也许它应该是?)。

4

1 回答 1

2

我从上下文中删除了 docBase 属性,使用了 Environment 标签,并使用 java:comp/env/webserviceURI 检索了值,瞧!成功。

也许这会帮助别人!

于 2010-01-26T01:32:32.827 回答