如何通过java:com/env方案在glassfish中查找自定义资源?

如何通过java:com/env方案在glassfish中查找自定义资源?,java,jakarta-ee,glassfish,Java,Jakarta Ee,Glassfish,我在GlassFish中创建了一些JDBC资源和自定义资源。我将JDBC资源命名为JDBC/mydb和定制资源service/test JDBC连接通过调用ic.lookup(“java:comp/env/JDBC/mydb”)进行lookedup。它也可以通过ic.lookup(“jdbc/mydb”)找到,它有一些缺点,请参见下面罗宾的答案 但是我的自定义资源必须使用ic.lookup(“服务/测试”)进行查找。行ic.lookup(“java:comp/env/service/test”)

我在GlassFish中创建了一些JDBC资源和自定义资源。我将JDBC资源命名为
JDBC/mydb
和定制资源
service/test

JDBC连接通过调用
ic.lookup(“java:comp/env/JDBC/mydb”)
进行lookedup。它也可以通过
ic.lookup(“jdbc/mydb”)
找到,它有一些缺点,请参见下面罗宾的答案


但是我的自定义资源必须使用
ic.lookup(“服务/测试”)
进行查找。行
ic.lookup(“java:comp/env/service/test”)
不起作用。是否可能,如果是:如何?

前缀表示已为正在进行JNDI查找的Java EE实体定义的资源引用的使用情况。您还必须为自定义资源定义这样的引用,以便以相同的方式进行查找

JDBC查找也不需要前缀,因为您可以使用完整的jndi名称。这种方法的问题是,如果移动资源,使其不再位于本地初始上下文中,那么如果不更改代码中的查找名称以包含位置信息,将无法找到它。使用引用会屏蔽代码,因此只有引用中的映射才会更改


我不知道Glassfish所说的“定制资源”是什么意思。JavaEE规范指出,“Java:comp/env”名称空间是为资源查找保留的,资源查找只针对特定的应用程序绑定。所以

ic.lookup("java:comp/env/jdbc/mydb")

实际上,这意味着jdbc/mydb是用于执行查找的应用程序(EJB/servlet等)的名称绑定。在不使用java:comp/env前缀的情况下执行直接查找会将应用程序绑定到正在部署的服务器环境。

如果您在domain.xml中创建了自定义资源,可能您忘记了将它们作为资源引用添加到domain.xml中的servers/server标记下:

    <resources>
        <!-- JDBC RESOURCE -->
        ...
        <custom-resource res-type="java.lang.String" jndi-name="MyCustomStringResource"
                         factory-class="org.glassfish.resources.custom.factory.PrimitivesAndStringFactory">
            <property name="value" value="hello, this is a string resource"></property>
        </custom-resource>
        ...
    </resources>
    <servers>
        <server name="server" config-ref="server-config">
            <application-ref ref="__admingui" virtual-servers="__asadmin"></application-ref>
            ...
            <resource-ref ref="MyCustomStringResource"></resource-ref>
            ...
        </server>
    </servers>

...
...
...
...

glassfish 3及以上版本在localhost:4848上使用管理gui 使用gui并转到JDNI>自定义资源>新资源


对于以前版本的glassfish,我建议更改glassfish.xml,以使用说明符实例化新资源。但是我需要定义什么,这样我就可以对自定义资源使用'java:com:env/'前缀了?我没有为JDBC做一些特别的事情,所以GlassFish/NetBeans必须为此提供支持。我只在我的web.config中添加了资源,在sun-web.xml中添加了资源引用。不,不是,但是它的使用原则是。配置示例特定于ibm,使用的特定协议可查找资源。不确定这是否与供应商无关,您必须确定如何使用您选择的应用程序服务器。