When I tried to deploy an ejb jar with ejb-jar.xml generated by xdoclet, I
discovered a few bugs:
1)
Error message from weblogic:
ERROR: Error processing 'ejb-jar.xml':
.ejb-jar.enterprise-beans.entity.query.result-type-mapping. must be one of
the values: Remote,Local
the optional result-type-mapping element in generated ejb-jar.xml files
gets its value from the first token in the
@ejb:finder signature tag. The code in ejb-body.j is:
<result-type-mapping><XDoclet:classTagValue tagName
="ejb:finder" paramName="signature" tokenNumber="0" delimiter="
"/></result-type-mapping>
Just like the weblogic error message, the dtd
http://java.sun.com/dtd/ejb-jar_2_0.dtd states at line 1359:
The result-type-mapping element must have one of the following:
<result-type-mapping>Local</result-type-mapping>
<result-type-mapping>Remote</result-type-mapping>
Therefore, I assume that the author of @ejb:finder has misinterpreted the
purpose of the <result-type-mapping> tag, believing it should
contain the return type of the finder method. I think there is a need for a
new parameter to the @ejb:finder tag, which we could call
result-type-mapping or something. The correct line in ejb-body.j would be
something like:
<XDoclet:ifHasClassTag tagName="ejb:finder" paramName
="result-type-mapping">
<result-type-mapping><XDoclet:classTagValue tagName
="ejb:finder" paramName="result-type-mapping" values
="Local,Remote"/></result-type-mapping>
</XDoclet:ifHasClassTag>
Here is the suggested patch:
diff -r1.20 ejb-body.j
272c272,274
< <result-type-mapping><XDoclet:classTagValue tagName
="ejb:finder" paramName="signature" tokenNumber="0" delimiter="
"/></result-type-mapping>
---
> <XDoclet:ifHasClassTag tagName="ejb:finder" paramName
="result-type-mapping">
> <result-type-mapping><XDoclet:classTagValue tagName
="ejb:finder" paramName="result-type-mapping" values
="Local,Remote"/></result-type-mapping>
> </XDoclet:ifHasClassTag>
2)
relationships.j is broken.
Error message from weblogic:
ERROR: Error parsing 'ejb-jar.xml' line 130: The content of element type
"ejb-relationship-role" must match
"(description?,ejb-relationship-role-name?,multiplicity,cascade-delete?,relationship-role-source,cmr-field?)".
The generated segment in my ejb-jar.xml looks like this:
<ejb-relationship-role>
<ejb-relation-name>many-projects-have-one-customer</ejb-relation-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>ProjectEJB</ejb-name>
</relationship-role-source>
<cascade-delete/>
</ejb-relationship-role>
But it should be like this (check 2nd line):
<ejb-relationship-role>
<ejb-relationship-role-name>many-projects-have-one-customer</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>ProjectEJB</ejb-name>
</relationship-role-source>
<cascade-delete/>
</ejb-relationship-role>
Here is a patch:
diff -r1.3 relationships.j
10c10
< <ejb-relation-name><XDoclet:methodTagValue tagName
="ejb:relation" paramName="role-name"/></ejb-relation-name>
---
> <ejb-relationship-role-name><XDoclet:methodTagValue tagName
="ejb:relation" paramName="role-name"/></ejb-relationship-role-name>
34c34
< <ejb-relation-name><XDoclet:methodTagValue tagName
="ejb:relation" paramName="target-role-name"/></ejb-relation-name>
---
> <ejb-relationship-role-name><XDoclet:methodTagValue tagName
="ejb:relation" paramName="target-role-name"/></ejb-relationship-role-name>
53c53
< <ejb-relation-name><XDoclet:methodTagValue tagName
="ejb:relation" paramName="role-name"/></ejb-relation-name>
---
> <ejb-relationship-role-name><XDoclet:methodTagValue tagName
="ejb:relation" paramName="role-name"/></ejb-relationship-role-name>
3)
asm-descriptor.j has incorrectly put <method-intf> after <method-name> all
over the place.
According to the ejb2.0 DTD, <method-intf> should come before <method-name>
Patch:
diff -r1.14 asm-descriptor.j
96d95
< <method-name><XDoclet:classTagValue tagName="ejb:finder" paramName
="signature" tokenNumber="1" delimiter=" ("/></method-name>
97a97
> <method-name><XDoclet:classTagValue tagName="ejb:finder" paramName
="signature" tokenNumber="1" delimiter=" ("/></method-name>
116d115
< <method-name><XDoclet:classTagValue tagName="ejb:finder" paramName
="signature" tokenNumber="1" delimiter=" ("/></method-name>
117a117
> <method-name><XDoclet:classTagValue tagName="ejb:finder" paramName
="signature" tokenNumber="1" delimiter=" ("/></method-name>
144d143
< <method-name>findByPrimaryKey</method-name>
145a145
> <method-name>findByPrimaryKey</method-name>
161d160
< <method-name>findByPrimaryKey</method-name>
162a162
> <method-name>findByPrimaryKey</method-name>
180d179
< <method-name>findByPrimaryKey</method-name>
181a181
> <method-name>findByPrimaryKey</method-name>
235d234
< <method-name><XDoclet:classTagValue tagName="ejb:finder"
paramName="signature" tokenNumber="1" delimiter=" ("/></method-name>
236a236
> <method-name><XDoclet:classTagValue tagName="ejb:finder"
paramName="signature" tokenNumber="1" delimiter=" ("/></method-name>
Cheers,
Aslak.
_______________________________________________
Xdoclet-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel