0

我正在使用 Rational Application Developer 8.5 为 WebSphere Portal 7.0 中的 IBM Web Content Manager (WCM) 开发自定义工作流操作插件。

该插件需要使用 JNDI 获取 JDBC 数据源,但我所做的所有尝试都会产生此错误:

javax.naming.NameNotFoundException: Name comp/env/jdbc not found in context "java:".

在 WebSphere Application Server 中定义了一个名为“jdbc/wcmbulletins”的数据源。

这是获取数据源的java代码:

javax.naming.InitialContext ctx=new javax.naming.InitialContext();
javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup("java:comp/env/jdbc/wcmbulletins");

RAD 项目仅包含以下 XML 文件。没有“persistence.xml”或我在类似的 SO 问题中看到的任何其他文件。
还有一些被 WCM JSP 组件引用的 JSP 文件。JSP 文件与插件无关,不使用 JNDI 或 JDBC。

ibm-web-bnd.xml:

<web-bnd
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
version="1.0">
    <virtual-host name="default_host"/>
    <resource-ref name="jdbc/wcmbulletins" binding-name="jdbc/wcmbulletins"/>
</web-bnd>

ibm-web-ext.xml:

<web-ext
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
version="1.0">
    <jsp-attribute name="reloadEnabled" value="false"/>
    <jsp-attribute name="reloadInterval" value="10"/>
    <reload-interval value="3"/>
    <enable-directory-browsing value="false"/>
    <enable-file-serving value="true"/>
    <enable-reloading value="true"/>
    <enable-serving-servlets-by-class-name value="true"/>
</web-ext>

插件.xml:

<plugin id="com.company.wcm.CompanyWCMPlugins"
    name="Company WCM Plugins"
    version="1.0.0"
    provider-name="Company Name Australia">

    <extension
        point="com.ibm.workplace.wcm.api.CustomWorkflowActionFactory"
        id="CompanyWorkflowActionFactory">
        <provider class="com.company.wcm.workflow.CompanyWorkflowActionFactory"/>
    </extension>
</plugin>

网页.xml:

<web-app id="WebApp_ID" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>CompanyWCM_JSPs</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <resource-ref id="ResourceRef_1377568155870">
        <description/>
        <res-ref-name>jdbc/wcmbulletins</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
</web-app>

我需要什么才能使 JNDI 查找工作?

4

2 回答 2

0

根据我的经验,wcm 插件在某种程度上独立于它们所包含的 Web 应用程序(它们与 OSGI 或更多相关)。例如,在服务器启动期间,插件在 Web 应用程序本身之前被实例化,因此甚至可能无法可靠地从 Web 应用程序中查找资源。

于 2013-10-18T07:58:58.480 回答
0

如果您更改代码以绕过资源引用并改用名称,会发生什么情况jdbc/wcmbulletins

另外 - DS 定义在什么范围内?如果在集群级别尝试名称cell/persistent/jdbc/wcmbulletins,看看你得到什么。

最后——总是有 WebSphere命名跟踪。您可以通过 启用它们Naming=all,重新运行您的应用程序,并检查 trace.log 以了解可能发生的情况。

希望这可以帮助,

斯科特

于 2013-08-27T10:31:35.143 回答