• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: SQL Generation Issue
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SQL Generation Issue


  • Subject: Re: SQL Generation Issue
  • From: Chuck Hill <email@hidden>
  • Date: Thu, 24 Apr 2014 16:29:59 +0000
  • Thread-topic: SQL Generation Issue

On 2014-04-24, 8:05 AM, "David Avendasora" wrote:

Lack of good code hygiene beyond pretty formatting has now bit me.

I should have had the following like a real developer:

protected static ERXEnterpriseObjectCache<Airport> cacheByPrimaryKey = null;

protected static ERXEnterpriseObjectCache<Airport> cacheByPrimaryKey() {
If (cacheByPrimaryKey == null) {
// could add some double checked locking here if you want
cacheByPrimaryKey = new ERXEnterpriseObjectCache<Airport>(Airport.ENTITY_NAME,
                                                                  "primaryKey", // Cache Key
                                                                   null,         // qualifier
                                                                   300000L,      // timeout - 0=never
                                                                   true,         // shouldRetainObjects
                                                                   true,         // shouldFetchInitialValues
                                                                   false);       // shouldReturnUnsavedObjects
}
return cacheByPrimaryKey;
}

:-P

true,         // shouldFetchInitialValues

This does a fetch, which requires EOF to be fully setup.   That is not a good thing to do in a static init block.  But I guess that is obvious now.

Chuck

On 2014-04-24, 8:05 AM, "David Avendasora" wrote:

This is now biting me.

I have the following:

public static ERXEnterpriseObjectCache<Airport> cacheByPrimaryKey = new ERXEnterpriseObjectCache<Airport>(Airport.ENTITY_NAME,
                                                                                                          "primaryKey", // Cache Key
                                                                                                          null,         // qualifier
                                                                                                          300000L,      // timeout - 0=never
                                                                                                          true,         // shouldRetainObjects
                                                                                                          true,         // shouldFetchInitialValues
                                                                                                          false);       // shouldReturnUnsavedObjects

Which is tripping the same bug.

Why, oh why, does SQL generation need to initialize the EO’s class?? Shouldn’t the EOClassDescription or EOGenericRecord be enough? I don’t see what getting the actual class accomplishes, other than make SQL Generation more fragile. If ERXEnterpriseObjectCache breaks it, what else can?

Yes, I’m second-guessing Mike Schrag. (Hi Mike)

So, Mike, is this something that is possible to change (yes, I know it would be on me to do it - be afraid) or is there something about how the sql generation works that requires more than the Entity itself?

Thanks,

Dave


On Oct 26, 2011, at 5:19 PM, Chuck Hill <email@hidden> wrote:

The fundamental issue is that ERXEnterpriseObjectCache is intended to be used in a Wonder application, where those properties are read and used.  Generating SQL only loads the classes, it does not run in the context of a running WO application.

You probably DO want to retain the objects, you just don't want to initialize this in a static block.  Use lazy initialization so that the class can load without setting up the cache.


Chuck


On 2011-10-26, at 2:16 PM, Issam Maamria wrote:

Thanks Chuck for the pointer.

The issue was in a static initialiser that executes the following line in its call trace:
new ERXEnterpriseObjectCache<XXX>(entityName, XXX.NAME_KEY, null, CACHE_TIMEOUT, true, false, false);

I changed the argument 'shouldRetainObjects''s value from true to false, and it did the trick. 

However, I do not fully understand what was the fundamental issue!

Regards

Issam

On 26 October 2011 19:26, Chuck Hill <email@hidden> wrote:
Hi Issam,

It is a bad idea to do anything in the constructor of an EO, which I assume is what is happening here:


     at er.extensions.eof.ERXEnterpriseObjectCache.setRetainObjects(ERXEnterpriseObjectCache.java:789)
     at er.extensions.eof.ERXEnterpriseObjectCache.<init>(ERXEnterpriseObjectCache.java:201)
     at indoc.app.common.IDStaticTag.tagCacheForEntity(IDStaticTag.java:75)
     at indoc.app.common.IDStaticTag.<init>(IDStaticTag.java:61)
     at indoc.app.entities.Content.<clinit>(Content.java:39)

This can often cause EOF problems.  A better choice is to use lazy initialization.
http://en.wikipedia.org/wiki/Lazy_initialization


Chuck


On 2011-10-26, at 11:00 AM, Issam Maamria wrote:

Hi all,

Thank you very much for the pointers. They, however, were not the cause of the problem.

An interesting thing is that the following exception always happens before the one I mentioned before.

I have the following lines in my properties file:

# EOF

er.extensions.ERXEC.safeLocking=true

er.extensions.ERXEC.useSharedEditingContext=false

er.extensions.ERXEC.markOpenLocks = false

er.extensions.ERXEC.traceOpenLocks = false



er.extensions.ERXEnterpriseObject.applyRestrictingQualifierOnInsert=true

er.extensions.ERXEnterpriseObject.updateInverseRelationships=true

The trace is :

