JNDI in Java中的简单字符串值

问题描述 投票:0回答:2

如何在tomcat的配置中设置简单的字符串值,然后在java应用程序中读取?

context.xml

<ResourceLink name="global/test" global="testing" type="java.lang.String" />

server.xml

<Enviroment name="testing" value="myUser" type="java.lang.String"/>

应用程序中的web.xml

<resource-env-ref>
    <resource-env-ref-name>global/test</resource-env-ref-name>
    <resource-env-ref-type>java.lang.String</resource-env-ref-type>
</resource-env-ref>

在我的Java应用程序中

public String getValue(){
    return new JndiDataSourceLookup().getDataSource("global/test").toString();
}

当我运行tomcat时,我看到这些错误...

org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'global/test'; nested exception is javax.naming.NameNotFoundException: Name [global/test] is not bound in this Context. Unable to find [global].
javax.naming.NameNotFoundException: Name [global/test] is not bound in this Context. Unable to find [global].
java string jndi
2个回答
4
投票

在您的web.xml中使用,

<env-entry>
<description>Sample env entry</description>
<env-entry-name>isConnected</env-entry-name>
<env-entry-type>java.lang.Boolean</env-entry-type><!--order matters -->
<env-entry-value>true</env-entry-value>
</env-entry>

使用代码,

try {
 Context initCxt =  new InitialContext();
 Boolean isConn =  (Boolean)initCxt.lookup("java:comp/env/isConnected");
 System.out.println(isConn.toString());
 // one could use relative names into the sub-context
 Context envContext = (Context) initCxt.lookup("java:comp/env");
 Boolean isConn2 = (Boolean)envContext.lookup("isConnected");
 System.out.println(isConn2.toString());
} catch (NamingException e) {
 e.printStackTrace();
}

[这里查看Naming service tutorial以更好地了解InitialContext和JNDI。


1
投票

我不知道JndiDataSourceLookup().getDataSource("global/test")里面有什么,但按它的名字,它应该返回DataSoruce而不是字符串。

如果您的查找是本地的,只需执行

Context ctx = new InitialContext();
String s = (String) ctx.lookup("global/test");

或者如果您在javaee容器中,

@Resource(name="global/test")
String testString;

最后是您的ejb-jar.xml

<env-entry>
    <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>
    <env-entry-name>global/test</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>StringValue</env-entry-value>
</env-entry>

引用此链接:http://tomee.apache.org/examples-trunk/injection-of-env-entry/README.html

您的context.xmlserver.xmlweb.xml的配置将不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.