[jboss-user] [JBoss Portal] - Re: Transacation error during configure dashboard delete por

esmith1 do-not-reply at jboss.com
Sat Sep 20 11:59:58 EDT 2008


This problem has continued all summer, it still occurs even though we now use the jTDS MSSQL driver and Portal 2.6.6.GA.  It still does not occur after a fresh portal db install, but after (days?) of activity we eventually hit it and from then on it is reproducible and that user can no longer delete portlet windows from Configure Dashboard.  I now have an MSSQL db which reproduces it consistently.

What I see happening from a db perspective is a Blocking Process.  After I press the DELETE button in Configure Dashboard one DB connection (process) is used to perform the many DELETE queries to delete a single portlet window object and a second connection (process) is used to then perform SELECT queries after that (perhaps to refresh the window).  The sixth SELECT query (using the second connection) gets BLOCKED because the tables it is querying from had records deleted in the first connection (the DELETEs).  The first connection is listed by MSSQL as having an Open Transaction and no command is is being processed: "AWAITING COMMAND".  The second connection is listed as blocked by the first and is processing a "SELECT".  This stalemate lasts a couple minutes, hanging the portal response, until a separate portal thread comes along and cleans up (rolls back) the transactions, causing the exceptions seen.

I was hoping to find a missing '.commit()' in the destroyChild() and removeChild() activity but its difficult to follow.  I dont know enough about container transaction management and cache syncs.  

I have found a workaround that seems to work, but would like to fix the real problem if it could be located -- any suggestions on how to pin down the underlying transaction problem with the Deletes?

The workaround is to change the <trans-attribute> from Required to RequiresNew for the DashboardConfigPortlet in the jboss-portlet.xml found here jboss-portal.sar\portal-admin.sar\portal-admin.war\WEB-INF
Can you foresee any problems with using this workaround? 

Here is url describing these values:
http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/transactions/transactions7.html

My server log is over 5000 lines when I turn on all the hibernate and arjuna activity, so too long to post.  Here are the queries from the console, noting the last one is the one that hangs:


  | 16:37:52,329 INFO  [STDOUT] Hibernate: delete from JBP_INSTANCE_PER_USER where PK=?
  | 16:37:52,329 INFO  [STDOUT] Hibernate: update JBP_PORTLET_STATE set PARENT_PK=null where PARENT_PK=?
  | 16:37:52,376 INFO  [STDOUT] Hibernate: update JBP_PORTLET_STATE_ENTRY set ENTRY_KEY=null, NAME=null where ENTRY_KEY=?
  | 16:37:52,376 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY_VALUE where PK=?
  | 16:37:52,376 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY_VALUE where PK=?
  | 16:37:52,376 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY_VALUE where PK=?
  | 16:37:52,376 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY_VALUE where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY_VALUE where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE_ENTRY where PK=?
  | 16:37:52,392 INFO  [STDOUT] Hibernate: delete from JBP_PORTLET_STATE where PK=?
  | 16:37:52,408 INFO  [STDOUT] Hibernate: delete from JBP_PORTAL_OBJECT_DNAMES where INSTANCE_PK=?
  | 16:37:52,408 INFO  [STDOUT] Hibernate: delete from JBP_PORTAL_OBJECT_PROPS where OBJECT_KEY=?
  | 16:37:52,423 INFO  [STDOUT] Hibernate: delete from JBP_WINDOW where PK=?
  | 16:37:52,423 INFO  [STDOUT] Hibernate: delete from JBP_PORTAL_OBJECT where PK=?
  | 16:37:52,423 INFO  [STDOUT] Hibernate: delete from JBP_OBJECT_NODE where PK=?
  | 16:37:52,439 INFO  [STDOUT] Hibernate: select persistent0_.PK as PK4_, persistent0_.ID as ID4_, persistent0_.PORTLET_REF as PORTLET3_4_, persistent0_.MODIFIABLE as MODIFIABLE4_, persistent0_.SER_STATE as SER5_4_ from JBP_INSTANCE persistent0_
  | 16:37:52,470 INFO  [STDOUT] Hibernate: select persistent0_.PK as PK4_, persistent0_.ID as ID4_, persistent0_.PORTLET_REF as PORTLET3_4_, persistent0_.MODIFIABLE as MODIFIABLE4_, persistent0_.SER_STATE as SER5_4_ from JBP_INSTANCE persistent0_
  | 16:37:52,501 INFO  [STDOUT] Hibernate: select persistent0_.PK as PK4_, persistent0_.ID as ID4_, persistent0_.PORTLET_REF as PORTLET3_4_, persistent0_.MODIFIABLE as MODIFIABLE4_, persistent0_.SER_STATE as SER5_4_ from JBP_INSTANCE persistent0_
  | 16:37:52,533 INFO  [STDOUT] Hibernate: select persistent0_.PK as PK4_, persistent0_.ID as ID4_, persistent0_.PORTLET_REF as PORTLET3_4_, persistent0_.MODIFIABLE as MODIFIABLE4_, persistent0_.SER_STATE as SER5_4_ from JBP_INSTANCE persistent0_
  | 16:37:52,611 INFO  [STDOUT] Hibernate: select persistent0_.PK as PK4_, persistent0_.ID as ID4_, persistent0_.PORTLET_REF as PORTLET3_4_, persistent0_.MODIFIABLE as MODIFIABLE4_, persistent0_.SER_STATE as SER5_4_ from JBP_INSTANCE persistent0_
  | 16:37:52,673 INFO  [STDOUT] Hibernate: select persistent0_.PK as PK21_1_, persistent0_.PORTLET_ID as PORTLET2_21_1_, persistent0_.REGISTRATION_ID as REGISTRA3_21_1_, persistent0_.REGISTRATION_TIME as REGISTRA4_21_1_, persistent0_.TERMINATION_TIME as TERMINAT5_21_1_, persistent0_.PARENT_PK as PARENT6_21_1_, entries1_.ENTRY_KEY as ENTRY5_3_, entries1_.PK as PK3_, entries1_.NAME as NAME3_, entries1_.PK as PK22_0_, entries1_.NAME as NAME22_0_, entries1_.TYPE as TYPE22_0_, entries1_.READ_ONLY as READ4_22_0_, strings2_.PK as PK4_, strings2_.jbp_value as jbp2_4_, strings2_.IDX as IDX4_ from JBP_PORTLET_STATE persistent0_ left outer join JBP_PORTLET_STATE_ENTRY entries1_ on persistent0_.PK=entries1_.ENTRY_KEY left outer join JBP_PORTLET_STATE_ENTRY_VALUE strings2_ on entries1_.PK=strings2_.PK where persistent0_.PK=?
  | 



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4177821#4177821

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4177821



More information about the jboss-user mailing list