Java 中 JNDI 的简单字符串值
simple string value by JNDI in Java
如何在 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].
在你的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。
我不知道里面有什么 JndiDataSourceLookup().getDataSource("global/test")
但根据它的名字,它应该 return 一个 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>
参考这个link:http://tomee.apache.org/examples-trunk/injection-of-env-entry/README.html
您的 context.xml
、server.xml
和 web.xml
配置将不起作用。
如何在 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].
在你的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。
我不知道里面有什么 JndiDataSourceLookup().getDataSource("global/test")
但根据它的名字,它应该 return 一个 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>
参考这个link:http://tomee.apache.org/examples-trunk/injection-of-env-entry/README.html
您的 context.xml
、server.xml
和 web.xml
配置将不起作用。