openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Curtis (JIRA)" <>
Subject [jira] Commented: (OPENJPA-1804) NPE in line 1514
Date Tue, 21 Sep 2010 14:46:34 GMT


Rick Curtis commented on OPENJPA-1804:

> ... or disable it all together?" 
That gets my vote. This enhancement business has been a thorn in OpenJPA's side for as long
as I've been working with the project. It would be great if subclassing worked properly and
performed as well as the other method, but unfortunately it doesn't. Allowing a user to enable
subclassing may get them past an immediate enhancement issue, but it's a matter of time before
another is hit. 

One big stumbling block is that it is very difficult to remove a feature that exists in a
release that is out in the wild. One can hypothesize that removing this support *could* cause
a migration nightmare for someone that has relied on this support(however unlikely that may
be). I don't think this JIRA is the place for this discussion though... 

> Have I added enough comments to this issue yet? I think I'm going for a personal record.

I don't think we're through with this issue yet... :) As Donald said, we need to get the dynamic
enhancer working on OSX... perhaps you would be able to donate a few mac cycles to help us
with that?  (I'm running ubuntu/windows.)

> NPE in line 1514
> ---------------------------------
>                 Key: OPENJPA-1804
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: Enhance, UnenhancedClasses, usability
>    Affects Versions: 2.0.1
>            Reporter: Willis Blackburn
>            Assignee: Donald Woods
>             Fix For: 2.1.0
> I am encountering a NPE at line 1514.  I'm sorry I don't have time to
prepare a test case right now.  I'm not even 100% sure what is causing the problem, but it
seems to be something like this:
> I have classes Organization, Group, User, and AddressBook.
> Group has a reference (many-to-one) to Organization.
> I'm using field-level access and the Java 6 runtime enhancer.  (NOT the build-time enhancer
or the agent.)
> In ManagedClassSubclasser.prepareUnenhancedClasses, the code receives a list of Class
objects--the ones in persistence.xml.  They are not in the same order as they are in persistence.xml,
but I don't know if that's important.  The first one is Group.  During the processing of Group,
the code invokes ClassMapping.setTable to set the table name, which is "group_table."  This
comes from the @Table annotation of Group.  So far, so good.  Then the code does some additional
processing on the relationship mappings of Group, which include the reference to Organization.
 During the processing of that relationship, the code calls MappingInfo.mergeJoinColumn. 
On line 1367, the method calls rel.getTable.  The "rel" variable points to the ClassMapping
for Organization.  Remember that prepareUnenhancedClasses hasn't gotten to Organization yet--it's
still working on Group--and so I assume that this Organization mapping was created on-demand.
 However, rel.getTable returns null.  The Organization class has a @Table attribute, and I
can see that the table name has been loaded in the ClassMappingInfo instance attached to the
ClassMapping for Organization, however the table name has not yet been copied from ClassMappingInfo
to ClassMapping.  Later, the mergeJoinColumn method attempts to dereference the null table
name and generates the NPE.
> Bottom line:  When using the Java 6, runtime enhancer, if class A has a reference to
class B, and both classes have @Table annotations (at least), and class A is processed first,
then it produces a NPE.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message