Dear EJB developers,

we are using BEA WebLogic with SP4. Our database server is Oracle 8i. (Both running on a Sun Sparc.)

We made a simple test table (ID, Str1; both varchar2's) and a CMP bean for this table. Additionally we created a simple jsp test page which creates a bean and changes the value of column Str1.

Everything works find as long there aren't two or more concurrent requests. If there are concurrent requests the following exception occurs sometimes(!):

ORA-08177: can't serialize access for this transaction

In the documentation of BEA WebLogic you'll find the note that Oracle has problems with TRANSACTION_SERIALIZABLE since it will detect problems at commit time only. But this occurs on operations on the same row only. (So, this shouldn't apply for our simple test.)

If we set the transaction isolation to e.g. TRANSACTION_READ_COMMITTED, everything works fine.

The question: What causes the Oracle error on such a simple operation if transaction isolation is set to TRANSACTION_SERIALIZABLE?

Can anyone enlight us here why this happens? Did anyone have a similiar problem with Oracle and does have a proper solution/workaround?

Thank you for your help,
Dietmar

PS: Sure, we couldn't use TRANSACTION_SERIALIZABLE. But there are times were it is neccessary.

PPS: No, we can't use an other database. :-(

PPPS: We already searched all known resources, didn't find anything yet. Hence someone could think that this problem doesn't exist and we are too...

Source code for jsp page:

<%
  Context ctx = new InitialContext();
  TestHome home = (TestHome) ctx.lookup("Test");
  Test bean = home.create();
  
  value = "Value " + Math.random() * 100000;

  bean.setStr1(value);

  out.print(bean.getID());
  out.print(bean.getStr1());
%>