Skip to Content.
Sympa Menu

grouper-dev - Re: [grouper-dev] 2.1.2 hook writer not writing?

Subject: Grouper Developers Forum

List archive

Re: [grouper-dev] 2.1.2 hook writer not writing?


Chronological Thread 
  • From: Jim Fox <>
  • To: Chris Hyzer <>
  • Cc: Grouper Dev <>
  • Subject: Re: [grouper-dev] 2.1.2 hook writer not writing?
  • Date: Sat, 15 Dec 2012 12:10:30 -0800


Enabling them works for me. And that what I've done. So I'm fine.

There is a note in the properties file that seems to indicate nested
transactions are sometimes harmful and can be turned off without causing any
trouble. I don't really understand the situation well enough to know why I
would either enable or disable them. Maybe it's a documentation issue.

Jim

On Dec 15, 2012, at 10:55 AM, Chris Hyzer wrote:

> Jim,
>
> Thanks for your research in this one, it really helps a lot. Im trying to
> figure out what is happening, and basically the post commit hooks run in a
> transaction trigger, which actually runs in the same HibernateSession. So
> if you don't have nested transactions, then it thinks it is the same
> HibernateSession, but that transaction is closed. So... I think if you
> have a post commit hook you cant turn nested transactions off. I don't
> think you should turn that off in general. Anyways, I think we could fix
> this somehow with some complicated code, but I don't really think it is
> worth it, just enabled nested transactions... ok? :)
>
> Thanks,
> Chris
>
> -----Original Message-----
> From: Jim Fox
> [mailto:]
>
> Sent: Thursday, December 13, 2012 4:00 PM
> To: Chris Hyzer
> Cc: Grouper Dev
> Subject: RE: [grouper-dev] 2.1.2 hook writer not writing?
>
>
>
> Here's the trouble.
>
> There is new code in the HibernateSession constructor:
>
> //if we arent using nested transactions, then just use parent if there
> is one...
> if
> (!GrouperConfig.getPropertyBoolean("ddlutils.use.nestedTransactions", true)
> && parentHibernateSession != null) {
> grouperTransactionType =
> parentHibernateSession.getGrouperTransactionType();
> //we dont want new transactions... not sure what happens if none...
> hmm
> if (grouperTransactionType.isNewAutonomous()) {
> if (grouperTransactionType ==
> GrouperTransactionType.READ_WRITE_NEW) {
> grouperTransactionType =
> GrouperTransactionType.READ_WRITE_OR_USE_EXISTING;
> } else if (grouperTransactionType ==
> GrouperTransactionType.READONLY_NEW) {
> grouperTransactionType =
> GrouperTransactionType.READONLY_OR_USE_EXISTING;
> }
> }
> LOG.debug("Not using nested transactions, converting transaction type
> to: " + parentHibernateSession.getGrouperTransactionType());
> }
>
>
> That's causing the sessions obtained by the hook loop to be reused parents,
> instead of new. The parent's session appears to be already committed.
>
> If I set "ddlutils.use.nestedTransactions = true", to bypass the new code
> then I get new sessions and the hooks automatically complete.
>
> Don't know the reason for the new code, but it might need another check
> somewhere to see if the parent should really be reused.
>
> Jim
>
>
>
>
> On Thu, 13 Dec 2012, Jim Fox wrote:
>
>> Date: Thu, 13 Dec 2012 11:54:18 -0800
>> From: Jim Fox
>> <>
>> To: Chris Hyzer
>> <>
>> Cc: Grouper Dev
>> <>
>> Subject: RE: [grouper-dev] 2.1.2 hook writer not writing?
>>
>>
>> And some more:
>>
>> If I use HibernateSession's toString,
>>
>> With 2.1.2 (and postgres version 9) I see,
>> (right after the transaction is created and just before executing the hook)
>>
>> HibernateSession hibernateSession =
>> hibernateHandlerBean.getHibernateSession();
>>
>> log of hibernateSession.toString() shows: isNew: false
>>
>> But with 2.0.0 (postgres 8) I see in the same place
>>
>> HibernateSession hibernateSession =
>> hibernateHandlerBean.getHibernateSession();
>>
>> log of hibernateSession.toString() shows: isNew: true
>>
>>
>> So, for some reason the session created in that hook loop
>> is no longer a new session.
>>
>>
>> Jim
>>
>>
>> On Wed, 12 Dec 2012, Jim Fox wrote:
>>
>>> Date: Wed, 12 Dec 2012 13:38:42 -0800
>>> From: Jim Fox
>>> <>
>>> To: Chris Hyzer
>>> <>
>>> Cc: Grouper Dev
>>> <>
>>> Subject: RE: [grouper-dev] 2.1.2 hook writer not writing?
>>>
>>>
>>> Also, in that same code, right after
>>>
>>> HibernateSession hibernateSession =
>>> hibernateHandlerBean.getHibernateSession();
>>>
>>> hibernateSession.isTransactionActive() is false
>>>
>>> and after executeHook it is still false.
>>>
>>>
>>> I've tried this with my web service and also with gsh.
>>> --------------------------------
>>> root=GrouperSession.startRootSession()
>>> g=GroupFinder.findByName(root, "u:fox:browser6")
>>> mset=g.getMembers(); marr=mset.toArray()
>>> g.deleteMember(marr[0])
>>> --------------------------------
>>>
>>> Same result either way.
>>>
>>>
>>> Jim
>>>
>>>>
>>>>
>>>> I added some logging and a try/catch around the executeHook and commit
>>>> statements.
>>>>
>>>> Jim
>>>>
>>>>
>>>>>
>>>>> I will look when I get home (where I had it running), though in the
>>>>> meantime, when I look at 2.1.2 source (attached), I don't see log lines
>>>>> on the line numbers listed. E.g. GrouperHooksUtils 498 and 504... any
>>>>> ideas why? :)
>>>>>
>>>>> Thanks,
>>>>> Chris
>>>>>
>>>>> -----Original Message-----
>>>>> From: Jim Fox
>>>>> [mailto:]
>>>>> Sent: Wednesday, December 12, 2012 3:35 PM
>>>>> To: Chris Hyzer
>>>>> Cc: Grouper Dev
>>>>> Subject: RE: [grouper-dev] 2.1.2 hook writer not writing?
>>>>>
>>>>>
>>>>>
>>>>> Here's what I'm seeing.
>>>>>
>>>>>
>>>>> In GrouperHooksUtils.schedulePostCommitHooksIfRegistered
>>>>>
>>>>>
>>>>> There is the call to execute the hook
>>>>>
>>>>> executeHook(method, hook, finalHooksBean, hooksContext, null,
>>>>> asychronous);
>>>>>
>>>>> followed by a call to commit
>>>>>
>>>>> hibernateSession.commit(GrouperCommitType.COMMIT_NOW);
>>>>>
>>>>> [ I put an exception catch around the commit. ]
>>>>>
>>>>>
>>>>> The first statement executes fine, debug log shows:
>>>>>
>>>>> GrouperHooksUtils.executeHook(498) - START: Hook
>>>>> UWMembershipHooks.membershipPostCommitAddMember id: RKW6SJT1
>>>>> HibernateSession.<init>(151) - Not using nested transactions,
>>>>> converting transaction type to: READ_WRITE_NEW
>>>>> GrouperHooksUtils.executeHook(504) - END (normal): Hook
>>>>> UWMembershipHooks.membershipPostCommitAddMember id: RKW6SJT1 (9ms)
>>>>>
>>>>> and the spy log shows:
>>>>>
>>>>> 1ms, statement: Method.java.invoke() line 601,
>>>>> GrouperUtil.java.invokeMethod() line 3896,
>>>>> GrouperHooksUtils.java.executeHook() line 502,
>>>>> GrouperHooksUtils.java.access$100() line 56,
>>>>> GrouperHooksUtils.java.callback() line 437,
>>>>> GrouperHooksUtils.java.afterCompletion() line 427,
>>>>> Group.java.internal_addMember() line 1115, Group.java.addMember()
>>>>> line 942, Group.java.addMember() line 861
>>>>> insert into uw_activity (time, action, group_id, data, actors) values
>>>>> (1355343520114, 'pm', 'a1681c3fcba3f54f759e6c9432004381', 'uwpds imf',
>>>>> 'fox|fox')
>>>>>
>>>>>
>>>>> Then the commit statement fails:
>>>>>
>>>>> GrouperHooksUtils$1$1$1.callback(444) - commit:
>>>>> org.hibernate.TransactionException: Transaction not successfully started
>>>>>
>>>>>
>>>>> So the commit fails and the next thing spy shows is a rollback.
>>>>>
>>>>> If I do the commit manually, in the hook, with
>>>>>
>>>>> HibernateSession.bySqlStatic().executeSql( "commit");
>>>>>
>>>>> That works.
>>>>>
>>>>> Jim
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>




Archive powered by MHonArc 2.6.16.

Top of Page