0
votes

I'm using Rational Application Developer 8.5 to develop a custom workflow action plugin for IBM Web Content Manager (WCM) in WebSphere Portal 7.0.

The plugin needs to get a JDBC data source with JNDI, but all my attempts to do so produce this error:

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

A data source named "jdbc/wcmbulletins" is defined in the WebSphere Application Server.

Here's the java code to get the data source:

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

The RAD project contains the following XML files only. There's no "persistence.xml" or any other files I've seen mentioned in similar SO questions.
There are also some JSP files referenced by WCM JSP components. The JSP files have no connection with the plugin and don't use JNDI or 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>

plugin.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>

web.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>

What do I need to make the JNDI lookup work?

2

2 Answers

0
votes

What happens if you change the code to bypass the resource reference and use the name jdbc/wcmbulletins instead?

Also - at what scope is the DS defined? If at cluster level try the name cell/persistent/jdbc/wcmbulletins and see what you get.

Lastly - there is always the WebSphere naming trace. You can enable them via Naming=all, re-run your app, and check trace.log for insight as to what might be going on.

Hope this helps,

ScottH

0
votes

From my experience, wcm plugins are somewhat independent from the web-application they are contained in (they are more related to OSGI or so). For example during server startup plugins are instantiated, before the web-application itself is, so it might not even be possible to reliably lookup resources from the web-app.