You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by "Scott Wilson (JIRA)" <ji...@apache.org> on 2010/08/22 11:37:16 UTC
[jira] Commented: (WOOKIE-145) JPA error when Widget sets
preference values
[ https://issues.apache.org/jira/browse/WOOKIE-145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12901146#action_12901146 ]
Scott Wilson commented on WOOKIE-145:
-------------------------------------
I took another look into this and tried to get an earlier trace on the problem by adding this code to JPAPersistanceManager.save():
entityManager.persist(bean);
try {
entityManager.flush();
} catch (EntityExistsException e) {
System.out.println("Problem with "+bean.getClass());
e.printStackTrace();
}
Which outputs (plus the usual trace):
Problem with class org.apache.wookie.beans.jpa.impl.WidgetInstanceImpl
... And not org.apache.wookie.beans.jpa.impl.PreferenceImpl which is what I would have expected.
> JPA error when Widget sets preference values
> ---------------------------------------------
>
> Key: WOOKIE-145
> URL: https://issues.apache.org/jira/browse/WOOKIE-145
> Project: Wookie
> Issue Type: Bug
> Components: Server
> Reporter: Scott Wilson
> Priority: Blocker
> Fix For: 0.8.1
>
>
> The JPA/JCR branch has a problem in the implementation of Preferences, where setting a preference within a widget causes a 500 error.
> To reproduce, run Wookie and open a demo widget for WookieWiki or any other widget using preferences.
> Here is the stack trace:
> [java] <openjpa-2.0.0-r422266:935683 fatal store error> org.apache.openjpa.persistence.RollbackException: The transaction has been rolled back. See the nested exceptions for details on the errors that occurred.
> [java] FailedObject: org.apache.wookie.beans.jpa.impl.PreferenceImpl@27da9eda
> [java] at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:583)
> [java] at org.apache.wookie.beans.jpa.JPAPersistenceManager.commit(JPAPersistenceManager.java:361)
> [java] at org.apache.wookie.server.MainFilter.doFilter(MainFilter.java:45)
> [java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> [java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> [java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> [java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> [java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> [java] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> [java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> [java] at org.mortbay.jetty.Server.handle(Server.java:285)
> [java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
> [java] at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835)
> [java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641)
> [java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:202)
> [java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
> [java] at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
> [java] at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> [java] Caused by: <openjpa-2.0.0-r422266:935683 fatal store error> org.apache.openjpa.persistence.EntityExistsException: The transaction has been rolled back. See the nested exceptions for details on the errors that occurred.
> [java] FailedObject: org.apache.wookie.beans.jpa.impl.PreferenceImpl@27da9eda
> [java] at org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2302)
> [java] at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2139)
> [java] at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2037)
> [java] at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1955)
> [java] at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
> [java] at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1479)
> [java] at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:925)
> [java] at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:559)
> [java] ... 17 more
> [java] Caused by: <openjpa-2.0.0-r422266:935683 fatal store error> org.apache.openjpa.persistence.EntityExistsException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'UNPREFERENCE1' defined on 'PREFERENCE'. {prepstmnt 1145321369 INSERT INTO JAVA.Preference (ID, JPA_VERSION, WIDGET_INSTANCE_ID, DKEY, DVALUE, READONLY) VALUES (?, ?, ?, ?, ?, ?) [params=(int) 782, (int) 1, (int) 720, (String) currentPage, (Reader) java.io.StringReader@6c07125, (String) ]} [code=20000, state=23505]
> [java] FailedObject: org.apache.wookie.beans.jpa.impl.PreferenceImpl@27da9eda
> [java] at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4812)
> [java] at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4787)
> [java] at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
> [java] at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:78)
> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:143)
> [java] at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:81)
> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:99)
> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:87)
> [java] at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:550)
> [java] at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:106)
> [java] at org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
> [java] at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:103)
> [java] at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:76)
> [java] at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:751)
> [java] at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
> [java] at org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:540)
> [java] at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
> [java] ... 24 more
> [java] Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'UNPREFERENCE1' defined on 'PREFERENCE'. {prepstmnt 1145321369 INSERT INTO JAVA.Preference (ID, JPA_VERSION, WIDGET_INSTANCE_ID, DKEY, DVALUE, READONLY) VALUES (?, ?, ?, ?, ?, ?) [params=(int) 782, (int) 1, (int) 720, (String) currentPage, (Reader) java.io.StringReader@6c07125, (String) ]} [code=20000, state=23505]
> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:257)
> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:233)
> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1000(LoggingConnectionDecorator.java:70)
> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:1079)
> [java] at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:285)
> [java] at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1722)
> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate(PreparedStatementManagerImpl.java:267)
> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:118)
> [java] ... 36 more
> [java] 12:01:32,738 ERROR log:? - /wookie/dwr/call/plaincall/WidgetImpl.setPreferenceForKey.dwr
> [java] java.lang.RuntimeException
> [java] at org.apache.wookie.server.MainFilter.doFilter(MainFilter.java:50)
> [java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> [java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> [java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> [java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> [java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> [java] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> [java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> [java] at org.mortbay.jetty.Server.handle(Server.java:285)
> [java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
> [java] at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835)
> [java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641)
> [java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:202)
> [java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
> [java] at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
> [java] at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
Re: [jira] Commented: (WOOKIE-145) JPA error when Widget sets preference
values
Posted by Randy Watler <wa...@wispertel.net>.
Scott,
This is because the Preferences are stored as an "owned" part of the
WidgetInstance. This is mapped this way by design to ensure a
WidgetInstance Preferences share an object level identity and lifecycle.
For example, when a WidgetInstance is deleted, so are its child Preferences.
HTH,
Randy
P.S. I plan on looking at this again later today... hopefully I'll have
something to add then.
Scott Wilson (JIRA) wrote:
> [ https://issues.apache.org/jira/browse/WOOKIE-145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12901146#action_12901146 ]
>
> Scott Wilson commented on WOOKIE-145:
> -------------------------------------
>
> I took another look into this and tried to get an earlier trace on the problem by adding this code to JPAPersistanceManager.save():
>
> entityManager.persist(bean);
> try {
> entityManager.flush();
> } catch (EntityExistsException e) {
> System.out.println("Problem with "+bean.getClass());
> e.printStackTrace();
> }
>
> Which outputs (plus the usual trace):
>
> Problem with class org.apache.wookie.beans.jpa.impl.WidgetInstanceImpl
>
>
> ... And not org.apache.wookie.beans.jpa.impl.PreferenceImpl which is what I would have expected.
>
>
>> JPA error when Widget sets preference values
>> ---------------------------------------------
>>
>> Key: WOOKIE-145
>> URL: https://issues.apache.org/jira/browse/WOOKIE-145
>> Project: Wookie
>> Issue Type: Bug
>> Components: Server
>> Reporter: Scott Wilson
>> Priority: Blocker
>> Fix For: 0.8.1
>>
>>
>> The JPA/JCR branch has a problem in the implementation of Preferences, where setting a preference within a widget causes a 500 error.
>> To reproduce, run Wookie and open a demo widget for WookieWiki or any other widget using preferences.
>> Here is the stack trace:
>> [java] <openjpa-2.0.0-r422266:935683 fatal store error> org.apache.openjpa.persistence.RollbackException: The transaction has been rolled back. See the nested exceptions for details on the errors that occurred.
>> [java] FailedObject: org.apache.wookie.beans.jpa.impl.PreferenceImpl@27da9eda
>> [java] at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:583)
>> [java] at org.apache.wookie.beans.jpa.JPAPersistenceManager.commit(JPAPersistenceManager.java:361)
>> [java] at org.apache.wookie.server.MainFilter.doFilter(MainFilter.java:45)
>> [java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
>> [java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
>> [java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>> [java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>> [java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
>> [java] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>> [java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>> [java] at org.mortbay.jetty.Server.handle(Server.java:285)
>> [java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
>> [java] at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835)
>> [java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641)
>> [java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:202)
>> [java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
>> [java] at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
>> [java] at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
>> [java] Caused by: <openjpa-2.0.0-r422266:935683 fatal store error> org.apache.openjpa.persistence.EntityExistsException: The transaction has been rolled back. See the nested exceptions for details on the errors that occurred.
>> [java] FailedObject: org.apache.wookie.beans.jpa.impl.PreferenceImpl@27da9eda
>> [java] at org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2302)
>> [java] at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2139)
>> [java] at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2037)
>> [java] at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1955)
>> [java] at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
>> [java] at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1479)
>> [java] at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:925)
>> [java] at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:559)
>> [java] ... 17 more
>> [java] Caused by: <openjpa-2.0.0-r422266:935683 fatal store error> org.apache.openjpa.persistence.EntityExistsException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'UNPREFERENCE1' defined on 'PREFERENCE'. {prepstmnt 1145321369 INSERT INTO JAVA.Preference (ID, JPA_VERSION, WIDGET_INSTANCE_ID, DKEY, DVALUE, READONLY) VALUES (?, ?, ?, ?, ?, ?) [params=(int) 782, (int) 1, (int) 720, (String) currentPage, (Reader) java.io.StringReader@6c07125, (String) ]} [code=20000, state=23505]
>> [java] FailedObject: org.apache.wookie.beans.jpa.impl.PreferenceImpl@27da9eda
>> [java] at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4812)
>> [java] at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4787)
>> [java] at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
>> [java] at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:78)
>> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:143)
>> [java] at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:81)
>> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:99)
>> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:87)
>> [java] at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:550)
>> [java] at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:106)
>> [java] at org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
>> [java] at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:103)
>> [java] at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:76)
>> [java] at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:751)
>> [java] at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>> [java] at org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:540)
>> [java] at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>> [java] ... 24 more
>> [java] Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'UNPREFERENCE1' defined on 'PREFERENCE'. {prepstmnt 1145321369 INSERT INTO JAVA.Preference (ID, JPA_VERSION, WIDGET_INSTANCE_ID, DKEY, DVALUE, READONLY) VALUES (?, ?, ?, ?, ?, ?) [params=(int) 782, (int) 1, (int) 720, (String) currentPage, (Reader) java.io.StringReader@6c07125, (String) ]} [code=20000, state=23505]
>> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:257)
>> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:233)
>> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1000(LoggingConnectionDecorator.java:70)
>> [java] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:1079)
>> [java] at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:285)
>> [java] at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1722)
>> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate(PreparedStatementManagerImpl.java:267)
>> [java] at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:118)
>> [java] ... 36 more
>> [java] 12:01:32,738 ERROR log:? - /wookie/dwr/call/plaincall/WidgetImpl.setPreferenceForKey.dwr
>> [java] java.lang.RuntimeException
>> [java] at org.apache.wookie.server.MainFilter.doFilter(MainFilter.java:50)
>> [java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
>> [java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
>> [java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>> [java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>> [java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
>> [java] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>> [java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>> [java] at org.mortbay.jetty.Server.handle(Server.java:285)
>> [java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
>> [java] at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835)
>> [java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641)
>> [java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:202)
>> [java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
>> [java] at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
>> [java] at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
>>
>
>