You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Craig L Russell <Cr...@Sun.COM> on 2007/01/09 06:01:24 UTC
Troubleshooting help
Hi,
I got this stack trace. Any ideas how to troubleshoot?
Thanks,
Craig
[java] <0|false|0.9.6-incubating>
org.apache.openjpa.persistence.PersistenceException: null
[java] at org.apache.openjpa.kernel.BrokerImpl.find
(BrokerImpl.java:851)
[java] at org.apache.openjpa.kernel.BrokerImpl.find
(BrokerImpl.java:743)
[java] at org.apache.openjpa.kernel.DelegatingBroker.find
(DelegatingBroker.java:169)
[java] at
org.apache.openjpa.persistence.EntityManagerImpl.find
(EntityManagerImpl.java:320)
[java] at pb.adapter.EJB3Adapter.lookupComponent
(EJB3Adapter.java:254)
[java] at pb.common.InternalDriver.lookupComponent
(InternalDriver.java:322)
[java] at pb.common.InternalDriver.createRelationships
(InternalDriver.java:285)
[java] at pb.OCDriver.createRelationships(OCDriver.java:114)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0
(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:585)
[java] at com.sun.faban.driver.core.AgentThread.timeRun
(AgentThread.java:194)
[java] at com.sun.faban.driver.core.AgentThread.run
(AgentThread.java:123)
[java] Caused by: java.lang.NumberFormatException: null
[java] at java.lang.Integer.parseInt(Integer.java:415)
[java] at java.lang.Integer.parseInt(Integer.java:497)
[java] at pb.common.Component.pcsetId(Component.java:95)
[java] at pb.common.Component.pcClearFields(Component.java)
[java] at pb.common.Component.pcNewInstance(Component.java)
[java] at org.apache.openjpa.enhance.PCRegistry.newInstance
(PCRegistry.java:117)
[java] at
org.apache.openjpa.kernel.StateManagerImpl.initialize
(StateManagerImpl.java:247)
[java] at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState
(JDBCStoreManager.java:327)
[java] at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize
(JDBCStoreManager.java:252)
[java] at
org.apache.openjpa.kernel.DelegatingStoreManager.initialize
(DelegatingStoreManager.java:108)
[java] at
org.apache.openjpa.kernel.ROPStoreManager.initialize
(ROPStoreManager.java:54)
[java] at org.apache.openjpa.kernel.BrokerImpl.initialize
(BrokerImpl.java:870)
[java] at org.apache.openjpa.kernel.BrokerImpl.find
(BrokerImpl.java:828)
[java] ... 13 more
This was after lots of warnings, but they didn't look related:
[java] PersistenceDriver::initProperties:ejb30:true
[java] 5490 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing class "pb.common.Assembly".
[java] 5492 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing package "pb.common.Assembly".
[java] 5720 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing query "findRangeassembly".
[java] 5746 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing query "findAssemblyByBOM".
[java] 5783 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing class "pb.common.BOM".
[java] 5949 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing class "pb.common.Component".
[java] 6012 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing query "findRangecomponent".
[java] 6049 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Parsing class "pb.common.Supplier".
[java] 6222 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
- Detected the following possible violations of the restrictions
placed on property access persistent types:
[java] "pb.common.Assembly" uses property access, but its field
"purchased" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"planner" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"description" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"planner" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"id" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"boms" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"version" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"version" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"boms" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"lomark" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"himark" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"revision" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"id" is accessed directly in method "setId" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"type" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"description" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"himark" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"planner" is accessed directly in method "setId" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"id" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"purchased" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"type" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"name" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"name" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"revision" is accessed directly in method "readObject" defined in
"pb.common.Assembly".
[java] "pb.common.Assembly" uses property access, but its field
"lomark" is accessed directly in method "writeObject" defined in
"pb.common.Assembly".
[java] 7184 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
- Detected the following possible violations of the restrictions
placed on property access persistent types:
[java] "pb.common.Component" uses property access, but its
field "type" is accessed directly in method "writeObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "revision" is accessed directly in method "readObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "description" is accessed directly in method "readObject"
defined in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "revision" is accessed directly in method "writeObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "planner" is accessed directly in method "writeObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "lomark" is accessed directly in method "readObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "id" is accessed directly in method "writeObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "type" is accessed directly in method "readObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "id" is accessed directly in method "setId" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "suppliers" is accessed directly in method "writeObject"
defined in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "lomark" is accessed directly in method "writeObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "planner" is accessed directly in method "readObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "description" is accessed directly in method "writeObject"
defined in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "purchased" is accessed directly in method "readObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "planner" is accessed directly in method "setId" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "purchased" is accessed directly in method "writeObject"
defined in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "name" is accessed directly in method "writeObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "version" is accessed directly in method "readObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "suppliers" is accessed directly in method "readObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "himark" is accessed directly in method "readObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "id" is accessed directly in method "readObject" defined in
"pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "himark" is accessed directly in method "writeObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "version" is accessed directly in method "writeObject" defined
in "pb.common.Component".
[java] "pb.common.Component" uses property access, but its
field "name" is accessed directly in method "readObject" defined in
"pb.common.Component".
[java] s_dbAdapterClass:pb.adapter.EJB3ToplinkAdapter
[java] 114 INFO [OCDriverAllOpsAgent[0].0] openjpa.Runtime -
Starting OpenJPA 0.9.6-incubating
[java] 347 INFO [OCDriverAllOpsAgent[0].0] openjpa.jdbc.JDBC
- Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
[java] 1408 INFO [OCDriverAllOpsAgent[0].0] openjpa.MetaData
- Found 4 classes with metadata in 1 milliseconds.
[java] 9368 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
- Detected the following possible violations of the restrictions
placed on property access persistent types:
[java] "pb.common.Supplier" uses property access, but its field
"components" is accessed directly in method "writeObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"name" is accessed directly in method "readObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"version" is accessed directly in method "writeObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"name" is accessed directly in method "writeObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"id" is accessed directly in method "readObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"version" is accessed directly in method "readObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"components" is accessed directly in method "readObject" defined in
"pb.common.Supplier".
[java] "pb.common.Supplier" uses property access, but its field
"id" is accessed directly in method "writeObject" defined in
"pb.common.Supplier".
[java] 9537 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
- Detected the following possible violations of the restrictions
placed on property access persistent types:
[java] "pb.common.BOM" uses property access, but its field
"assembly" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"opsNo" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"version" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"qty" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"qty" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"engChange" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"version" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"component" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"assembly" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"engChange" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"opsDesc" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"opsDesc" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"lineNo" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"component" is accessed directly in method "readObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"lineNo" is accessed directly in method "writeObject" defined in
"pb.common.BOM".
[java] "pb.common.BOM" uses property access, but its field
"opsNo" is accessed directly in method "readObject" defined in
"pb.common.BOM".
Craig Russell
DB PMC
clr@apache.org http://db.apache.org/jdo
Re: Troubleshooting help
Posted by Marc Prud'hommeaux <mp...@apache.org>.
Craig-
It sounds like we are initializing an int field, but we are reading
null from the database.
Can you check the database to see if there are any nulls in the
column to which the "id" field is being mapped?
Also, if you change the field type from "int" to "Integer", do you
get the same error?
On Jan 8, 2007, at 9:01 PM, Craig L Russell wrote:
> Hi,
>
> I got this stack trace. Any ideas how to troubleshoot?
>
> Thanks,
>
> Craig
> [java] <0|false|0.9.6-incubating>
> org.apache.openjpa.persistence.PersistenceException: null
> [java] at org.apache.openjpa.kernel.BrokerImpl.find
> (BrokerImpl.java:851)
> [java] at org.apache.openjpa.kernel.BrokerImpl.find
> (BrokerImpl.java:743)
> [java] at org.apache.openjpa.kernel.DelegatingBroker.find
> (DelegatingBroker.java:169)
> [java] at
> org.apache.openjpa.persistence.EntityManagerImpl.find
> (EntityManagerImpl.java:320)
> [java] at pb.adapter.EJB3Adapter.lookupComponent
> (EJB3Adapter.java:254)
> [java] at pb.common.InternalDriver.lookupComponent
> (InternalDriver.java:322)
> [java] at pb.common.InternalDriver.createRelationships
> (InternalDriver.java:285)
> [java] at pb.OCDriver.createRelationships(OCDriver.java:114)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0
> (Native Method)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
> [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
> [java] at java.lang.reflect.Method.invoke(Method.java:585)
> [java] at com.sun.faban.driver.core.AgentThread.timeRun
> (AgentThread.java:194)
> [java] at com.sun.faban.driver.core.AgentThread.run
> (AgentThread.java:123)
> [java] Caused by: java.lang.NumberFormatException: null
> [java] at java.lang.Integer.parseInt(Integer.java:415)
> [java] at java.lang.Integer.parseInt(Integer.java:497)
> [java] at pb.common.Component.pcsetId(Component.java:95)
> [java] at pb.common.Component.pcClearFields(Component.java)
> [java] at pb.common.Component.pcNewInstance(Component.java)
> [java] at org.apache.openjpa.enhance.PCRegistry.newInstance
> (PCRegistry.java:117)
> [java] at
> org.apache.openjpa.kernel.StateManagerImpl.initialize
> (StateManagerImpl.java:247)
> [java] at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState
> (JDBCStoreManager.java:327)
> [java] at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize
> (JDBCStoreManager.java:252)
> [java] at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize
> (DelegatingStoreManager.java:108)
> [java] at
> org.apache.openjpa.kernel.ROPStoreManager.initialize
> (ROPStoreManager.java:54)
> [java] at org.apache.openjpa.kernel.BrokerImpl.initialize
> (BrokerImpl.java:870)
> [java] at org.apache.openjpa.kernel.BrokerImpl.find
> (BrokerImpl.java:828)
> [java] ... 13 more
>
> This was after lots of warnings, but they didn't look related:
> [java] PersistenceDriver::initProperties:ejb30:true
> [java] 5490 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing class "pb.common.Assembly".
> [java] 5492 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing package "pb.common.Assembly".
> [java] 5720 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing query "findRangeassembly".
> [java] 5746 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing query "findAssemblyByBOM".
> [java] 5783 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing class "pb.common.BOM".
> [java] 5949 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing class "pb.common.Component".
> [java] 6012 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing query "findRangecomponent".
> [java] 6049 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Parsing class "pb.common.Supplier".
> [java] 6222 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
> - Detected the following possible violations of the restrictions
> placed on property access persistent types:
> [java] "pb.common.Assembly" uses property access, but its
> field "purchased" is accessed directly in method "writeObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "planner" is accessed directly in method "readObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "description" is accessed directly in method "writeObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "planner" is accessed directly in method "writeObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "id" is accessed directly in method "readObject" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "boms" is accessed directly in method "writeObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "version" is accessed directly in method "writeObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "version" is accessed directly in method "readObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "boms" is accessed directly in method "readObject" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "lomark" is accessed directly in method "readObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "himark" is accessed directly in method "writeObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "revision" is accessed directly in method "writeObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "id" is accessed directly in method "setId" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "type" is accessed directly in method "readObject" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "description" is accessed directly in method "readObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "himark" is accessed directly in method "readObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "planner" is accessed directly in method "setId" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "id" is accessed directly in method "writeObject" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "purchased" is accessed directly in method "readObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "type" is accessed directly in method "writeObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "name" is accessed directly in method "readObject" defined in
> "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "name" is accessed directly in method "writeObject" defined
> in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "revision" is accessed directly in method "readObject"
> defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but its
> field "lomark" is accessed directly in method "writeObject" defined
> in "pb.common.Assembly".
> [java] 7184 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
> - Detected the following possible violations of the restrictions
> placed on property access persistent types:
> [java] "pb.common.Component" uses property access, but its
> field "type" is accessed directly in method "writeObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "revision" is accessed directly in method "readObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "description" is accessed directly in method "readObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "revision" is accessed directly in method "writeObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "planner" is accessed directly in method "writeObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "lomark" is accessed directly in method "readObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "id" is accessed directly in method "writeObject" defined in
> "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "type" is accessed directly in method "readObject" defined in
> "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "id" is accessed directly in method "setId" defined in
> "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "suppliers" is accessed directly in method "writeObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "lomark" is accessed directly in method "writeObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "planner" is accessed directly in method "readObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "description" is accessed directly in method "writeObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "purchased" is accessed directly in method "readObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "planner" is accessed directly in method "setId" defined in
> "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "purchased" is accessed directly in method "writeObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "name" is accessed directly in method "writeObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "version" is accessed directly in method "readObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "suppliers" is accessed directly in method "readObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "himark" is accessed directly in method "readObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "id" is accessed directly in method "readObject" defined in
> "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "himark" is accessed directly in method "writeObject" defined
> in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "version" is accessed directly in method "writeObject"
> defined in "pb.common.Component".
> [java] "pb.common.Component" uses property access, but its
> field "name" is accessed directly in method "readObject" defined in
> "pb.common.Component".
> [java] s_dbAdapterClass:pb.adapter.EJB3ToplinkAdapter
> [java] 114 INFO [OCDriverAllOpsAgent[0].0] openjpa.Runtime
> - Starting OpenJPA 0.9.6-incubating
> [java] 347 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.jdbc.JDBC - Using dictionary class
> "org.apache.openjpa.jdbc.sql.DerbyDictionary".
> [java] 1408 INFO [OCDriverAllOpsAgent[0].0]
> openjpa.MetaData - Found 4 classes with metadata in 1 milliseconds.
> [java] 9368 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
> - Detected the following possible violations of the restrictions
> placed on property access persistent types:
> [java] "pb.common.Supplier" uses property access, but its
> field "components" is accessed directly in method "writeObject"
> defined in "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "name" is accessed directly in method "readObject" defined in
> "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "version" is accessed directly in method "writeObject"
> defined in "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "name" is accessed directly in method "writeObject" defined
> in "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "id" is accessed directly in method "readObject" defined in
> "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "version" is accessed directly in method "readObject" defined
> in "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "components" is accessed directly in method "readObject"
> defined in "pb.common.Supplier".
> [java] "pb.common.Supplier" uses property access, but its
> field "id" is accessed directly in method "writeObject" defined in
> "pb.common.Supplier".
> [java] 9537 WARN [OCDriverAllOpsAgent[0].0] openjpa.Enhance
> - Detected the following possible violations of the restrictions
> placed on property access persistent types:
> [java] "pb.common.BOM" uses property access, but its field
> "assembly" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "opsNo" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "version" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "qty" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "qty" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "engChange" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "version" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "component" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "assembly" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "engChange" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "opsDesc" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "opsDesc" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "lineNo" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "component" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "lineNo" is accessed directly in method "writeObject" defined in
> "pb.common.BOM".
> [java] "pb.common.BOM" uses property access, but its field
> "opsNo" is accessed directly in method "readObject" defined in
> "pb.common.BOM".
>
> Craig Russell
> DB PMC
> clr@apache.org http://db.apache.org/jdo
>
>
Property access validation rules (was: RE: Troubleshooting help)
Posted by Patrick Linskey <pl...@bea.com>.
> -----Original Message-----
> From: Craig.Russell@Sun.COM [mailto:Craig.Russell@Sun.COM]
> Sent: Monday, January 08, 2007 9:01 PM
> To: open-jpa-dev@incubator.apache.org
> Subject: Troubleshooting help
>
> ...
>
> [java] 6222 WARN [OCDriverAllOpsAgent[0].0]
> openjpa.Enhance - Detected the following possible violations
> of the restrictions placed on property access persistent types:
> [java] "pb.common.Assembly" uses property access, but
> its field "purchased" is accessed directly in method
> "writeObject" defined in "pb.common.Assembly".
> [java] "pb.common.Assembly" uses property access, but
> its field "planner" is accessed directly in method
> "readObject" defined in "pb.common.Assembly".
I understand that writeObject() should not be using fields directly, but
it would seem to me that it's fine for readObject() to set fields
directly, since readObject() is (presumably) only invoked during
deserialization, and during deserialization an instance cannot be
managed.
It would seem that we should special-case 'void
readObject(ObjectOutputStream)', 'Object readResolve()', and
'Externalizable.readExternal(ObjectInput)'.
Also, given the text in 2.1.1 of the JPA spec:
"If property-based access is used and lazy fetching is
specified, portable applications should not directly
access the entity state underlying the property methods
of managed instances until after it has been fetched by
the persistence provider."
we might want to not generate warnings for read access to fields that
are in the default fetch group.
Thoughts?
-Patrick
_______________________________________________________________________
Notice: This email message, together with any attachments, may contain
information of BEA Systems, Inc., its subsidiaries and affiliated
entities, that may be confidential, proprietary, copyrighted and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.