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.