2016-05-02 29 views
1

我想为通过上下文/ JNDI开发的Web应用程序提供配置。我目前使用捆绑的Glassfish服务器在Netbeans 8.1中开发,尽管我的解决方案应该是容器不可知的。创建自定义JNDI资源

我有用于获取数据库连接的工作设置,但难以理解自定义资源类型。

在web.xml:

<resource-ref> 
    <res-ref-name>SHOWmail/search</res-ref-name> 
    <res-type>com.example.SearchProvider</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

GlassFish中-resources.xml中:

<custom-resource jndi-name="SHOWmail/search" res-type="com.example.SearchProvider" factory-class="com.example.SearchProviderFactory"> 
    <property name="name" value="value"/> 
</custom-resource> 

在代码:

initContext = new InitialContext(); 
    envContext = (Context) initContext.lookup("java:comp/env"); 
    search = (SearchProvider)envContext.lookup("SHOWmail/search"); 

我得到可靠javax.naming.NameNotFoundException: No object bound to name java:SHOWmail/search。我的工厂和班级没有碰触(如果需要,将添加)。

指向我出错的地方非常感谢。

+0

我也试着'<资源-ENV-REF>'代替'<资源引用>',具有相同的结果。 –

回答

0

似乎我误解了netbeans/glassfish组合中的不同JNDI命名空间。

解决方法是看java:app而不是java:comp/env;这搜索WEB-INF/glassfish-resources.xml。

的web.xml

<resource-env-ref> 
    <resource-env-ref-name>SHOWmail/search</resource-env-ref-name> 
    <resource-env-ref-type>com.example.SearchProviderFactory</resource-env-ref-type> 
</resource-env-ref> 

的glassfish-resources.xml中

<custom-resource jndi-name="java:app/SHOWmail/search" res-type="com.example.ElasticSearchProvider" factory-class="com.example.SearchProviderFactory"> 
</custom-resource>