English 中文(简体)
我怎样才能使自定义资源也可以通过java:com/env-scheme被Glassfish查找到?
原标题:
  • 时间:2009-03-11 13:51:51
  •  标签:

我在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") 不起作用。这是否可能,如果是:如何处理?

问题回答

如果你在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>

前缀表示使用已定义为正在进行JNDI查找的Java EE实体的资源引用。 您还需要为自定义资源定义此类引用以相同的方式查找它。

前缀对于JDBC查找也不是必需的,因为您可以使用完整的jndi名称。这种方法的问题是,如果您移动资源,使其不再位于本地初始上下文中,则除非更改代码中的查找名称以包括位置信息,否则您将找不到它。使用引用可为您的代码提供屏障,因此仅引用中的映射会更改。

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

我不确定Glassfish的“自定义资源”是什么意思。Java EE规范指出,java:comp/env命名空间是保留用于仅限于特定应用程序的资源查找的。

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

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

glassfish 3 and up uses an admin gui on localhost:4848 use the gui and go to JDNI >Custom Resources>New Resource

对于旧版本的GlassFish,我建议更改glassfish.xml文件以使用规范说明符实例化新资源。





相关问题
热门标签