5

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

JDBC 连接是通过调用查找的ic.lookup("java:comp/env/jdbc/mydb")。也可以用 找到ic.lookup("jdbc/mydb"),它有一些缺点,见下面 Robin 的回答。

但是我的自定义资源必须用ic.lookup("service/test"). 线路ic.lookup("java:comp/env/service/test")不工作。有可能吗,如果是的话:怎么做?

4

4 回答 4

3

前缀指示资源引用的使用情况,该资源引用是为从中进行 JNDI 查找的 Java EE 实体定义的。您还必须为您的自定义资源定义这样的引用,以便以相同的方式查找它。

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

这里有一些关于使用的信息

于 2009-03-11T14:26:05.993 回答
3

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

    <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>
于 2011-09-27T11:16:05.137 回答
0

我不确定 Glassfish 的“自定义资源”是什么意思。Java EE 规范说“java:comp/env”命名空间是为资源查找保留的,这些资源查找只绑定到该特定应用程序。所以

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

实际上意味着 jdbc/mydb 是您从中进行查找的应用程序(EJB/servlet 等)的名称绑定。在不使用 java:comp/env 前缀的情况下进行直接查找会将您的应用程序与您正在部署的服务器环境联系起来。

于 2009-03-11T14:27:45.490 回答
0

glassfish 3 及更高版本在 localhost:4848 上使用管理 gui 使用 gui 并转到 JDNI >Custom Resources>New Resource

对于以前版本的 glassfish,我建议更改 glassfish.xml 以使用说明符实例化新资源

于 2017-06-09T19:39:29.597 回答