Yeah i was thinking we should should default this as well. I can't think of a 
reason, offhand, to not want this all the time.

ms

On Nov 12, 2009, at 4:42 PM, Anjo Krank wrote:

> "Hacky"... what a strange word. 
> 
>> # er.extensions.ERXJDBCAdaptor.className=er.extensions.jdbc.ERXJDBCAdaptor
> 
> I think we can set this as the default further on. In particular as this also 
> fixes the §$% SQL-Error-messes-up-DBCs issues.
> 
> Cheers, Anjo
> 
> 
> 
> Am 12.11.2009 um 20:10 schrieb Mike Schrag:
> 
>> I would add a stack trace into dataBaseChannelNeeded in 
>> ERXAdaptorChannelDelegate to get the stack of exactly where it's called ... 
>> my first thought was jdbc2Info, too, but I thought I fixed this a couple 
>> years ago.
>> 
>> Ah .. That's done in ERXJDBCAdaptor, which is only used if you explicitly 
>> set it:
>> 
>> ## Class name to use instead of the JDBCAdaptor, the ERXJDBCAdaptor supports
>> ## connection pooling
>> # er.extensions.ERXJDBCAdaptor.className=er.extensions.jdbc.ERXJDBCAdaptor
>> 
>> See if that does anything for you. The fix for closing that connection is 
>> REALLY hacky. My favorite part is how I didn't put a SINGLE comment on the 
>> code that does it. Old me hated future me, though.
>> 
>>>     protected JDBCContext _cachedAdaptorContext() {
>>>             if (_cachedContext == null) {
>>>                     _cachedContext = createJDBCContext();
>>>             }
>>>             return _cachedContext;
>>>     }
>>> 
>>>     protected NSDictionary jdbcInfo() {
>>>             boolean closeCachedContext = (_cachedContext == null && 
>>> _jdbcInfo == null);
>>>             NSDictionary jdbcInfo = super.jdbcInfo();
>>>             if (closeCachedContext && _cachedContext != null) {
>>>                     _cachedContext.disconnect();
>>>                     _cachedContext = null;
>>>             }
>>>             return jdbcInfo;
>>>     }
>>> 
>>>     protected NSDictionary typeInfo() {
>>>             boolean closeCachedContext = (_cachedContext == null && 
>>> _jdbcInfo == null);
>>>             NSDictionary typeInfo = super.typeInfo();
>>>             if (closeCachedContext && _cachedContext != null) {
>>>                     _cachedContext.disconnect();
>>>                     _cachedContext = null;
>>>             }
>>>             return typeInfo;
>>>     }
>>> 
>>>     public Context createJDBCContext() {
>>>             Context context = new Context(this);
>>>             return context;
>>>     }
>>> 
>>>     public EOAdaptorContext createAdaptorContext() {
>>>             EOAdaptorContext context;
>>>             if (_cachedContext != null) {
>>>                     context = _cachedContext;
>>>                     _cachedContext = null;
>>>             }
>>>             else {
>>>                     context = createJDBCContext();
>>>             }
>>>             return context;
>>>     }
>> 
>> On Nov 12, 2009, at 2:00 PM, Chuck Hill wrote:
>> 
>>> On Nov 11, 2009, at 6:06 PM, Kieran Kelleher wrote:
>>> 
>>>> OK, if Jeff Schmitz is going to resurrect an old thread today, then so am 
>>>> I ;-)
>>> 
>>> :-P
>>> 
>>> 
>>>> OK, I use Wonder (like driving with a seatbelt on) ... anyhow, I use 
>>>> ERXObjectStoreCoordinator exclusively (even for the default OSC) and I can 
>>>> confirm that each time I open a new ERXOSC (passing true - to close conns 
>>>> on dispose - in the boolean param constructor), two connections are 
>>>> created. Then when I dispose, one is closed and the other is left open.
>>> 
>>> One connection is expected.  The other I would expect to be fetching 
>>> JDBC2Info data for one or more models lacking this.  That connection does 
>>> not get closed properly by EOF.  As I noted before, Mr. Schrag tracked this 
>>> down and is closing it in some piece of code.  Where that code is, I do not 
>>> know.  Mike, you there?
>>> 
>>> 
>>> Chuck
>>> 
>>> 
>>> 
>>>> In this example, connection id's 3 and 4 are created as follows:
>>>> 
>>>>                  3 Connect     w3b0bj3...@localhost on cheetah
>>>>                  3 Query       SHOW SESSION VARIABLES
>>>>                  3 Query       SHOW COLLATION
>>>>                  3 Query       SET character_set_results = NULL
>>>>                  3 Query       SET autocommit=1
>>>>                  3 Query       SET 
>>>> sql_mode='STRICT_ALL_TABLES,STRICT_TRANS_TABLES'
>>>>                  3 Query       SELECT @@session.tx_isolation
>>>>                  3 Query       SET autocommit=0
>>>>                  4 Connect     w3b0bj3...@localhost on cheetah
>>>>                  4 Query       SHOW SESSION VARIABLES
>>>>                  4 Query       SHOW COLLATION
>>>>                  4 Query       SET character_set_results = NULL
>>>>                  4 Query       SET autocommit=1
>>>>                  4 Query       SET 
>>>> sql_mode='STRICT_ALL_TABLES,STRICT_TRANS_TABLES'
>>>>                  4 Query       SELECT @@session.tx_isolation
>>>>                  4 Query       SET autocommit=0
>>>> 
>>>> Connection #3 is the one that is actually used by EOF throughout EOF 
>>>> operations during the life of the ERXOSC.
>>>> 
>>>> After using the OSC and calling dispose, #3 gets closed by ERXOSC and #4 
>>>> remains.
>>>> 
>>>> The statements above are identical when both connections are opened, and 
>>>> the ones shown for #4 are all there is for #4.... not another single 
>>>> statement.
>>>> 
>>>> Any thoughts on how we can get both connections closed when the ERXOSC is 
>>>> disposed of?
>>>> 
>>>> Regards, Kieran
>>>> 
>>>> 
>>>> 
>>>> On Jul 7, 2008, at 6:12 PM, Chuck Hill wrote:
>>>> 
>>>>> 
>>>>> On Jul 7, 2008, at 2:38 PM, Klaus Berkling wrote:
>>>>> 
>>>>>> 
>>>>>> On Jul 2, 2008, at 4:50 PM, Chuck Hill wrote:
>>>>>> 
>>>>>>> 
>>>>>>> On Jul 1, 2008, at 2:41 PM, Klaus Berkling wrote:
>>>>>>> 
>>>>>>>> Hi all.
>>>>>>>> 
>>>>>>>> In my application I'm trying to use independent access layer stacks to 
>>>>>>>> open multiple database connections to the database.
>>>>>>>> I use this code:
>>>>>>>> 
>>>>>>>>   EOObjectStoreCoordinator parentObjectStore = new 
>>>>>>>> EOObjectStoreCoordinator();
>>>>>>>>   EOEditingContext editingContext = new 
>>>>>>>> EOEditingContext(parentObjectStore);
>>>>>>>>   setDefaultEditingContext(editingContext);
>>>>>>>> 
>>>>>>>> This looks like it's working in that it opens two new connection to 
>>>>>>>> the database when I start a new session. As expected.
>>>>>>> 
>>>>>>> If it is opening two, I'd expect one to be to get the JDBC2 Info and 
>>>>>>> the other for EOF to use to fetch data.  As Mike noted earlier, getting 
>>>>>>> EOF to close the JDBC 2 Info connection is tricky.  Can you get the DB 
>>>>>>> to log what is sent over each connection?  That should indicate if I am 
>>>>>>> right or not.
>>>>>> 
>>>>>> 
>>>>>> This is what shows up in the mysql log when my client connects:
>>>>>> 
>>>>>> 080707 14:27:10      67 Connect     xx...@yyyyyy on zzzzzzz
>>>>>>              67 Query       SET NAMES latin1
>>>>>>              67 Query       SET character_set_results = NULL
>>>>>>              67 Query       SHOW VARIABLES
>>>>>>              67 Query       SHOW COLLATION
>>>>>>              67 Query       SET autocommit=1
>>>>>>              67 Query       SHOW VARIABLES LIKE 'tx_isolation'
>>>>>>              67 Query       SET autocommit=0
>>>>>>              68 Connect     xx...@yyyyyy on zzzzzzz
>>>>>>              68 Query       SET NAMES latin1
>>>>>>              68 Query       SET character_set_results = NULL
>>>>>>              68 Query       SHOW VARIABLES
>>>>>>              68 Query       SHOW COLLATION
>>>>>>              68 Query       SET autocommit=1
>>>>>>              68 Query       SHOW VARIABLES LIKE 'tx_isolation'
>>>>>>              68 Query       SET autocommit=0
>>>>>> 
>>>>>> At logout from the client:
>>>>>> 
>>>>>> 080707 14:27:16      67 Prepare     [25] UPDATE RS_USER_SESSION SET 
>>>>>> LOUT_TIME = ? WHERE (USER_SESSION_PK = ? AND LOGIN_GROUP_NUM = ? AND 
>>>>>> LOGIN_STUDENT_PK is NULL)
>>>>>>              67 Execute     [25] UPDATE RS_USER_SESSION SET LOUT_TIME = 
>>>>>> '2008-07-07 14:30:06' WHERE (USER_SESSION_PK = '558446' AND 
>>>>>> LOGIN_GROUP_NUM = '1' AND LOGIN_STUDENT_PK is NULL)
>>>>>>              67 Query       commit
>>>>>>              67 Query       rollback
>>>>>>              67 Quit
>>>>>> 
>>>>>> There never is a Quit from 68.
>>>>> 
>>>>> It is hard to say from that, the jcbc2info request might not get logged 
>>>>> like this.  But my money is still on the jdbc2info connection.  It fits 
>>>>> all of the evidence.
>>>>> 
>>>>> Mike figured out how to close it, but I don't know where the code is  in 
>>>>> Wonder.  Hmmm, that might have been in Entity Modeler.
>>>>> 
>>>>> Mike?
>>>>> 
>>>>> 
>>>>> Chuck
>>>>> 
>>>>> 
>>>>>>>> When I'm terminate the session I use this code to close the connection 
>>>>>>>> to the database:
>>>>>>>> 
>>>>>>>> 'editingContext' is the session 'defaultEditingContext()'
>>>>>>>> 
>>>>>>>>   EOObjectStoreCoordinator parentObjectStore = 
>>>>>>>> (EOObjectStoreCoordinator)(editingContext.parentObjectStore());
>>>>>>>>   NSArray databaseContexts = 
>>>>>>>> parentObjectStore.cooperatingObjectStores();
>>>>>>>>   int contextCount = databaseContexts.count();
>>>>>>>> 
>>>>>>>>   for (int i = 0; i < contextCount; i++) {
>>>>>>>>       NSArray channels = 
>>>>>>>> ((EODatabaseContext)databaseContexts.objectAtIndex(i)).registeredChannels();
>>>>>>>>       int channelCount = channels.count();
>>>>>>>>       for (int j = 0; j < channelCount; j++) {
>>>>>>>>           //Make sure the channel you're trying to close isn't 
>>>>>>>> performing a transaction.
>>>>>>>>           if 
>>>>>>>> (!((EODatabaseChannel)channels.objectAtIndex(j)).adaptorChannel().adaptorContext().hasOpenTransaction())
>>>>>>>>  {
>>>>>>>>               
>>>>>>>> ((EODatabaseChannel)channels.objectAtIndex(j)).adaptorChannel().closeChannel();
>>>>>>>>           }
>>>>>>>>       }
>>>>>>>> 
>>>>>>>>   }
>>>>>>>> 
>>>>>>>> This closes one of the two database connection, not both.
>>>>>>>> 
>>>>>>>> Is there a way to detect the one extra connection or not open the 
>>>>>>>> extra connection in the first place?
>>>>>>>> 
>>>>>>>> WOnder may have resolved this issue but adding WOnder is a bigger 
>>>>>>>> undertaking then I originally expected.
>>>>>>>> Paraphrasing Lou Reed, I just want some of it, not all of it.
>>>>>>>> 
>>>>>>>> Thanks
>>>>>>>> 
>>>>>>>> kib
>>>>>>>> 
>>>>>>>> "Success is not final, failure is not fatal: it is the courage to 
>>>>>>>> continue that counts.”
>>>>>>>> - Winston Churchill
>>>>>>>> 
>>>>>>>> Klaus Berkling
>>>>>>>> Systems Administrator
>>>>>>>> DynEd International, Inc.
>>>>>>>> www.dyned.com | www.eskimo.com/~kiberkli
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>>> Webobjects-dev mailing list      ([email protected])
>>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>>>>>>> 
>>>>>>>> This email sent to [email protected]
>>>>>>> 
>>>>>>> -- 
>>>>>>> 
>>>>>>> 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
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Thanks
>>>>>> 
>>>>>> kib
>>>>>> 
>>>>>> "Success is not final, failure is not fatal: it is the courage to 
>>>>>> continue that counts.”
>>>>>> - Winston Churchill
>>>>>> 
>>>>>> Klaus Berkling
>>>>>> Systems Administrator
>>>>>> DynEd International, Inc.
>>>>>> www.dyned.com | www.eskimo.com/~kiberkli
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> -- 
>>>>> 
>>>>> 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
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Webobjects-dev mailing list      ([email protected])
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>> http://lists.apple.com/mailman/options/webobjects-dev/kieran_lists%40mac.com
>>>>> 
>>>>> This email sent to [email protected]
>>>> 
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      ([email protected])
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>>> 
>>>> This email sent to [email protected]
>>> 
>>> -- 
>>> 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
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40mdimension.com
>>> 
>>> This email sent to [email protected]
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/webobjects-dev/anjo%40krank.net
>> 
>> This email sent to [email protected]
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40mdimension.com
> 
> This email sent to [email protected]


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to