You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Willis Blackburn (JIRA)" <ji...@apache.org> on 2010/09/18 21:54:33 UTC
[jira] Created: (OPENJPA-1804) NPE in MappingInfo.java line 1514
NPE in MappingInfo.java line 1514
---------------------------------
Key: OPENJPA-1804
URL: https://issues.apache.org/jira/browse/OPENJPA-1804
Project: OpenJPA
Issue Type: Bug
Affects Versions: 2.0.1
Reporter: Willis Blackburn
I am encountering a NPE at MappingInfo.java 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.
[jira] Updated: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Donald Woods updated OPENJPA-1804:
----------------------------------
Component/s: Enhance
Can you post your persistence.xml or a least the <class> or <jar-file> list from it?
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Updated: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Donald Woods updated OPENJPA-1804:
----------------------------------
Assignee: Donald Woods
Fix Version/s: 2.1.0
Subclassing log msg changed to WARN in r999425.
Still need to look at adding more info for the original NPE and try to get the dynamic enhancer working on MacOSX.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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 MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912557#action_12912557 ]
Donald Woods commented on OPENJPA-1804:
---------------------------------------
Willis, when you say "Java 6 runtime enhancer", do you mean the Attach API loaded enhancer or that you manually enabled the subclassing enhancer?
The Attach API loaded enhancer is identical to using the Javaagent approach, which both have the limitation that when a <class> list is used, then all entities (including @Embeddable and @MappedSuperclass) must be listed. Using the Javaagent or Attach API (aka. enhance when the JVM loads a class) are supported in production.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Updated: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Rick Curtis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rick Curtis updated OPENJPA-1804:
---------------------------------
Component/s: UnenhancedClasses
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance, UnenhancedClasses, usability
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912984#action_12912984 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
Rick, you asked, "Perhaps we need to have a stronger warning message when this feature is enabled? ... or disable it all together?"
I saw on the roadmap that OpenJPA 2.1 will require Java 6. I think that if OpenJPA is not going to support Java 6, then there is no need to support working with unenhanced classes. The strategy of using the attach API to install the agent will work for casual users, and the others can pass the agent on the command line, use the J2EE container hooks, or use the build-time enhancer. The behavior of OpenJPA when using unenhanced classes is different from its behavior when using enhanced classes (no lazy loading, changes only detected at flush), so anything that users actually develop in that mode is not going to be production-ready. At some point developers will have to figure out how to get the agent or the build-time enhancer working and test their code under that configuration. Given how easy it is to use the attach API enhancer under Java 6, there's not a strong case for having a less-functional alternative.
Have I added enough comments to this issue yet? I think I'm going for a personal record.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance, UnenhancedClasses, usability
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912924#action_12912924 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
I think that I just made things more confusing!
Referring to the documentation, I believe that I am using the strategy in section 2.4, "Enhancing Dynamically at Runtime." However as I mentioned, I did have to set openjpa.RuntimeUnenhancedClasses=supported, which is only covered in section 2.5, "Omitting the JPA Enhancer." So maybe I'm not using the enhancer? By the way I'm using the Java 6 that Apple supplies with OS X, if that matters.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance, UnenhancedClasses, usability
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Rick Curtis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912563#action_12912563 ]
Rick Curtis commented on OPENJPA-1804:
--------------------------------------
Willis -
> It would have been helpful if OpenJPA had reported why it was looking for metadata for Object. Like "No metadata was found for type 'class java.lang.Object' referenced from Organization.hostNames." Also, it might be worth handling missing metadata for Object specially; it's more likely that OpenJPA has encountered a raw collection type than that the developer really wants Object to be persistent but has neglected to provide the metadata.
Just to be clear, this problem only happens when openjpa.RuntimeUnenhancedClasses=supported is set?
> About the runtime enhancer, why even have it if it's half-baked?
Great question. This feature was added, turned on as the default, but never fully completed. I think the intent was that if enough people were testing it(a la enabled by default), we'd get all of the problems fixed and it would be nice for out of the box usage. Unfortunately this hasn't been high enough priority for anyone to really tackle.... In the 2.0.x release we disabled this feature by default because of the numerous issues we've uncovered.
Perhaps we need to have a stronger warning message when this feature is enabled? ... or disable it all together?
Thanks,
Rick
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912811#action_12912811 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
Donald,
Maybe I'm not using the right terminology. I understand that I can use OpenJPA in one of four ways. First, I can run the class enhancer during the build process. Second, I can define a Java agent when I run the JVM that will enhance the classes as they're loaded. Third, if I'm using Java 6, OpenJPA will install a classloader hook of some kind that will also enhance the classes as they're loaded. And fourth, if I'm running Java 5, OpenJPA will dynamically build persistent subclasses of my entity classes. In all cases we ultimately get classes that extend PersistenceCapable, but in the first three strategies, the PersistenceCapable classes are the application's own classes, while in the last case, they're subclasses of the application's classes. I understand that the fourth method (dynamically-generated subclasses) has certain drawbacks, some by necessity (it not being possible to intercept field set operations for example), and some because it is still experimental. I believe that I'm using the third method, Java 6 with the classloader hook.
That said, I did have to set openjpa.runtimeUnenhancedClasses=supported in order to get the program to run at all. Am I in fact using the Java 5 dynamic subclassing strategy?
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance, UnenhancedClasses, usability
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912556#action_12912556 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
Rick,
I just saw the error about there not being any metadata for java.lang.Object. But I knew what was causing the problem because I was pursuing a strategy of starting off with running the enhancer on a single class with a single annotation (@Entity) and then gradually adding annotations and classes until it stopped working. It gave me that message after I re-added the Set<HostName>, so I figured that it was unable to figure out what type was in the Set. I subsequently discovered the issue with Scala, which I entered here:
http://lampsvn.epfl.ch/trac/scala/ticket/3857
It would have been helpful if OpenJPA had reported why it was looking for metadata for Object. Like "No metadata was found for type 'class java.lang.Object' referenced from Organization.hostNames." Also, it might be worth handling missing metadata for Object specially; it's more likely that OpenJPA has encountered a raw collection type than that the developer really wants Object to be persistent but has neglected to provide the metadata.
About the runtime enhancer, why even have it if it's half-baked? It would be better to simply remove it and make the code base that much simpler. If it's there, then people will use it, and if it doesn't work, then they'll wind up with a bad impression of OpenJPA that may not be warranted.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Updated: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Willis Blackburn updated OPENJPA-1804:
--------------------------------------
Attachment: openjpatest.tar.gz
Here's the NPE test case!
Took a while to reproduce it. It only showed up when I added the @Column annotations to the primary key field and the many-to-one fields.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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
>
> Attachments: openjpatest.tar.gz
>
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912936#action_12912936 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
When I don't have RuntimeEnhancedClasses set, I get:
Internal error: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: (all my classes)
When I set RuntimeEnhancedClasses=supported, the app works (now that I've gotten rid of all the mapping problems). However I do NOT see the info message "OpenJPA dynamically loaded the class enhancer" mentioned in the documentation. I'm logging at the debug level.
But there is this message: "Creating subclass for '[class com.signetworks.signs.model.security.Group, class com.signetworks.signs.model.addressbook.AddressBook, class com.signetworks.signs.model.addressbook.PhoneNumber, class com.signetworks.signs.model.addressbook.SnailAddress, class com.signetworks.signs.model.security.User, class com.signetworks.signs.model.addressbook.EmailAddress, class com.signetworks.signs.model.entities.HostName, class com.signetworks.signs.model.security.Organization]'. This means that your application will be less efficient and will consume more memory than it would if you ran the OpenJPA enhancer. Additionally, lazy loading will not be available for one-to-one and many-to-one persistent attributes in types using field access; they will be loaded eagerly instead."
Oops!
I traced through the InstrumentationFactory class. Looks like the Java 6 attach API enhancer is not being loaded because my application is not being loaded by the system class loader. One for the documentation!
Also, I think that even if the system class loader check had passed, the agent installation would have failed because the OS X JVM doesn't have a tools.jar. Instead the attach API classes are in "classes.jar."
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance, UnenhancedClasses, usability
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Rick Curtis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912499#action_12912499 ]
Rick Curtis commented on OPENJPA-1804:
--------------------------------------
Willis -
When you ran with the standalone enhancer was the error/exception that you encountered? Was it helpful to figure out what was wrong?
Just to warn you, I'd highly recommend staying away from the runtime enhancer... you'll find numerous documented(and undocumented) issues. I'd say the support is half baked at best.
Thanks,
Rick
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912482#action_12912482 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
The <class> section looks like:
com.signetworks.signs.model.addressbook.AddressBook
com.signetworks.signs.model.security.Group
com.signetworks.signs.model.security.Organization
com.signetworks.signs.model.security.User
I've discovered some more information that is relevant. The Organization object contains a Set<HostName>. HostName is an Embeddable. However:
1. HostName is obviously not in the list of persistent classes.
2. When I looked in the class file for Organization, I discovered that the set of host names did not have any generic type information. In other words it was Set<?> instead of Set<HostName>. That's why OpenJPA complains (above) about "No metadata was found for type 'class java.lang.Object.'" (The reason that the generic type information is missing is that this project is in Scala, and the Set<HostName> is defined in a Scala trait that the Organization class inherits, and apparently Scala discards generic type information when compiling classes that inherit members from traits.)
I discovered these two issues by running the standalone enhancer on my classfiles. The standalone enhancer doesn't produce NullPointerException, at least not in my tests, but does complain about Object not being a persistent classes. Once I fixed the two issues, then the runtime enhancer started working as well.
I still think that this is a bug, as OpenJPA should not generate NPE even if the input mapping has errors.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12913780#action_12913780 ]
Donald Woods commented on OPENJPA-1804:
---------------------------------------
Updated output using trunk and OPENJPA-1811 (dynamic enhancer working on Mac) -
drwoods:target/$ java -cp ./openjpa-all-2.1.0-SNAPSHOT.jar:./h2-1.2.143.jar:./openjpatest-trunk.jar openjpatest.Main -Dopenjpa.Log=DefaultLevel=TRACE
4 db TRACE [main] openjpa.Runtime - Setting the following properties from "jar:file:/private/tmp/openjpatest/target/openjpatest-trunk.jar!/META-INF/persistence.xml" into configuration: {openjpa.BrokerFactory=jdbc, openjpa.ConnectionDriverName=org.h2.Driver, openjpa.RuntimeUnenhancedClasses=supported, javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl, openjpa.MetaDataFactory=jpa(Types=openjpatest.AddressBook;openjpatest.Group;openjpatest.Organization), openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=2.0, openjpa.ConnectionURL=jdbc:h2:mem:test, openjpa.Id=db}
64 db TRACE [main] openjpa.Runtime - org.apache.openjpa.enhance.InstrumentationFactory.getInstrumentation() _inst:null _dynamicallyInstall:true
66 db TRACE [main] openjpa.Runtime - org.apache.openjpa.enhance.InstrumentationFactory.findToolsJar() -- couldn't find default /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/tools.jar
66 db TRACE [main] openjpa.Runtime - org.apache.openjpa.enhance.InstrumentationFactory.findToolsJar() -- found /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar
1 db TRACE [main] openjpa.Runtime - Setting the following properties from "jar:file:/private/tmp/openjpatest/target/openjpatest-trunk.jar!/META-INF/persistence.xml" into configuration: {openjpa.ConnectionDriverName=org.h2.Driver, openjpa.RuntimeUnenhancedClasses=supported, javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl, openjpa.MetaDataFactory=jpa(Types=openjpatest.AddressBook;openjpatest.Group;openjpatest.Organization), openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=2.0, openjpa.ConnectionURL=jdbc:h2:mem:test, openjpa.Id=db}
69 db TRACE [main] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
130 db TRACE [main] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
154 db TRACE [main] openjpa.MetaData - Scanning resource "META-INF/orm.xml" for persistent types.
156 db TRACE [main] openjpa.MetaData - The persistent unit root url is "null"
156 db TRACE [main] openjpa.MetaData - parsePersistentTypeNames() found [openjpatest.Group, openjpatest.Organization, openjpatest.AddressBook].
156 db TRACE [main] openjpa.MetaData - Found 3 classes with metadata in 25 milliseconds.
160 db TRACE [main] openjpa.MetaData - Clearing metadata repository "org.apache.openjpa.meta.MetaDataRepository@4e4ee70b".
716 db INFO [main] openjpa.Runtime - OpenJPA dynamically loaded the class enhancer. Any classes that were not enhanced at build time will be enhanced when they are loaded by the JVM.
718 db TRACE [main] openjpa.Runtime - Trying to load javax.validation APIs based on the ValidationMode=AUTO
846 db INFO [main] openjpa.Runtime - OpenJPA dynamically loaded a validation provider.
874 db TRACE [main] openjpa.Runtime - org.apache.openjpa.persistence.PersistenceProviderImpl@7114460 creating org.apache.openjpa.persistence.EntityManagerFactoryImpl@7e9ffe3f for PU db.
877 db INFO [main] openjpa.Runtime - Starting OpenJPA 2.1.0-SNAPSHOT
879 db TRACE [main] openjpa.Runtime - Properties: javax.persistence.lock.timeout: 0
javax.persistence.query.timeout: 0
javax.persistence.sharedCache.mode: UNSPECIFIED
javax.persistence.validation.group.pre-persist: javax.validation.groups.Default
javax.persistence.validation.group.pre-update: javax.validation.groups.Default
openjpa.AutoClear: 0
openjpa.AutoDetach: [Ljava.lang.String;@30ff8c74
openjpa.BrokerFactory: jdbc
openjpa.BrokerImpl: default
openjpa.CacheDistributionPolicy: default
openjpa.Callbacks: default
openjpa.ClassResolver: default
openjpa.Compatibility: default
openjpa.ConnectionDriverName: org.h2.Driver
openjpa.ConnectionFactoryMode: false
openjpa.ConnectionRetainMode: 0
openjpa.ConnectionURL: jdbc:h2:mem:test
openjpa.DataCache: false
openjpa.DataCacheManager: default
openjpa.DataCacheTimeout: -1
openjpa.DetachState: loaded
openjpa.DynamicDataStructs: false
openjpa.DynamicEnhancementAgent: true
openjpa.EntityManagerFactory: default
openjpa.FetchBatchSize: -1
openjpa.FetchGroups: [Ljava.lang.String;@595e2ccd
openjpa.FlushBeforeQueries: 0
openjpa.Id: db
openjpa.IgnoreChanges: false
openjpa.InitializeEagerly: false
openjpa.InstrumentationManager: default
openjpa.InverseManager: false
openjpa.LifecycleEventManager: validating
openjpa.LockManager: mixed
openjpa.Log: true(DefaultLevel=TRACE)
openjpa.ManagedRuntime: auto
openjpa.MaxFetchDepth: -1
openjpa.MetaDataFactory: jpa(Types=openjpatest.AddressBook;openjpatest.Group;openjpatest.Organization)
openjpa.MetaDataRepository: default
openjpa.Multithreaded: false
openjpa.NontransactionalRead: true
openjpa.NontransactionalWrite: true
openjpa.Optimistic: true
openjpa.OrphanedKeyAction: log
openjpa.ProxyManager: default
openjpa.QueryCache: false
openjpa.QueryCompilationCache: true
openjpa.ReadLockLevel: 10
openjpa.RefreshFromDataCache: false
openjpa.RestoreState: 1
openjpa.RetainState: true
openjpa.RetryClassRegistration: false
openjpa.RuntimeUnenhancedClasses: 0
openjpa.SavepointManager: in-mem
openjpa.Sequence: table
openjpa.TransactionMode: false
openjpa.WriteLockLevel: 20
openjpa.jdbc.DriverDataSource: auto
openjpa.jdbc.EagerFetchMode: 2
openjpa.jdbc.FetchDirection: 1000
openjpa.jdbc.FinderCache: true
openjpa.jdbc.IdentifierUtil: default
openjpa.jdbc.LRSSize: 2
openjpa.jdbc.MappingDefaults: jpa
openjpa.jdbc.QuerySQLCache: true
openjpa.jdbc.ResultSetType: 1003
openjpa.jdbc.SQLFactory: default
openjpa.jdbc.SchemaFactory: dynamic
openjpa.jdbc.Schemas: [Ljava.lang.String;@30ff8c74
openjpa.jdbc.SubclassFetchMode: 1
openjpa.jdbc.SynchronizeMappings: null
openjpa.jdbc.TransactionIsolation: -1
openjpa.jdbc.UpdateManager: default
881 db TRACE [main] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
973 db TRACE [main] openjpa.MetaData - Using metadata factory "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@565bb966".
1024 db INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.H2Dictionary".
1170 db TRACE [main] openjpa.jdbc.JDBC - createConnectionFactory: DataSource=org.apache.openjpa.jdbc.schema.AutoDriverDataSource_@5c6ed322
1260 db TRACE [main] openjpa.jdbc.JDBC - DataSource connection setAutoCommit to "true"
CCCCC - using DBCPDriverDataSource
1817 db TRACE [main] openjpa.jdbc.JDBC - catalogSeparator: .
catalogTerm: catalog
databaseProductName: H2
databaseProductVersion: 1.2.143 (2010-09-18)
driverName: H2 JDBC Driver
driverVersion: 1.2.143 (2010-09-18)
extraNameCharacters:
identifierQuoteString: "
numericFunctions: ABS,ACOS,ASIN,ATAN,COS,COT,SIN,TAN,ATAN2,BITAND,BITOR,BITXOR,MOD,CEILING,DEGREES,EXP,FLOOR,LOG,LOG10,RADIANS,SQRT,PI,POWER,RAND,RANDOM_UUID,ROUND,ROUNDMAGIC,SECURE_RAND,SIGN,ENCRYPT,DECRYPT,HASH,TRUNCATE,COMPRESS,EXPAND,ZERO
procedureTerm: procedure
schemaTerm: schema
searchStringEscape: \
sqlKeywords: LIMIT,MINUS,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY
stringFunctions: ASCII,BIT_LENGTH,LENGTH,OCTET_LENGTH,CHAR,CONCAT,DIFFERENCE,HEXTORAW,RAWTOHEX,INSTR,INSERT,LOWER,UPPER,LEFT,RIGHT,LOCATE,POSITION,LPAD,RPAD,LTRIM,RTRIM,TRIM,REGEXP_REPLACE,REPEAT,REPLACE,SOUNDEX,SPACE,STRINGDECODE,STRINGENCODE,STRINGTOUTF8,SUBSTRING,UTF8TOSTRING,XMLATTR,XMLNODE,XMLCOMMENT,XMLCDATA,XMLSTARTDOC,XMLTEXT
systemFunctions: ARRAY_GET,ARRAY_LENGTH,AUTOCOMMIT,CANCEL_SESSION,CASEWHEN,CAST,COALESCE,CONVERT,CURRVAL,CSVREAD,CSVWRITE,DATABASE,DATABASE_PATH,FILE_READ,GREATEST,IDENTITY,IFNULL,LEAST,LOCK_MODE,LOCK_TIMEOUT,LINK_SCHEMA,MEMORY_FREE,MEMORY_USED,NEXTVAL,NULLIF,READONLY,ROWNUM,SCHEMA,SCOPE_IDENTITY,SESSION_ID,SET,TABLE,TRANSACTION_ID,USER
timeDateFunctions: CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,DATEADD,DATEDIFF,DAYNAME,DAY_OF_MONTH,DAY_OF_WEEK,DAY_OF_YEAR,EXTRACT,FORMATDATETIME,HOUR,MINUTE,MONTH,MONTHNAME,PARSEDATETIME,QUARTER,SECOND,WEEK,YEAR
url: jdbc:h2:mem:test
userName:
defaultTransactionIsolation: 2
driverMajorVersion: 1
driverMinorVersion: 2
maxBinaryLiteralLength: 0
maxCatalogNameLength: 0
maxCharLiteralLength: 0
maxColumnNameLength: 0
maxColumnsInGroupBy: 0
maxColumnsInIndex: 0
maxColumnsInOrderBy: 0
maxColumnsInSelect: 0
maxColumnsInTable: 0
maxConnections: 0
maxCursorNameLength: 0
maxIndexLength: 0
maxProcedureNameLength: 0
maxRowSize: 0
maxSchemaNameLength: 0
maxStatementLength: 0
maxStatements: 0
maxTableNameLength: 0
maxTablesInSelect: 0
maxUserNameLength: 0
isCatalogAtStart: true
isReadOnly: false
nullPlusNonNullIsNull: true
nullsAreSortedAtEnd: false
nullsAreSortedAtStart: false
nullsAreSortedHigh: false
nullsAreSortedLow: true
storesLowerCaseIdentifiers: false
storesLowerCaseQuotedIdentifiers: false
storesMixedCaseIdentifiers: false
storesMixedCaseQuotedIdentifiers: true
storesUpperCaseIdentifiers: true
storesUpperCaseQuotedIdentifiers: false
supportsAlterTableWithAddColumn: true
supportsAlterTableWithDropColumn: true
supportsANSI92EntryLevelSQL: true
supportsANSI92FullSQL: false
supportsANSI92IntermediateSQL: false
supportsCatalogsInDataManipulation: true
supportsCatalogsInIndexDefinitions: true
supportsCatalogsInPrivilegeDefinitions: true
supportsCatalogsInProcedureCalls: false
supportsCatalogsInTableDefinitions: true
supportsColumnAliasing: true
supportsConvert: true
supportsCoreSQLGrammar: true
supportsCorrelatedSubqueries: true
supportsDataDefinitionAndDataManipulationTransactions: false
supportsDataManipulationTransactionsOnly: true
supportsDifferentTableCorrelationNames: false
supportsExpressionsInOrderBy: true
supportsExtendedSQLGrammar: false
supportsFullOuterJoins: false
supportsGroupBy: true
supportsGroupByBeyondSelect: true
supportsGroupByUnrelated: true
supportsIntegrityEnhancementFacility: true
supportsLikeEscapeClause: true
supportsLimitedOuterJoins: true
supportsMinimumSQLGrammar: true
supportsMixedCaseIdentifiers: false
supportsMixedCaseQuotedIdentifiers: true
supportsMultipleResultSets: false
supportsMultipleTransactions: true
supportsNonNullableColumns: true
supportsOpenCursorsAcrossCommit: false
supportsOpenCursorsAcrossRollback: false
supportsOpenStatementsAcrossCommit: true
supportsOpenStatementsAcrossRollback: true
supportsOrderByUnrelated: true
supportsOuterJoins: true
supportsPositionedDelete: true
supportsPositionedUpdate: true
supportsSchemasInDataManipulation: true
supportsSchemasInIndexDefinitions: true
supportsSchemasInPrivilegeDefinitions: true
supportsSchemasInProcedureCalls: true
supportsSchemasInTableDefinitions: true
supportsSelectForUpdate: true
supportsStoredProcedures: false
supportsSubqueriesInComparisons: true
supportsSubqueriesInExists: true
supportsSubqueriesInIns: true
supportsSubqueriesInQuantifieds: true
supportsTableCorrelationNames: true
supportsTransactions: true
supportsUnion: true
supportsUnionAll: true
usesLocalFilePerTable: false
usesLocalFiles: true
allProceduresAreCallable: true
allTablesAreSelectable: true
dataDefinitionCausesTransactionCommit: true
dataDefinitionIgnoredInTransactions: false
doesMaxRowSizeIncludeBlobs: false
supportsBatchUpdates: true
1821 db TRACE [main] openjpa.jdbc.JDBC - Initial connection autoCommit: true, holdability: 1, TransactionIsolation: 2
1833 db TRACE [main] openjpa.jdbc.JDBC - <t 1205573714, conn 569201753> [3 ms] close
1928 db TRACE [main] openjpa.Runtime - Found datasource1: datasource 1550766882 from configuration. StoreContext: org.apache.openjpa.kernel.FinalizingBrokerImpl@345c98f3
1937 db TRACE [main] openjpa.MetaData - Scanning resource "META-INF/orm.xml" for persistent types.
1937 db TRACE [main] openjpa.MetaData - The persistent unit root url is "null"
1938 db TRACE [main] openjpa.MetaData - parsePersistentTypeNames() found [openjpatest.Group, openjpatest.Organization, openjpatest.AddressBook].
1938 db TRACE [main] openjpa.MetaData - Found 3 classes with metadata in 1 milliseconds.
1385 db TRACE [main] openjpa.Enhance - "openjpatest/Group" requires runtime enhancement: true
1416 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Group" under mode "[META][QUERY]".
1433 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Group".
1433 db TRACE [main] openjpa.MetaData - Parsing package "openjpatest.Group".
1469 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Group".
1469 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1504 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Group" to "null".
1504 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Group@1606871064".
1504 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@1606871064.id".
1511 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@1606871064.name".
1511 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@1606871064.organization".
1511 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Organization" under mode "[META][QUERY]".
1511 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Organization".
1513 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Organization".
1513 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1521 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Organization" to "null".
1521 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@1606871064.version".
1522 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Organization@570110481".
1522 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@570110481.addressBook".
1522 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.AddressBook" under mode "[META][QUERY]".
1522 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.AddressBook".
1523 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.AddressBook".
1523 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1527 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.EmailAddress".
1527 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1527 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.AddressBook" to "null".
1527 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@570110481.hostNames".
1527 db TRACE [main] openjpa.MetaData - Resolving embedded metadata for "java.lang.Object@1671818348".
1528 db TRACE [main] openjpa.MetaData - Preparing mapping for "openjpatest.Group".
1528 db TRACE [main] openjpa.MetaData - Resolving mapping for "openjpatest.Group@1606871064".
1528 db WARN [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "openjpatest/Group":
<openjpa-2.1.0-SNAPSHOT-r422266:999559M fatal user error> org.apache.openjpa.util.MetaDataException: Errors encountered while resolving metadata. See nested exceptions for details.
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:655)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:143)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1538)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1514)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1492)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:283)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
Caused by: <openjpa-2.1.0-SNAPSHOT-r422266:999559M nonfatal user error> org.apache.openjpa.util.MetaDataException: No metadata was found for type "class java.lang.Object". The class is not enhanced.
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:390)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1822)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1787)
at org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
at org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1732)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1853)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1787)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:809)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:706)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:630)
... 33 more
NestedThrowables:
<openjpa-2.1.0-SNAPSHOT-r422266:999559M fatal user error> org.apache.openjpa.util.MetaDataException: Unable to resolve type "openjpatest.AddressBook" due to previous errors resolving related type "openjpatest.Organization".
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:822)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:706)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:630)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:143)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1538)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1514)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1492)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:283)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
1535 db TRACE [main] openjpa.Enhance - "openjpatest/Organization" requires runtime enhancement: true
1537 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Organization" under mode "[META][QUERY]".
1537 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Organization".
1538 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Organization".
1538 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1540 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Organization" to "null".
1540 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Organization@1056794277".
1540 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@1056794277.addressBook".
1541 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.AddressBook" under mode "[META][QUERY]".
1541 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.AddressBook".
1541 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.AddressBook".
1541 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1542 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.EmailAddress".
1542 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1542 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.AddressBook" to "null".
1543 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@1056794277.hostNames".
1543 db TRACE [main] openjpa.MetaData - Resolving embedded metadata for "java.lang.Object@1851652849".
1543 db WARN [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "openjpatest/Organization":
<openjpa-2.1.0-SNAPSHOT-r422266:999559M fatal user error> org.apache.openjpa.util.MetaDataException: Errors encountered while resolving metadata. See nested exceptions for details.
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:655)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:143)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1538)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1514)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1492)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:283)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
Caused by: <openjpa-2.1.0-SNAPSHOT-r422266:999559M nonfatal user error> org.apache.openjpa.util.MetaDataException: No metadata was found for type "class java.lang.Object". The class is not enhanced.
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:390)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1822)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1787)
at org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
at org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1732)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1853)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1787)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:809)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:706)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:630)
... 33 more
NestedThrowables:
<openjpa-2.1.0-SNAPSHOT-r422266:999559M fatal user error> org.apache.openjpa.util.MetaDataException: Unable to resolve type "openjpatest.AddressBook" due to previous errors resolving related type "openjpatest.Organization".
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:822)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:706)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:630)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:143)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1538)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1514)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1492)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:283)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
1547 db TRACE [main] openjpa.Enhance - "openjpatest/AddressBook" requires runtime enhancement: true
1549 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.AddressBook" under mode "[META][QUERY]".
1549 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.AddressBook".
1549 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.AddressBook".
1550 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1551 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.EmailAddress".
1551 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1551 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.AddressBook" to "null".
1551 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.AddressBook@1543904466".
1551 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.AddressBook@1543904466.id".
1551 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.AddressBook@1543904466.primaryEmailAddress".
1551 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.EmailAddress" under mode "[META][QUERY]".
1551 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.EmailAddress".
1551 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.EmailAddress".
1551 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
1552 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.EmailAddress" to "null".
1552 db TRACE [main] openjpa.MetaData - Resolving embedded metadata for "openjpatest.EmailAddress@357453361".
1552 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.EmailAddress" to "null".
1552 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.EmailAddress@1206877668".
1552 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.EmailAddress@1206877668.email".
1552 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.EmailAddress@357453361.email".
1552 db TRACE [main] openjpa.MetaData - Preparing mapping for "openjpatest.AddressBook".
1552 db TRACE [main] openjpa.MetaData - Preparing mapping for "openjpatest.EmailAddress".
1553 db TRACE [main] openjpa.MetaData - Resolving mapping for "openjpatest.AddressBook@1543904466".
1553 db TRACE [main] openjpa.MetaData - Resolving mapping for "openjpatest.EmailAddress@1206877668".
1553 db TRACE [main] openjpa.Enhance - Enhancing type "class openjpatest.AddressBook" loaded by org.apache.openjpa.lib.util.TemporaryClassLoader@38ffd135.
2358 db TRACE [main] openjpa.Enhance - org.apache.openjpa.enhance.InstrumentationFactory.getInstrumentation() _inst:sun.instrument.InstrumentationImpl@31d8d237 _dynamicallyInstall:true
2359 db INFO [main] openjpa.Enhance - Creating subclass and redefining methods for "[class openjpatest.Group, class openjpatest.Organization]". This means that your application will be less efficient than it would if you ran the OpenJPA enhancer.
2364 db TRACE [main] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
2364 db TRACE [main] openjpa.MetaData - Using metadata factory "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@109b2a51".
2364 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Group" under mode "[META]".
2364 db TRACE [main] openjpa.MetaData - Scanning resource "META-INF/orm.xml" for persistent types.
2364 db TRACE [main] openjpa.MetaData - The persistent unit root url is "null"
2364 db TRACE [main] openjpa.MetaData - parsePersistentTypeNames() found [openjpatest.Group, openjpatest.Organization, openjpatest.AddressBook].
2365 db TRACE [main] openjpa.MetaData - Found 3 classes with metadata in 0 milliseconds.
2394 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Group".
2394 db TRACE [main] openjpa.MetaData - Parsing package "openjpatest.Group".
2405 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Group".
2405 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
2418 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Group" to "null".
2419 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Group@778653458".
2419 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.id".
2419 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.name".
2419 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.organization".
2419 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Organization" under mode "[META]".
2419 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Organization".
2420 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Organization".
2420 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
2424 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Organization" to "null".
2424 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.version".
2424 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Organization@1546386943".
2424 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@1546386943.addressBook".
2424 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.AddressBook" under mode "[META]".
2424 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.AddressBook".
2425 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.AddressBook".
2427 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.EmailAddress".
2427 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
2427 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.AddressBook" to "null".
2427 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@1546386943.hostNames".
2427 db TRACE [main] openjpa.MetaData - Resolving embedded metadata for "java.lang.Object@1691493474".
2428 db TRACE [main] openjpa.MetaData - Preparing mapping for "openjpatest.Group".
2432 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.id".
2437 db TRACE [main] openjpa.MetaData - "id" has mapping strategy "org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy".
2439 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.name".
2439 db TRACE [main] openjpa.MetaData - "name" has mapping strategy "org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy".
2440 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.version".
2440 db TRACE [main] openjpa.MetaData - "version" has mapping strategy "none".
2444 db TRACE [main] openjpa.MetaData - "openjpatest.Group<discriminator>" has mapping strategy "value-map".
2446 db TRACE [main] openjpa.MetaData - "openjpatest.Group<version>" has mapping strategy "version-number".
2446 db TRACE [main] openjpa.MetaData - Resolving mapping for "openjpatest.Group@778653458".
2447 db TRACE [main] openjpa.MetaData - "openjpatest.Group" has mapping strategy "full".
2447 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@778653458.organization".
Exception in thread "main" <openjpa-2.1.0-SNAPSHOT-r422266:999559M fatal user error> org.apache.openjpa.persistence.ArgumentException: Errors encountered while resolving metadata. See nested exceptions for details.
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:655)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:222)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:315)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
Caused by: <openjpa-2.1.0-SNAPSHOT-r422266:999559M nonfatal user error> org.apache.openjpa.persistence.ArgumentException: No metadata was found for type "class java.lang.Object". The class is not enhanced.
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:390)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1822)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1787)
at org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolve(ValueMappingImpl.java:494)
at org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1732)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:458)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1853)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1787)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:809)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:706)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:630)
... 14 more
NestedThrowables:
<openjpa-2.1.0-SNAPSHOT-r422266:999559M fatal user error> org.apache.openjpa.persistence.ArgumentException: Unable to resolve type "openjpatest.AddressBook" due to previous errors resolving related type "openjpatest.Organization".
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:822)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:706)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:630)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:222)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:315)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
java.lang.NullPointerException
at org.apache.openjpa.jdbc.meta.MappingInfo.mergeJoinColumn(MappingInfo.java:1513)
at org.apache.openjpa.jdbc.meta.MappingInfo.createJoins(MappingInfo.java:1322)
at org.apache.openjpa.jdbc.meta.MappingInfo.createForeignKey(MappingInfo.java:1084)
at org.apache.openjpa.jdbc.meta.ValueMappingInfo.getTypeJoin(ValueMappingInfo.java:115)
at org.apache.openjpa.jdbc.meta.ValueMappingInfo.getTypeJoin(ValueMappingInfo.java:92)
at org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.map(RelationFieldStrategy.java:167)
at org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java:146)
at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:82)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:496)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:461)
at org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.java:854)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1792)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:809)
at org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataRepository.java:764)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:644)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:398)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:371)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:222)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:315)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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
>
> Attachments: openjpatest.tar.gz
>
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12911079#action_12911079 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
Stack trace:
Internal error: Errors encountered while resolving metadata. See nested exceptions for details.
<openjpa-2.0.1-r422266:989424 fatal user error> org.apache.openjpa.persistence.ArgumentException: Errors encountered while resolving metadata. See nested exceptions for details.
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:642)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:256)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:227)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:195)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:317)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:241)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:215)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at com.signetworks.signs.util.db.Database$.createEntityManager(Database.scala:75)
at com.signetworks.signs.util.db.Database$.withEntityManager(Database.scala:72)
at com.signetworks.signs.util.db.Database$.unique(Database.scala:40)
at com.signetworks.v3.servlet.V3Servlet.dispatchRequestInSession(V3Servlet.scala:63)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3$$anonfun$apply$1.apply(RequestDispatcher.scala:32)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3$$anonfun$apply$1.apply(RequestDispatcher.scala:32)
at com.signetworks.dance.http.SynchronizedSessionBinder$$anonfun$bindSession$1.apply(SynchronizedSessionBinder.scala:21)
at com.signetworks.dance.http.SynchronizedSessionBinder$$anonfun$bindSession$1.apply(SynchronizedSessionBinder.scala:21)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.SynchronizedSessionBinder$class.bindSession(SynchronizedSessionBinder.scala:21)
at com.signetworks.v3.servlet.V3Servlet.bindSession(V3Servlet.scala:31)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3.apply(RequestDispatcher.scala:31)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3.apply(RequestDispatcher.scala:31)
at scala.Option.getOrElse(Option.scala:59)
at com.signetworks.dance.http.RequestDispatcher$class.dispatchRequest(RequestDispatcher.scala:30)
at com.signetworks.v3.servlet.V3Servlet.dispatchRequest(V3Servlet.scala:31)
at com.signetworks.dance.http.RequestDispatcher$class.handleRequest(RequestDispatcher.scala:22)
at com.signetworks.v3.servlet.V3Servlet.handleRequest(V3Servlet.scala:31)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1.apply(DanceServlet.scala:47)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1.apply(DanceServlet.scala:46)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply$mcV$sp(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply(DanceServlet.scala:63)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.DanceServlet.bindRequest(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply$mcV$sp(DanceServlet.scala:45)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply(DanceServlet.scala:45)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply(DanceServlet.scala:45)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.DanceServlet.service(DanceServlet.scala:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
Caused by: <openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: No metadata was found for type "class java.lang.Object". The class is not enhanced.
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:377)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1821)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
at org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolve(ValueMappingImpl.java:494)
at org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1732)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:458)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1852)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:790)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:693)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:617)
... 68 more
NestedThrowables:
<openjpa-2.0.1-r422266:989424 fatal user error> org.apache.openjpa.persistence.ArgumentException: Unable to resolve type "com.signetworks.signs.model.addressbook.AddressBook" due to previous errors resolving related type "com.signetworks.signs.model.security.Organization".
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:804)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:693)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:617)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:256)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:227)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:195)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:317)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:241)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:215)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at com.signetworks.signs.util.db.Database$.createEntityManager(Database.scala:75)
at com.signetworks.signs.util.db.Database$.withEntityManager(Database.scala:72)
at com.signetworks.signs.util.db.Database$.unique(Database.scala:40)
at com.signetworks.v3.servlet.V3Servlet.dispatchRequestInSession(V3Servlet.scala:63)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3$$anonfun$apply$1.apply(RequestDispatcher.scala:32)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3$$anonfun$apply$1.apply(RequestDispatcher.scala:32)
at com.signetworks.dance.http.SynchronizedSessionBinder$$anonfun$bindSession$1.apply(SynchronizedSessionBinder.scala:21)
at com.signetworks.dance.http.SynchronizedSessionBinder$$anonfun$bindSession$1.apply(SynchronizedSessionBinder.scala:21)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.SynchronizedSessionBinder$class.bindSession(SynchronizedSessionBinder.scala:21)
at com.signetworks.v3.servlet.V3Servlet.bindSession(V3Servlet.scala:31)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3.apply(RequestDispatcher.scala:31)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3.apply(RequestDispatcher.scala:31)
at scala.Option.getOrElse(Option.scala:59)
at com.signetworks.dance.http.RequestDispatcher$class.dispatchRequest(RequestDispatcher.scala:30)
at com.signetworks.v3.servlet.V3Servlet.dispatchRequest(V3Servlet.scala:31)
at com.signetworks.dance.http.RequestDispatcher$class.handleRequest(RequestDispatcher.scala:22)
at com.signetworks.v3.servlet.V3Servlet.handleRequest(V3Servlet.scala:31)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1.apply(DanceServlet.scala:47)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1.apply(DanceServlet.scala:46)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply$mcV$sp(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply(DanceServlet.scala:63)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.DanceServlet.bindRequest(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply$mcV$sp(DanceServlet.scala:45)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply(DanceServlet.scala:45)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply(DanceServlet.scala:45)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.DanceServlet.service(DanceServlet.scala:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
java.lang.NullPointerException
at org.apache.openjpa.jdbc.meta.MappingInfo.mergeJoinColumn(MappingInfo.java:1514)
at org.apache.openjpa.jdbc.meta.MappingInfo.createJoins(MappingInfo.java:1322)
at org.apache.openjpa.jdbc.meta.MappingInfo.createForeignKey(MappingInfo.java:1084)
at org.apache.openjpa.jdbc.meta.ValueMappingInfo.getTypeJoin(ValueMappingInfo.java:115)
at org.apache.openjpa.jdbc.meta.ValueMappingInfo.getTypeJoin(ValueMappingInfo.java:92)
at org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.map(RelationFieldStrategy.java:167)
at org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java:146)
at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:82)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:496)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:461)
at org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.java:853)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1791)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:790)
at org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataRepository.java:751)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:631)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:256)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:227)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:195)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:317)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:241)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:215)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at com.signetworks.signs.util.db.Database$.createEntityManager(Database.scala:75)
at com.signetworks.signs.util.db.Database$.withEntityManager(Database.scala:72)
at com.signetworks.signs.util.db.Database$.unique(Database.scala:40)
at com.signetworks.v3.servlet.V3Servlet.dispatchRequestInSession(V3Servlet.scala:63)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3$$anonfun$apply$1.apply(RequestDispatcher.scala:32)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3$$anonfun$apply$1.apply(RequestDispatcher.scala:32)
at com.signetworks.dance.http.SynchronizedSessionBinder$$anonfun$bindSession$1.apply(SynchronizedSessionBinder.scala:21)
at com.signetworks.dance.http.SynchronizedSessionBinder$$anonfun$bindSession$1.apply(SynchronizedSessionBinder.scala:21)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.SynchronizedSessionBinder$class.bindSession(SynchronizedSessionBinder.scala:21)
at com.signetworks.v3.servlet.V3Servlet.bindSession(V3Servlet.scala:31)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3.apply(RequestDispatcher.scala:31)
at com.signetworks.dance.http.RequestDispatcher$$anonfun$dispatchRequest$3.apply(RequestDispatcher.scala:31)
at scala.Option.getOrElse(Option.scala:59)
at com.signetworks.dance.http.RequestDispatcher$class.dispatchRequest(RequestDispatcher.scala:30)
at com.signetworks.v3.servlet.V3Servlet.dispatchRequest(V3Servlet.scala:31)
at com.signetworks.dance.http.RequestDispatcher$class.handleRequest(RequestDispatcher.scala:22)
at com.signetworks.v3.servlet.V3Servlet.handleRequest(V3Servlet.scala:31)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1.apply(DanceServlet.scala:47)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1$$anonfun$apply$mcV$sp$1.apply(DanceServlet.scala:46)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply$mcV$sp(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$bindRequest$1.apply(DanceServlet.scala:63)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.DanceServlet.bindRequest(DanceServlet.scala:63)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply$mcV$sp(DanceServlet.scala:45)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply(DanceServlet.scala:45)
at com.signetworks.dance.http.DanceServlet$$anonfun$service$1.apply(DanceServlet.scala:45)
at com.signetworks.dance.util.ThreadBoundValue.withValue(ThreadBoundValue.scala:38)
at com.signetworks.dance.http.DanceServlet.service(DanceServlet.scala:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12913056#action_12913056 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
Rick, I have a spare white MacBook that I'll lend to you or someone else if it will help OpenJPA work better on OS X. Are any of the project's developers in New York City? You can email me directly at wboyce at panix dot com.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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 MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Rick Curtis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12913013#action_12913013 ]
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 MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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 MappingInfo.java 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.
[jira] Issue Comment Edited: (OPENJPA-1804) NPE in MappingInfo.java
line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912984#action_12912984 ]
Willis Blackburn edited comment on OPENJPA-1804 at 9/21/10 12:01 PM:
---------------------------------------------------------------------
Rick, you asked, "Perhaps we need to have a stronger warning message when this feature is enabled? ... or disable it all together?"
I saw on the roadmap that OpenJPA 2.1 will require Java 6. I think that if OpenJPA is not going to support Java 5, then there is no need to support working with unenhanced classes. The strategy of using the attach API to install the agent will work for casual users, and the others can pass the agent on the command line, use the J2EE container hooks, or use the build-time enhancer. The behavior of OpenJPA when using unenhanced classes is different from its behavior when using enhanced classes (no lazy loading, changes only detected at flush), so anything that users actually develop in that mode is not going to be production-ready. At some point developers will have to figure out how to get the agent or the build-time enhancer working and test their code under that configuration. Given how easy it is to use the attach API enhancer under Java 6, there's not a strong case for having a less-functional alternative.
Have I added enough comments to this issue yet? I think I'm going for a personal record.
was (Author: wboyce@panix.com):
Rick, you asked, "Perhaps we need to have a stronger warning message when this feature is enabled? ... or disable it all together?"
I saw on the roadmap that OpenJPA 2.1 will require Java 6. I think that if OpenJPA is not going to support Java 6, then there is no need to support working with unenhanced classes. The strategy of using the attach API to install the agent will work for casual users, and the others can pass the agent on the command line, use the J2EE container hooks, or use the build-time enhancer. The behavior of OpenJPA when using unenhanced classes is different from its behavior when using enhanced classes (no lazy loading, changes only detected at flush), so anything that users actually develop in that mode is not going to be production-ready. At some point developers will have to figure out how to get the agent or the build-time enhancer working and test their code under that configuration. Given how easy it is to use the attach API enhancer under Java 6, there's not a strong case for having a less-functional alternative.
Have I added enough comments to this issue yet? I think I'm going for a personal record.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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 MappingInfo.java 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.
[jira] Updated: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Donald Woods updated OPENJPA-1804:
----------------------------------
Component/s: usability
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> Project: OpenJPA
> Issue Type: Bug
> Components: Enhance, usability
> Affects Versions: 2.0.1
> Reporter: Willis Blackburn
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Commented: (OPENJPA-1804) NPE in MappingInfo.java line 1514
Posted by "Willis Blackburn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12913500#action_12913500 ]
Willis Blackburn commented on OPENJPA-1804:
-------------------------------------------
Test case run:
/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin/java -Dfile.encoding=MacRoman -classpath /System/Library/Frameworks/JavaVM.framework/Versions/A/Resources/Deploy.bundle/Contents/Resources/Java/deploy.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/dt.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/javaws.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/management-agent.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/plugin.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/sa-jdi.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/alt-rt.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/charsets.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/jconsole.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/ui.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext/apple_provider.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext/dnsns.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext/localedata.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext/sunjce_provider.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext/sunpkcs11.jar:/Users/wboyce/git/openjpatest/target/classes:/Users/wboyce/.m2/repository/org/apache/openjpa/openjpa/2.0.1/openjpa-2.0.1.jar:/Users/wboyce/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar:/Users/wboyce/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar:/Users/wboyce/.m2/repository/net/sourceforge/serp/serp/1.13.1/serp-1.13.1.jar:/Users/wboyce/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar:/Users/wboyce/.m2/repository/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar:/Users/wboyce/.m2/repository/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar:/Users/wboyce/.m2/repository/commons-pool/commons-pool/1.5.3/commons-pool-1.5.3.jar:/Users/wboyce/.m2/repository/org/apache/geronimo/specs/geronimo-jpa_2.0_spec/1.1/geronimo-jpa_2.0_spec-1.1.jar:/Users/wboyce/.m2/repository/com/h2database/h2/1.2.143/h2-1.2.143.jar openjpatest.Main
6 db TRACE [main] openjpa.Runtime - Setting the following properties from "file:/Users/wboyce/git/openjpatest/target/classes/META-INF/persistence.xml" into configuration: {openjpa.BrokerFactory=jdbc, openjpa.ConnectionDriverName=org.h2.Driver, openjpa.RuntimeUnenhancedClasses=supported, javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl, openjpa.MetaDataFactory=jpa(Types=openjpatest.AddressBook;openjpatest.Group;openjpatest.Organization), openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=2.0, openjpa.ConnectionURL=jdbc:h2:mem:test, openjpa.Id=db}
44 db TRACE [main] openjpa.Runtime - org.apache.openjpa.enhance.InstrumentationFactory.findToolsJar() -- couldn't find /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/tools.jar
46 db TRACE [main] openjpa.Runtime - Trying to load javax.validation APIs based on the ValidationMode=AUTO
48 db TRACE [main] openjpa.Runtime - Could not create the optional validation provider. Reason returned: "No available javax.validation APIs"
77 db INFO [main] openjpa.Runtime - Starting OpenJPA 2.0.1
78 db TRACE [main] openjpa.Runtime - Properties: javax.persistence.lock.timeout: 0
javax.persistence.query.timeout: 0
javax.persistence.sharedCache.mode: UNSPECIFIED
javax.persistence.validation.group.pre-persist: javax.validation.groups.Default
javax.persistence.validation.group.pre-update: javax.validation.groups.Default
openjpa.AutoClear: 0
openjpa.AutoDetach: [Ljava.lang.String;@2af081
openjpa.BrokerFactory: jdbc
openjpa.BrokerImpl: default
openjpa.CacheDistributionPolicy: default
openjpa.Callbacks: default
openjpa.ClassResolver: default
openjpa.Compatibility: default
openjpa.ConnectionDriverName: org.h2.Driver
openjpa.ConnectionFactoryMode: false
openjpa.ConnectionRetainMode: 0
openjpa.ConnectionURL: jdbc:h2:mem:test
openjpa.DataCache: false
openjpa.DataCacheManager: default
openjpa.DataCacheTimeout: -1
openjpa.DetachState: loaded
openjpa.DynamicDataStructs: false
openjpa.DynamicEnhancementAgent: true
openjpa.EntityManagerFactory: default
openjpa.FetchBatchSize: -1
openjpa.FetchGroups: [Ljava.lang.String;@313a53d
openjpa.FlushBeforeQueries: 0
openjpa.Id: db
openjpa.IgnoreChanges: false
openjpa.InitializeEagerly: false
openjpa.InverseManager: false
openjpa.LifecycleEventManager: default
openjpa.LockManager: mixed
openjpa.Log: true(DefaultLevel=TRACE)
openjpa.ManagedRuntime: auto
openjpa.MaxFetchDepth: -1
openjpa.MetaDataFactory: jpa(Types=openjpatest.AddressBook;openjpatest.Group;openjpatest.Organization)
openjpa.MetaDataRepository: default
openjpa.Multithreaded: false
openjpa.NontransactionalRead: true
openjpa.NontransactionalWrite: true
openjpa.Optimistic: true
openjpa.OrphanedKeyAction: log
openjpa.ProxyManager: default
openjpa.QueryCache: false
openjpa.QueryCompilationCache: true
openjpa.ReadLockLevel: 10
openjpa.RefreshFromDataCache: false
openjpa.RestoreState: 1
openjpa.RetainState: true
openjpa.RetryClassRegistration: false
openjpa.RuntimeUnenhancedClasses: 0
openjpa.SavepointManager: in-mem
openjpa.Sequence: table
openjpa.TransactionMode: false
openjpa.WriteLockLevel: 20
openjpa.jdbc.DriverDataSource: simple
openjpa.jdbc.EagerFetchMode: 2
openjpa.jdbc.FetchDirection: 1000
openjpa.jdbc.FinderCache: true
openjpa.jdbc.IdentifierUtil: default
openjpa.jdbc.LRSSize: 2
openjpa.jdbc.MappingDefaults: jpa
openjpa.jdbc.QuerySQLCache: true
openjpa.jdbc.ResultSetType: 1003
openjpa.jdbc.SQLFactory: default
openjpa.jdbc.SchemaFactory: dynamic
openjpa.jdbc.Schemas: [Ljava.lang.String;@2af081
openjpa.jdbc.SubclassFetchMode: 1
openjpa.jdbc.SynchronizeMappings: null
openjpa.jdbc.TransactionIsolation: -1
openjpa.jdbc.UpdateManager: default
89 db TRACE [main] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
140 db TRACE [main] openjpa.MetaData - Using metadata factory "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@4d3c7378".
171 db INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.H2Dictionary".
271 db TRACE [main] openjpa.jdbc.JDBC - createConnectionFactory: DataSource=org.apache.openjpa.jdbc.schema.SimpleDriverDataSource_@50269997
310 db TRACE [main] openjpa.jdbc.JDBC - DataSource connection setAutoCommit to "true"
524 db TRACE [main] openjpa.jdbc.JDBC - catalogSeparator: .
catalogTerm: catalog
databaseProductName: H2
databaseProductVersion: 1.2.143 (2010-09-18)
driverName: H2 JDBC Driver
driverVersion: 1.2.143 (2010-09-18)
extraNameCharacters:
identifierQuoteString: "
numericFunctions: ABS,ACOS,ASIN,ATAN,COS,COT,SIN,TAN,ATAN2,BITAND,BITOR,BITXOR,MOD,CEILING,DEGREES,EXP,FLOOR,LOG,LOG10,RADIANS,SQRT,PI,POWER,RAND,RANDOM_UUID,ROUND,ROUNDMAGIC,SECURE_RAND,SIGN,ENCRYPT,DECRYPT,HASH,TRUNCATE,COMPRESS,EXPAND,ZERO
procedureTerm: procedure
schemaTerm: schema
searchStringEscape: \
sqlKeywords: LIMIT,MINUS,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY
stringFunctions: ASCII,BIT_LENGTH,LENGTH,OCTET_LENGTH,CHAR,CONCAT,DIFFERENCE,HEXTORAW,RAWTOHEX,INSTR,INSERT,LOWER,UPPER,LEFT,RIGHT,LOCATE,POSITION,LPAD,RPAD,LTRIM,RTRIM,TRIM,REGEXP_REPLACE,REPEAT,REPLACE,SOUNDEX,SPACE,STRINGDECODE,STRINGENCODE,STRINGTOUTF8,SUBSTRING,UTF8TOSTRING,XMLATTR,XMLNODE,XMLCOMMENT,XMLCDATA,XMLSTARTDOC,XMLTEXT
systemFunctions: ARRAY_GET,ARRAY_LENGTH,AUTOCOMMIT,CANCEL_SESSION,CASEWHEN,CAST,COALESCE,CONVERT,CURRVAL,CSVREAD,CSVWRITE,DATABASE,DATABASE_PATH,FILE_READ,GREATEST,IDENTITY,IFNULL,LEAST,LOCK_MODE,LOCK_TIMEOUT,LINK_SCHEMA,MEMORY_FREE,MEMORY_USED,NEXTVAL,NULLIF,READONLY,ROWNUM,SCHEMA,SCOPE_IDENTITY,SESSION_ID,SET,TABLE,TRANSACTION_ID,USER
timeDateFunctions: CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,DATEADD,DATEDIFF,DAYNAME,DAY_OF_MONTH,DAY_OF_WEEK,DAY_OF_YEAR,EXTRACT,FORMATDATETIME,HOUR,MINUTE,MONTH,MONTHNAME,PARSEDATETIME,QUARTER,SECOND,WEEK,YEAR
url: jdbc:h2:mem:test
userName:
defaultTransactionIsolation: 2
driverMajorVersion: 1
driverMinorVersion: 2
maxBinaryLiteralLength: 0
maxCatalogNameLength: 0
maxCharLiteralLength: 0
maxColumnNameLength: 0
maxColumnsInGroupBy: 0
maxColumnsInIndex: 0
maxColumnsInOrderBy: 0
maxColumnsInSelect: 0
maxColumnsInTable: 0
maxConnections: 0
maxCursorNameLength: 0
maxIndexLength: 0
maxProcedureNameLength: 0
maxRowSize: 0
maxSchemaNameLength: 0
maxStatementLength: 0
maxStatements: 0
maxTableNameLength: 0
maxTablesInSelect: 0
maxUserNameLength: 0
isCatalogAtStart: true
isReadOnly: false
nullPlusNonNullIsNull: true
nullsAreSortedAtEnd: false
nullsAreSortedAtStart: false
nullsAreSortedHigh: false
nullsAreSortedLow: true
storesLowerCaseIdentifiers: false
storesLowerCaseQuotedIdentifiers: false
storesMixedCaseIdentifiers: false
storesMixedCaseQuotedIdentifiers: true
storesUpperCaseIdentifiers: true
storesUpperCaseQuotedIdentifiers: false
supportsAlterTableWithAddColumn: true
supportsAlterTableWithDropColumn: true
supportsANSI92EntryLevelSQL: true
supportsANSI92FullSQL: false
supportsANSI92IntermediateSQL: false
supportsCatalogsInDataManipulation: true
supportsCatalogsInIndexDefinitions: true
supportsCatalogsInPrivilegeDefinitions: true
supportsCatalogsInProcedureCalls: false
supportsCatalogsInTableDefinitions: true
supportsColumnAliasing: true
supportsConvert: true
supportsCoreSQLGrammar: true
supportsCorrelatedSubqueries: true
supportsDataDefinitionAndDataManipulationTransactions: false
supportsDataManipulationTransactionsOnly: true
supportsDifferentTableCorrelationNames: false
supportsExpressionsInOrderBy: true
supportsExtendedSQLGrammar: false
supportsFullOuterJoins: false
supportsGroupBy: true
supportsGroupByBeyondSelect: true
supportsGroupByUnrelated: true
supportsIntegrityEnhancementFacility: true
supportsLikeEscapeClause: true
supportsLimitedOuterJoins: true
supportsMinimumSQLGrammar: true
supportsMixedCaseIdentifiers: false
supportsMixedCaseQuotedIdentifiers: true
supportsMultipleResultSets: false
supportsMultipleTransactions: true
supportsNonNullableColumns: true
supportsOpenCursorsAcrossCommit: false
supportsOpenCursorsAcrossRollback: false
supportsOpenStatementsAcrossCommit: true
supportsOpenStatementsAcrossRollback: true
supportsOrderByUnrelated: true
supportsOuterJoins: true
supportsPositionedDelete: true
supportsPositionedUpdate: true
supportsSchemasInDataManipulation: true
supportsSchemasInIndexDefinitions: true
supportsSchemasInPrivilegeDefinitions: true
supportsSchemasInProcedureCalls: true
supportsSchemasInTableDefinitions: true
supportsSelectForUpdate: true
supportsStoredProcedures: false
supportsSubqueriesInComparisons: true
supportsSubqueriesInExists: true
supportsSubqueriesInIns: true
supportsSubqueriesInQuantifieds: true
supportsTableCorrelationNames: true
supportsTransactions: true
supportsUnion: true
supportsUnionAll: true
usesLocalFilePerTable: false
usesLocalFiles: true
allProceduresAreCallable: true
allTablesAreSelectable: true
dataDefinitionCausesTransactionCommit: true
dataDefinitionIgnoredInTransactions: false
doesMaxRowSizeIncludeBlobs: false
supportsBatchUpdates: true
526 db TRACE [main] openjpa.jdbc.JDBC - Initial connection autoCommit: true, holdability: 1, TransactionIsolation: 2
528 db TRACE [main] openjpa.jdbc.JDBC - <t 421134813, conn 2054185226> [0 ms] close
580 db TRACE [main] openjpa.Runtime - Found datasource1: datasource 1344706967 from configuration. StoreContext: org.apache.openjpa.kernel.FinalizingBrokerImpl@359ecd80
590 db TRACE [main] openjpa.MetaData - Scanning resource "META-INF/orm.xml" for persistent types.
591 db TRACE [main] openjpa.MetaData - The persistent unit root url is "null"
591 db TRACE [main] openjpa.MetaData - parsePersistentTypeNames() found [openjpatest.Group, openjpatest.Organization, openjpatest.AddressBook].
591 db TRACE [main] openjpa.MetaData - Found 3 classes with metadata in 4 milliseconds.
619 db TRACE [main] openjpa.Enhance - org.apache.openjpa.enhance.InstrumentationFactory.findToolsJar() -- couldn't find /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/tools.jar
620 db INFO [main] openjpa.Enhance - Creating subclass for "[class openjpatest.Group, class openjpatest.Organization, class openjpatest.AddressBook]". This means that your application will be less efficient and will consume more memory than it would if you ran the OpenJPA enhancer. Additionally, lazy loading will not be available for one-to-one and many-to-one persistent attributes in types using field access; they will be loaded eagerly instead.
645 db TRACE [main] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
645 db TRACE [main] openjpa.MetaData - Using metadata factory "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@643cb075".
645 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Group" under mode "[META]".
646 db TRACE [main] openjpa.MetaData - Scanning resource "META-INF/orm.xml" for persistent types.
646 db TRACE [main] openjpa.MetaData - The persistent unit root url is "null"
646 db TRACE [main] openjpa.MetaData - parsePersistentTypeNames() found [openjpatest.Group, openjpatest.Organization, openjpatest.AddressBook].
646 db TRACE [main] openjpa.MetaData - Found 3 classes with metadata in 1 milliseconds.
696 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Group".
697 db TRACE [main] openjpa.MetaData - Parsing package "openjpatest.Group".
711 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Group".
711 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
748 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Group" to "null".
750 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Group@471860896".
750 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.id".
757 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.name".
757 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.organization".
757 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.Organization" under mode "[META]".
757 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.Organization".
757 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.Organization".
757 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
764 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.Organization" to "null".
764 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.version".
765 db TRACE [main] openjpa.MetaData - Resolving metadata for "openjpatest.Organization@92700153".
765 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@92700153.addressBook".
765 db TRACE [main] openjpa.MetaData - Loading metadata for "class openjpatest.AddressBook" under mode "[META]".
765 db TRACE [main] openjpa.MetaData - Parsing class "openjpatest.AddressBook".
766 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.AddressBook".
766 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
773 db TRACE [main] openjpa.MetaData - Generating default metadata for type "openjpatest.EmailAddress".
773 db TRACE [main] openjpa.MetaData - Using reflection for metadata generation.
773 db TRACE [main] openjpa.MetaData - Set persistence-capable superclass of "openjpatest.AddressBook" to "null".
773 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Organization@92700153.hostNames".
773 db TRACE [main] openjpa.MetaData - Resolving embedded metadata for "java.lang.Object@259650411".
775 db TRACE [main] openjpa.MetaData - Preparing mapping for "openjpatest.Group".
778 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.id".
783 db TRACE [main] openjpa.MetaData - "id" has mapping strategy "org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy".
784 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.name".
784 db TRACE [main] openjpa.MetaData - "name" has mapping strategy "org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy".
784 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.version".
784 db TRACE [main] openjpa.MetaData - "version" has mapping strategy "none".
787 db TRACE [main] openjpa.MetaData - "openjpatest.Group<discriminator>" has mapping strategy "value-map".
788 db TRACE [main] openjpa.MetaData - "openjpatest.Group<version>" has mapping strategy "version-number".
788 db TRACE [main] openjpa.MetaData - Resolving mapping for "openjpatest.Group@471860896".
788 db TRACE [main] openjpa.MetaData - "openjpatest.Group" has mapping strategy "full".
788 db TRACE [main] openjpa.MetaData - Resolving field "openjpatest.Group@471860896.organization".
Exception in thread "main" <openjpa-2.0.1-r422266:989424 fatal user error> org.apache.openjpa.persistence.ArgumentException: Errors encountered while resolving metadata. See nested exceptions for details.
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:642)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:256)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:227)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:195)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:317)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:241)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:215)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
Caused by: <openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: No metadata was found for type "class java.lang.Object". The class is not enhanced.
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:377)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1821)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
at org.apache.openjpa.meta.ValueMetaDataImpl.resolve(ValueMetaDataImpl.java:435)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolve(ValueMappingImpl.java:494)
at org.apache.openjpa.meta.FieldMetaData.resolve(FieldMetaData.java:1732)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:458)
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1852)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1786)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:790)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:693)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:617)
... 14 more
NestedThrowables:
<openjpa-2.0.1-r422266:989424 fatal user error> org.apache.openjpa.persistence.ArgumentException: Unable to resolve type "openjpatest.AddressBook" due to previous errors resolving related type "openjpatest.Organization".
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:804)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:693)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:617)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:256)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:227)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:195)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:317)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:241)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:215)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
java.lang.NullPointerException
at org.apache.openjpa.jdbc.meta.MappingInfo.mergeJoinColumn(MappingInfo.java:1514)
at org.apache.openjpa.jdbc.meta.MappingInfo.createJoins(MappingInfo.java:1322)
at org.apache.openjpa.jdbc.meta.MappingInfo.createForeignKey(MappingInfo.java:1084)
at org.apache.openjpa.jdbc.meta.ValueMappingInfo.getTypeJoin(ValueMappingInfo.java:115)
at org.apache.openjpa.jdbc.meta.ValueMappingInfo.getTypeJoin(ValueMappingInfo.java:92)
at org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.map(RelationFieldStrategy.java:167)
at org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java:146)
at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:82)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:496)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:461)
at org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.java:853)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1791)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:790)
at org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataRepository.java:751)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:631)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:256)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:227)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:195)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:134)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:317)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:241)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:215)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at openjpatest.Main.main(Main.java:17)
Process finished with exit code 1
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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
>
> Attachments: openjpatest.tar.gz
>
>
> I am encountering a NPE at MappingInfo.java 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.
[jira] Work started: (OPENJPA-1804) NPE in MappingInfo.java line
1514
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on OPENJPA-1804 started by Donald Woods.
> NPE in MappingInfo.java line 1514
> ---------------------------------
>
> Key: OPENJPA-1804
> URL: https://issues.apache.org/jira/browse/OPENJPA-1804
> 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 MappingInfo.java 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.