Обсуждение: Lock-when-Loaded failing

Поиск
Список
Период
Сортировка

Lock-when-Loaded failing

От
"DanixDefcon5"
Дата:
Ok. This is a really weird thing I'm running into. Funny thing is, the
thing ran OK until two of the tables were set with the lock-when-loaded
consistency level.

This is with Sun Java AS 8.1, using the postgresql-8.1-405.jdbc2ee.jar
driver.

What does it mean, what am I doing wrong, or is this a bug?

It says that the DataStore doesn't support locking for update at row
level.

Here goes my (ugly) stack trace:

-----------

javax.ejb.TransactionRolledbackLocalException: Exception thrown from
bean; nested exception is:
com.sun.jdo.api.persistence.support.JDOFatalDataStoreException:
JDO76320: One of the object types involved in this query is at
consistency level "lock-when-loaded". Enforcing this consistency level
requires data store to support locking for update at row level. The
data store does not support locking for update at row level.
com.sun.jdo.api.persistence.support.JDOFatalDataStoreException:
JDO76320: One of the object types involved in this query is at
consistency level "lock-when-loaded". Enforcing this consistency level
requires data store to support locking for update at row level. The
data store does not support locking for update at row level.
    at

com.sun.jdo.spi.persistence.support.sqlstore.sql.generator.SelectStatement.generateForUpdateClause(SelectStatement.java:337)
    at

com.sun.jdo.spi.persistence.support.sqlstore.sql.generator.SelectStatement.generateRegularStatementText(SelectStatement.java:180)
    at

com.sun.jdo.spi.persistence.support.sqlstore.sql.generator.SelectStatement.generateStatementText(SelectStatement.java:152)
    at
com.sun.jdo.spi.persistence.support.sqlstore.sql.generator.Statement.getText(Statement.java:181)
    at
com.sun.jdo.spi.persistence.support.sqlstore.sql.generator.QueryPlan.getStatements(QueryPlan.java:172)
    at
com.sun.jdo.spi.persistence.support.sqlstore.sql.RetrieveDescImpl.buildQueryPlan(RetrieveDescImpl.java:620)
    at
com.sun.jdo.spi.persistence.support.sqlstore.SQLStoreManager.retrieve(SQLStoreManager.java:340)
    at
com.sun.jdo.spi.persistence.support.sqlstore.impl.PersistenceManagerImpl.retrieve(PersistenceManagerImpl.java:1096)
    at
com.sun.jdo.spi.persistence.support.sqlstore.query.QueryImpl.doExecute(QueryImpl.java:658)
    at
com.sun.jdo.spi.persistence.support.sqlstore.query.QueryImpl.executeWithArray(QueryImpl.java:576)
    at

dgrmsg.serviciosbasicos.ejb.entity.FotocopiadoraBean255772716_ConcreteImpl.ejbFindByNumSerie(FotocopiadoraBean255772716_ConcreteImpl.java:424)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at
com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:147)
    at
com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke(EJBLocalHomeInvocationHandler.java:185)
    at $Proxy1192.findByNumSerie(Unknown Source)
    at
dgrmsg.serviciosbasicos.ejb.ManejoServiciosBasicosBean.crearServicioFotocopiado(ManejoServiciosBasicosBean.java:282)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at
com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:147)
    at
com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:128)
    at $Proxy1183.crearServicioFotocopiado(Unknown Source)
    at

dgrmsg.serviciosbasicos.upload.DevoradorInterfaceFotocopiadoServlet.processRequest(DevoradorInterfaceFotocopiadoServlet.java:99)
    at

dgrmsg.serviciosbasicos.upload.DevoradorInterfaceFotocopiadoServlet.doPost(DevoradorInterfaceFotocopiadoServlet.java:183)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:767)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    at
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
    at
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257)
    at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
    at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161)
    at java.security.AccessController.doPrivileged(Native Method)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:225)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933)
    at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:185)
    at
com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:653)
    at
com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:534)
    at
com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java:403)
    at
com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:55)
javax.ejb.TransactionRolledbackLocalException: Exception thrown from
bean; nested exception is:
com.sun.jdo.api.persistence.support.JDOFatalDataStoreException:
JDO76320: One of the object types involved in this query is at
consistency level "lock-when-loaded". Enforcing this consistency level
requires data store to support locking for update at row level. The
data store does not support locking for update at row level.
    at
com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:2674)
    at
com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:2526)
    at
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:819)
    at
com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke(EJBLocalHomeInvocationHandler.java:199)
    at $Proxy1192.findByNumSerie(Unknown Source)
    at
dgrmsg.serviciosbasicos.ejb.ManejoServiciosBasicosBean.crearServicioFotocopiado(ManejoServiciosBasicosBean.java:282)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at
com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:147)
    at
com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:128)
    at $Proxy1183.crearServicioFotocopiado(Unknown Source)
    at

dgrmsg.serviciosbasicos.upload.DevoradorInterfaceFotocopiadoServlet.processRequest(DevoradorInterfaceFotocopiadoServlet.java:99)
    at

dgrmsg.serviciosbasicos.upload.DevoradorInterfaceFotocopiadoServlet.doPost(DevoradorInterfaceFotocopiadoServlet.java:183)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:767)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    at
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
    at
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257)
    at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
    at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161)
    at java.security.AccessController.doPrivileged(Native Method)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:225)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132)
    at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
    at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933)
    at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:185)
    at
com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:653)
    at
com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:534)
    at
com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java:403)
    at
com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:55)


Re: Lock-when-Loaded failing

От
Oliver Jowett
Дата:
DanixDefcon5 wrote:

> It says that the DataStore doesn't support locking for update at row
> level.

AFAIK the driver returns true from
DatabaseMetaData.supportsSelectForUpdate(). I don't know what additional
things the Sun implementation requires to support its "lock-when-loaded"
mode. You will have to ask Sun.

-O

Re: Lock-when-Loaded failing

От
"DanixDefcon5"
Дата:
Ok, thanks. Thing is, while I was waiting an answer from here, I tried
the code on our Test Envirnoment AS. It is the next version, Sun Java
AS 9, which uses the Java EE 5 platform. Funny thing is ... it worked.
Just as-is, no changes, no NOTHING. Just deployed and tested, and all
the "lock-when-loaded" consistencies worked. (Even tested the
consistency doing a LOCK TABLE SHARE ROW EXCLUSIVE to see if the EJB
transaction would lock until available.)

So I assume it must be some weird bug, specific to the 8.1 AS version.
Should note that  the JDBC pool is defined exactly the same in both
servers.

Only thing I haven't solved by now is that the CMP management for the
Sun AS is kind of dumb when using tables in schemas that are not in the
current connection's search_path. But that is another story ...

Oliver Jowett wrote:
> DanixDefcon5 wrote:
>
> > It says that the DataStore doesn't support locking for update at row
> > level.
>
> AFAIK the driver returns true from
> DatabaseMetaData.supportsSelectForUpdate(). I don't know what additional
> things the Sun implementation requires to support its "lock-when-loaded"
> mode. You will have to ask Sun.
>
> -O
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster