On Nov 28, 2005, at 12:14 AM, Manu George wrote:

Hi,

     In openejb-jar.xml file for a cmp entity bean if the cmp-connection-factory element contains a name tag instead of a resource-link tag the deployer deploys the ejb.
 <cmp-connection-factory>
       <name>DefaultDatasource</name>
    </cmp-connection-factory>

This is correct as per the schema but it gives a null pointer exception on trying to call the EJB.The correct syntax from geronimo wiki is
 <cmp-connection-factory>
        <application>null</application>
        <module>org/apache/geronimo/DefaultDatabase</module>
        <name>DefaultDatasource</name>

    </cmp-connection-factory>

 The schema is as follows

<xsd:element name="cmp-connection-factory" type="gernaming:resource-locatorType"/>

   <xsd:complexType name="resource-locatorType">
        <xsd:sequence>
            <xsd:choice>
                <xsd:group ref="gernaming:objectNameGroup"/>
                <xsd:element name="resource-link" type="xsd:string"/>
                <xsd:element name="target-name" type="xsd:string"/>
                <xsd:element name="url" type="xsd:string"/>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>
   
        <xsd:group name="objectNameGroup">
            <xsd:annotation>
                <xsd:documentation>This group contains the components of a jsr-77 object name</xsd:documentation>
            </xsd:annotation>
            <xsd:sequence>
                <xsd:element name="domain" type="xsd:string" minOccurs="0"/>                 <xsd:element name="server" type="xsd:string" minOccurs="0"/>                 <xsd:element name="application" type="xsd:string" minOccurs="0"/>                 <xsd:element name="module" type="xsd:string" minOccurs="0"/>                 <xsd:element name="type" type="xsd:string" minOccurs="0"/>
                <xsd:element name="name" type="xsd:string"/>
            </xsd:sequence>
    </xsd:group>

Since application an module has minOccurs as 0 only the name attribute is required.

My question is whether the syntax given below is valid? If so there is some problem with the code .On the other hand if the syntax is invalid then the schema needs to be modified.

 <cmp-connection-factory>
       <name>DefaultDatasource</name>
    </cmp-connection-factory>

The format with resource-link does some gbean queries during the deployment process to look for a gbean matching a pattern including the specified name. In order for deployment to work, the gbean has to be available during the deployment process. As a result, it is difficult to make a scenario in which a successfully deployed resource-link won't work at runtime.

However, the format with the name components (name, module, application) assumes you know what you are doing and simply constructs the target gbean name according to your instructions. Name parts you leave out match the current context. There is no attempt whatsoever to verify that any such gbean exists at deployment time. This is mostly useful if you are trying to set up circular references between 2 modules, but might be useful at other times.

Now it is certainly possible to specify a (different) application, the same module name, and the name. This would be an unusual situation but certainly possible. It is also conceivable that you could deploy a gbean to act as the datasource in the ejb jar itself, in which case supplying only the name component would be correct. However I think these are sufficiently unlikely so that I would not object to making the <module> element mandatory in this format. Any other opinions?

thanks
david jencks

Reply via email to