java.lang.ExceptionInInitializerError
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Class.java:169)
     at com.webobjects.foundation._NSUtilities._classWithPartialName(_NSUtilities.java:348)
     at com.webobjects.foundation._NSUtilities.classWithName(_NSUtilities.java:335)
     at com.webobjects.eoaccess.EOModel._setEntityForEntityNameClassName(EOModel.java:1299)
     at com.webobjects.eoaccess.EOModel._addFakeEntityWithPropertyList(EOModel.java:1337)
     at com.webobjects.eoaccess.EOModel._initWithTableOfContentsPropertyListPathURL(EOModel.java:1141)
     at com.webobjects.eoaccess.EOModel.<init>(EOModel.java:838)
     at com.webobjects.eoaccess.EOModelGroup.addModelWithPathURL(EOModelGroup.java:443)
     at org.objectstyle.wolips.eomodeler.core.sql.EOFSQLGenerator53.<init>(EOFSQLGenerator53.java:121)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     at org.objectstyle.wolips.eomodeler.core.sql.EOFSQLGeneratorFactory.sqlGenerator(EOFSQLGeneratorFactory.java:43)
     at org.objectstyle.wolips.eomodeler.actions.GenerateSQLDialog.generateSql(GenerateSQLDialog.java:297)
     at org.objectstyle.wolips.eomodeler.actions.GenerateSQLDialog$1.run(GenerateSQLDialog.java:279)
     at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.RuntimeException: ERXEnterpriseObjectCache requires automatic locking when objects are retained. Set er.extensions.ERXEC.defaultAutomaticLockUnlock or er.extensions.ERXEC.safeLocking in your Properties file
     at er.extensions.eof.ERXEnterpriseObjectCache.setRetainObjects(ERXEnterpriseObjectCache.java:789)
     at er.extensions.eof.ERXEnterpriseObjectCache.<init>(ERXEnterpriseObjectCache.java:201)
     at indoc.app.common.IDStaticTag.tagCacheForEntity(IDStaticTag.java:75)
     at indoc.app.common.IDStaticTag.<init>(IDStaticTag.java:61)
     at indoc.app.entities.Content.<clinit>(Content.java:39)
     ... 18 more

Regards

Issam

On 26 October 2011 16:51, Chuck Hill <email@hidden> wrote:
static initialization blocks can also cause problems for SQL generation - check that they are not throwing exceptions.

On 2011-10-26, at 7:15 AM, John Huss wrote:

The classes that you declare for you entities must be reachable from the project where the model is located, usually in the same project.

On Wed, Oct 26, 2011 at 6:19 AM, Issam Maamria <email@hidden> wrote:
Hi all,

I have an issue with SQL generation from an EOModel. The thing is it sometimes works (this happens randomly), and most of the time comes up with an error:

java.lang.NoClassDefFoundError: Could not initialize class XXXXXXXX
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Class.java:169)
     at com.webobjects.foundation._NSUtilities._classWithPartialName(_NSUtilities.java:348)
     at com.webobjects.foundation._NSUtilities.classWithName(_NSUtilities.java:335)
     at com.webobjects.eoaccess.EOModel._setEntityForEntityNameClassName(EOModel.java:1299)
     at com.webobjects.eoaccess.EOModel._addFakeEntityWithPropertyList(EOModel.java:1337)
     at com.webobjects.eoaccess.EOModel._initWithTableOfContentsPropertyListPathURL(EOModel.java:1141)
     at com.webobjects.eoaccess.EOModel.<init>(EOModel.java:838)
     at com.webobjects.eoaccess.EOModelGroup.addModelWithPathURL(EOModelGroup.java:443)
     at org.objectstyle.wolips.eomodeler.core.sql.EOFSQLGenerator53.<init>(EOFSQLGenerator53.java:121)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     at org.objectstyle.wolips.eomodeler.core.sql.EOFSQLGeneratorFactory.sqlGenerator(EOFSQLGeneratorFactory.java:43)
     at org.objectstyle.wolips.eomodeler.actions.GenerateSQLDialog.generateSql(GenerateSQLDialog.java:297)
     at org.objectstyle.wolips.eomodeler.actions.GenerateSQLDialog$1.run(GenerateSQLDialog.java:279)
     at java.lang.Thread.run(Thread.java:680)

SQL generation is a GREAT feature, and it is frustrating that I cannot get it to work on a consistent basis.

Regards

Issam

------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
Wonder-disc mailing list
email@hidden
https://lists.sourceforge.net/lists/listinfo/wonder-disc


------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev_______________________________________________
Wonder-disc mailing list
email@hidden
https://lists.sourceforge.net/lists/listinfo/wonder-disc

--
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/products/practical_webobjects








------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev_______________________________________________
Wonder-disc mailing list
email@hidden
https://lists.sourceforge.net/lists/listinfo/wonder-disc

--
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/products/practical_webobjects








------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev_______________________________________________
Wonder-disc mailing list
email@hidden
https://lists.sourceforge.net/lists/listinfo/wonder-disc

-- 
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.    
http://www.global-village.net/products/practical_webobjects








------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
Wonder-disc mailing list
email@hidden
https://lists.sourceforge.net/lists/listinfo/wonder-disc




—————————————————————————————
WebObjects - so easy that even Dave Avendasora can do it!™
—————————————————————————————
David Avendasora
Senior Software Abuser
Nekesto, Inc.





 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

References: 
 >Re: SQL Generation Issue (From: David Avendasora <email@hidden>)

  • Prev by Date: Re: [Wonder-disc] SQL Generation Issue
  • Next by Date: Re: SQL Generation Issue
  • Previous by thread: Re: [Wonder-disc] SQL Generation Issue
  • Next by thread: Entity Modeler standalone
  • Index(es):
    • Date
    • Thread