I downloaded and attempting to use ha-jdbc-2.1.0-beta-3.jar.
Last night, I spent many hours reading topics in this forum and trying to configure HA-JDBC, which resulted in many different errors before having success starting the cluster. Also, I had difficulty getting Embeddy Derby JAR to load. Below is the configuration I currently have to get the cluster started.
tomee.xml (the non-jta jdbc config 'must be' first to load embedded derby)
The ha-jdbc configuration above, finally, allowed TomEE to start with no exceptions related to ha-jdbc.
I really would like to configure ha-jdbc to replace the JDBC configuration that I currently have in production, so I can have a cluster of at least 2 databases, and make use of Tomcat's JDBC pooling, or if better, ha-jdbc's pooling capabilities.
FYI, currently, in production, tomee/derby/eclipselink is performing very very well without ha-jdbc. Please advise and let me know how I should configure ha-jdbc for the highest availability and to perform better than my current single-database configuration.
In my next post, I will send you the exceptions that I am experiencing when testing my web app with ha-jdbc configured (as mentioned above).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Immediately after starting TomEE (with ha-jdbc configured), I logged into the web application, successfully, but there were exceptions (only in catalina log), and then I logged out of the web application, successfully (with exceptions in catalina log).
Below is the stacktrace and catalina log from the point I logged in, until the point that I logged out of the web application.
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 12:12:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateAfterLogin(): Error updating USER(administrator) last login date/time: Sun Feb 10 00:12:08 EST 2013
javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is:
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:363)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:283)
at jpa.session.UsersFacade$LocalBeanProxy.edit(jpa/session/UsersFacade.java)
at jsf.users.pf_UsersController.updateAfterLogin(pf_UsersController.java:998)
at jsf.users.pf_UsersController.loginUser(pf_UsersController.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.webbeans.intercept.InterceptorHandler.invoke(InterceptorHandler.java:322)
at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:117)
at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:108)
at jsf.users.pf_UsersController_$$javassist_3.loginUser(pf_UsersController$$_javassist_3.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:450)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:225)
at de.odysseus.el.tree.impl.ast.AstMethod.eval(AstMethod.java:91)
at de.odysseus.el.tree.impl.ast.AstMethod.invoke(AstMethod.java:104)
at de.odysseus.el.tree.impl.ast.AstEval.invoke(AstEval.java:71)
at de.odysseus.el.TreeMethodExpression.invoke(TreeMethodExpression.java:132)
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:68)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.omnifaces.filter.GzipResponseFilter.doFilter(GzipResponseFilter.java:148)
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at pf.LoginFilter.doFilter(LoginFilter.java:209)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1680)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:786)
at org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:184)
at jpa.session.AbstractFacade.edit(AbstractFacade.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
at org.apache.openejb.cdi.CdiInterceptor.invoke(CdiInterceptor.java:130)
at org.apache.openejb.cdi.CdiInterceptor.access$000(CdiInterceptor.java:43)
at org.apache.openejb.cdi.CdiInterceptor$1.call(CdiInterceptor.java:67)
at org.apache.openejb.cdi.CdiInterceptor.aroundInvoke(CdiInterceptor.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:180)
at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:138)
at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:239)
at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:191)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:256)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:251)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:85)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:279)
... 59 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.updateObject(DatasourceCallQueryMechanism.java:749)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.updateObject(StatementQueryMechanism.java:432)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1042)
at org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(UpdateObjectQuery.java:84)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:287)
at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:743)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1449)
at org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForClassWithChangeSet(CommitManager.java:265)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:128)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3799)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1415)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:636)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1561)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:447)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:780)
... 92 more
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109)
at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80)
at sun.proxy.$Proxy124.prepareStatement(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tomee.jdbc.TomEEDataSourceCreator$ContantHashCodeHandler.invoke(TomEEDataSourceCreator.java:332)
at sun.proxy.$Proxy125.prepareStatement(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.resource.jdbc.managed.local.ManagedConnection.invokeUnderTransaction(ManagedConnection.java:152)
at org.apache.openejb.resource.jdbc.managed.local.ManagedConnection.invoke(ManagedConnection.java:120)
at sun.proxy.$Proxy125.prepareStatement(Unknown Source)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1474)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1423)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:697)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585)
... 119 more
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: USERS
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.SchemaManager.getTable(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readSimpleRangeVariable(Unknown Source)
at org.hsqldb.ParserDML.compileUpdateStatement(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 146 more
Feb 10, 2013 12:12:09 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.loginUser(): administrator logged in at Sun Feb 10 00:12:08 EST 2013
Feb 10, 2013 12:12:09 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 00:12:09.05--UnitOfWork(964129786)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 12:16:34 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 12:16:34 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 12:16:34 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.logout(): administrator logged out at Sun Feb 10 00:16:34 EST 2013 [EL Warning]: 2013-02-10 00:16:34.527--UnitOfWork(1080376028)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ]) [EL Warning]: 2013-02-10 00:16:34.578--UnitOfWork(1829704959)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I just finished testing the web application (with ha-jdbc configured), and while accessing different xhtml pages in the web application, I am successfully SELECTing data with no errors reported to the enduser (myself) on the pages, but the catalina log is filling up with the following:
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ]) [EL Warning]: 2013-02-10 06:47:36.768--UnitOfWork(523557107)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:36 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:47:44.114--UnitOfWork(1744757324)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:44 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:47:46.549--UnitOfWork(487056337)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:46 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:47:48.717--UnitOfWork(2116596080)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:48 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:47:51.817--UnitOfWork(759855060)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:51 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:48:56.381--UnitOfWork(940047674)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:48:56 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:49:02.606--UnitOfWork(723873147)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:49:02 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 6:49:50 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:49:50.237--UnitOfWork(1202459563)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ]) [EL Warning]: 2013-02-10 06:50:06.67--UnitOfWork(339146480)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:50:06 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED [EL Warning]: 2013-02-10 06:50:08.962--UnitOfWork(375239606)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ]) [EL Warning]: 2013-02-10 06:50:08.985--UnitOfWork(877889793)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:50:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 6:50:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 6:50:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.logout(): administrator logged out at Sun Feb 10 06:50:08 EST 2013
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I see that you only have HA-JDBC configured as your JTA datasource, but not your non-JTA datasource. Is that intentional? I ask because I don't see HA-JDBC getting invoked at in your logs.
Also, your HA-JDBC config is not quite right. When configuring HA-JDBC to proxy a DataSource, the location attribute is interpreted as either a jndi name (of a DataSource) or as a DataSource implementation class.
Also, your JPA configuration (persistence.xml) needs to define a username/password for use by your application. The credentials defined in HA-JDBC are not used by connections obtained via JPA, but only for connections made by HA-JDBC for its own purposes (e.g. synchronization, failure detection, etc).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I tested everything above, and I wanted to share the errors/warnings that I am getting in the server log after starting TomEE and after accessing web app via browser.
when TomEE started, I noticed the following in the server log:
Since, http://tomee.apache.org/datasource-config.html lists supported properties of <Resource ...=""/>, which does not include 'factory' and 'cluster' as supported properties, can/should I specify hajdbc driver instead of using factory="..." and cluster="..."?
Please advise.
Last edit: Howard Smith 2013-11-02
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
okay, after renaming filename from ha-jdbc-cluster.xml to ha-jdbc-null.xml, I am now getting the following errors in log (not able to login to webapp, yet:
please advise, because I would really love to get this working, and I don't know how to check this site for updates; the only way I can check for updates is refresh this page in my browser. :(
thanks!
Last edit: Howard Smith 2013-11-02
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
and exceptions in the log file still see the same, but they occur during startup of tomee; previously, exceptions occurred after accessing/opening webapp in browser and attempting to login on login.xhtml of the web app.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Previously, I was using beta-3, but now I'm using ha-jdbc-2.1.0-beta-4.jar, and I am getting the same exceptions as in my previous response.
META-INF/context.xml and resources in web.xml is not recommended when using TomEE. It is recommended to use tomee.xml, but <Resource ...=""> in tomee.xml does not allow me to set ha-jdbc cluster="..." and factory="...".
based on all of the config that I provided above, can you please tell me how i can configure my app to use ha-jdbc for a 2-node/database cluster (tomcat jdbc pooling is not necessary, unless you can recommend a way for me to use with tomee)?
I have 1 tomee, which hosts webapp and database (currently, via tomcat jdbc), which works great, but I just would like to have a high availability database cluster in place, so that is why I am 'trying' to use HA-JDBC. thanks.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
started tomee, and 'after' attempting to login to webapp, i got the following:
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: URI has an authority component
Error Code: 0
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:135)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:293)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:418)
at org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(ConnectionPool.java:216)
at org.eclipse.persistence.sessions.server.ExternalConnectionPool.startUp(ExternalConnectionPool.java:146)
at org.eclipse.persistence.sessions.server.ServerSession.connect(ServerSession.java:484)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:633)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:208)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488)
... 87 more
Caused by: java.sql.SQLException: URI has an authority component
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:724)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:86)
at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:132)
... 97 more
Caused by: java.lang.IllegalArgumentException: URI has an authority component
at java.io.File.<init>(Unknown Source)
at net.sf.hajdbc.xml.FileXMLStreamFactory.<init>(FileXMLStreamFactory.java:50)
at net.sf.hajdbc.xml.XMLDatabaseClusterConfigurationFactory.<init>(XMLDatabaseClusterConfigurationFactory.java:120)
at net.sf.hajdbc.xml.XMLDatabaseClusterConfigurationFactory.<init>(XMLDatabaseClusterConfigurationFactory.java:115)
at net.sf.hajdbc.xml.XMLDatabaseClusterConfigurationFactory.<init>(XMLDatabaseClusterConfigurationFactory.java:110)
at net.sf.hajdbc.sql.CommonDataSource.create(CommonDataSource.java:79)
at net.sf.hajdbc.sql.CommonDataSource.create(CommonDataSource.java:48)
at net.sf.hajdbc.util.concurrent.LifecycleRegistry.get(LifecycleRegistry.java:63)
at net.sf.hajdbc.util.concurrent.LifecycleRegistry.get(LifecycleRegistry.java:34)
at net.sf.hajdbc.sql.CommonDataSource.getProxy(CommonDataSource.java:86)
at net.sf.hajdbc.sql.DataSource.getConnection(DataSource.java:60)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDataSource(PooledConnection.java:224)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:180)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701)
... 102 more
i think i'm getting closer with tomee. please advise, based on this and earlier responses. thanks.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
well, i attempted to configure tomcat's connection pool to
access HA-JDBC's datasource (i.e. a pool of HA-JDBC connections), as you mentioned in another thread.
Your HA-JDBC configuration defines an invalid value for <database location="..."/>
You specified a class name, when instead, you should have specified a JDBC url.
thank you for the response. please read my response entirely. i tried what you suggested, that resulted in an exception, searched google, found a hint/tip, and got embedded derby loaded by adding a 'startup' database <Resource driver="embedded" derby=""/>, and then tomee started with ha-jdbc with 'no' issues. have not tested with my app yet, will report test results in my next response. now, below, i will report details of what I mentioned above.
per your last suggestion, i modified ha-jdbc-cluster.xml, and now it looks like the following:
afterwards, i remembered a trick I did with glassfish 3.1.x, in the past, but wanted to do the same with tomcat/tomee. this error reminded me that i could possibly start embedded derby driver via java (-D) option, but I forgot the syntax, so searched google, and based on what others recommended, i thought it is necessary to do <Resource ...=""/> and 'use' the database (driver).
So, I added the following as the first 'embedded derby' database resource:
from prior experience (this past weekend), when I was trying sooo many things to get ha-jdbc working with tomee (and my app), i recognized that adding the following to the <Resource ...=""/> seemed to 'eagerly' use/start the database, immediately, when tomee started (instead of 'lazy' use/start database when first user login to the web app). :)
ignoreDefaultValues true
so, after adding the dummy 'startup' embedded derby database resource, tomee started with no ha-jdbc errors/exceptions. below, you will see that tomee created 'startup' resource and then ha-jdbc resource. :)
Nov 04, 2013 10:44:36 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=jdbc/startup)
Nov 04, 2013 10:44:37 PM org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource readOnly
INFO: Disabling testOnBorrow since no validation query is provided
Nov 04, 2013 10:44:37 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=jdbc/mcmsJta)
Nov 04, 2013 10:44:37 PM org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource readOnly
INFO: Disabling testOnBorrow since no validation query is provided
Nov 04, 2013 10:44:37 PM net.sf.hajdbc.logging.slf4j.SLF4JLogger log
INFO: Initializing HA-JDBC 2.1.0-beta-4 from \apache-tomee-plus-1.6.0-SNAPSHOT\lib\ha-jdbc-cluster.xml
will test my app and ha-jdbc next, and report test results in my next response. thanks Paul!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Why do you need a "dummy 'startup' embedded derby database resource"?
The no suitable driver exception means that the JDBC driver wasn't autoloaded. This usually means that your JDBC driver is not JDBC 4.0 compatible, i.e. the jar file is missing a /META-INF/services/java.sql.Driver file. What version of Derby are you using?
If your jdbc driver is not JDBC 4.0 compatible, and you are unable to update this dependency, you can start your server with the "jdbc.drivers" system property that defines the fully qualified class name of your JDBC driver.
e.g. -Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Also, I'm not sure why you have to 2 extra <property/> elements in your database. These would be passed through to the Driver.connect(...) method, and I doubt that derby makes use of them.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Sorry - you posted the Derby version in the 1st post in your thread. This version should be auto-loadable, so I'm not sure why you're getting a "No suitable driver" exception.
It helps to use DriverManager.setLogWriter(System.out) to debug issues like this - that way you can see any exception that might be causing org.apache.derby.jdbc.EmbeddedDriver.acceptsUrl("jdbc:derby:c:/javadb/databases/mcms;create=true") to return false.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I currently have a web application in production, configured as follows:
TomEE 1.5.2-SNAPSHOT (running on or bundled with Tomcat 7.0.35)
Apache Derby 10.9.0
EclipseLink 2.3.2
tomee.xml
persistence.xml
I downloaded and attempting to use ha-jdbc-2.1.0-beta-3.jar.
Last night, I spent many hours reading topics in this forum and trying to configure HA-JDBC, which resulted in many different errors before having success starting the cluster. Also, I had difficulty getting Embeddy Derby JAR to load. Below is the configuration I currently have to get the cluster started.
tomee.xml (the non-jta jdbc config 'must be' first to load embedded derby)
ha-jdbc-cluster.xml
The ha-jdbc configuration above, finally, allowed TomEE to start with no exceptions related to ha-jdbc.
I really would like to configure ha-jdbc to replace the JDBC configuration that I currently have in production, so I can have a cluster of at least 2 databases, and make use of Tomcat's JDBC pooling, or if better, ha-jdbc's pooling capabilities.
FYI, currently, in production, tomee/derby/eclipselink is performing very very well without ha-jdbc. Please advise and let me know how I should configure ha-jdbc for the highest availability and to perform better than my current single-database configuration.
In my next post, I will send you the exceptions that I am experiencing when testing my web app with ha-jdbc configured (as mentioned above).
Immediately after starting TomEE (with ha-jdbc configured), I logged into the web application, successfully, but there were exceptions (only in catalina log), and then I logged out of the web application, successfully (with exceptions in catalina log).
Below is the stacktrace and catalina log from the point I logged in, until the point that I logged out of the web application.
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 12:12:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateAfterLogin(): Error updating USER(administrator) last login date/time: Sun Feb 10 00:12:08 EST 2013
javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is:
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:363)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:283)
at jpa.session.UsersFacade$LocalBeanProxy.edit(jpa/session/UsersFacade.java)
at jsf.users.pf_UsersController.updateAfterLogin(pf_UsersController.java:998)
at jsf.users.pf_UsersController.loginUser(pf_UsersController.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.webbeans.intercept.InterceptorHandler.invoke(InterceptorHandler.java:322)
at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:117)
at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:108)
at jsf.users.pf_UsersController_$$javassist_3.loginUser(pf_UsersController$$_javassist_3.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:450)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:225)
at de.odysseus.el.tree.impl.ast.AstMethod.eval(AstMethod.java:91)
at de.odysseus.el.tree.impl.ast.AstMethod.invoke(AstMethod.java:104)
at de.odysseus.el.tree.impl.ast.AstEval.invoke(AstEval.java:71)
at de.odysseus.el.TreeMethodExpression.invoke(TreeMethodExpression.java:132)
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:68)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.omnifaces.filter.GzipResponseFilter.doFilter(GzipResponseFilter.java:148)
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at pf.LoginFilter.doFilter(LoginFilter.java:209)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1680)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:786)
at org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:184)
at jpa.session.AbstractFacade.edit(AbstractFacade.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
at org.apache.openejb.cdi.CdiInterceptor.invoke(CdiInterceptor.java:130)
at org.apache.openejb.cdi.CdiInterceptor.access$000(CdiInterceptor.java:43)
at org.apache.openejb.cdi.CdiInterceptor$1.call(CdiInterceptor.java:67)
at org.apache.openejb.cdi.CdiInterceptor.aroundInvoke(CdiInterceptor.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
at org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:180)
at org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:138)
at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:239)
at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:191)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:256)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:251)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:85)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:279)
... 59 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.updateObject(DatasourceCallQueryMechanism.java:749)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.updateObject(StatementQueryMechanism.java:432)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1042)
at org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(UpdateObjectQuery.java:84)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:287)
at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:743)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1449)
at org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForClassWithChangeSet(CommitManager.java:265)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:128)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3799)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1415)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:636)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1561)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:447)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:780)
... 92 more
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109)
at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80)
at sun.proxy.$Proxy124.prepareStatement(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tomee.jdbc.TomEEDataSourceCreator$ContantHashCodeHandler.invoke(TomEEDataSourceCreator.java:332)
at sun.proxy.$Proxy125.prepareStatement(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.openejb.resource.jdbc.managed.local.ManagedConnection.invokeUnderTransaction(ManagedConnection.java:152)
at org.apache.openejb.resource.jdbc.managed.local.ManagedConnection.invoke(ManagedConnection.java:120)
at sun.proxy.$Proxy125.prepareStatement(Unknown Source)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1474)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1423)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:697)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585)
... 119 more
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: USERS
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.SchemaManager.getTable(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readSimpleRangeVariable(Unknown Source)
at org.hsqldb.ParserDML.compileUpdateStatement(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 146 more
Feb 10, 2013 12:12:09 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.loginUser(): administrator logged in at Sun Feb 10 00:12:08 EST 2013
Feb 10, 2013 12:12:09 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 00:12:09.05--UnitOfWork(964129786)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 12:16:34 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 12:16:34 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 12:16:34 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.logout(): administrator logged out at Sun Feb 10 00:16:34 EST 2013
[EL Warning]: 2013-02-10 00:16:34.527--UnitOfWork(1080376028)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
[EL Warning]: 2013-02-10 00:16:34.578--UnitOfWork(1829704959)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Also, I will attach the catalina log file(s), so you can see all that I experienced from beginning to end. :)
Attached to this response, is the first catalina log.
Attached to this response, is the 2nd catalina log, where you should see the stacktrace that I shared in my 2nd response above.
I just finished testing the web application (with ha-jdbc configured), and while accessing different xhtml pages in the web application, I am successfully SELECTing data with no errors reported to the enduser (myself) on the pages, but the catalina log is filling up with the following:
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
[EL Warning]: 2013-02-10 06:47:36.768--UnitOfWork(523557107)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:36 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:47:44.114--UnitOfWork(1744757324)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:44 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:47:46.549--UnitOfWork(487056337)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:46 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:47:48.717--UnitOfWork(2116596080)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:48 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:47:51.817--UnitOfWork(759855060)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:47:51 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:48:56.381--UnitOfWork(940047674)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:48:56 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:49:02.606--UnitOfWork(723873147)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:49:02 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 6:49:50 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:49:50.237--UnitOfWork(1202459563)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
[EL Warning]: 2013-02-10 06:50:06.67--UnitOfWork(339146480)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:50:06 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
[EL Warning]: 2013-02-10 06:50:08.962--UnitOfWork(375239606)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
[EL Warning]: 2013-02-10 06:50:08.985--UnitOfWork(877889793)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERS
Error Code: -5501
Call: UPDATE USERS SET LAST_LOGIN_DT = ?, LAST_LOGOUT_DT = ? WHERE (USER_NAME = ?)
bind => [3 parameters bound]
Query: UpdateObjectQuery(jpa.entities.Users[ userName=administrator ])
Feb 10, 2013 6:50:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 6:50:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.updateLastLogoutDt(): javax.ejb.EJBException: Attempt to invoke when container is in STOPPED
Feb 10, 2013 6:50:08 AM jsf.users.pf_UsersController log
INFO: pf_UsersController.logout(): administrator logged out at Sun Feb 10 06:50:08 EST 2013
I see that you only have HA-JDBC configured as your JTA datasource, but not your non-JTA datasource. Is that intentional? I ask because I don't see HA-JDBC getting invoked at in your logs.
Also, your HA-JDBC config is not quite right. When configuring HA-JDBC to proxy a DataSource, the location attribute is interpreted as either a jndi name (of a DataSource) or as a DataSource implementation class.
Your HA-JDBC config should look more like this:
For details, see:
http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/DataSource.html
Also, your JPA configuration (persistence.xml) needs to define a username/password for use by your application. The credentials defined in HA-JDBC are not used by connections obtained via JPA, but only for connections made by HA-JDBC for its own purposes (e.g. synchronization, failure detection, etc).
Thank you for the response and my apologies for the delayed/late response; I finally had some bandwidth to revisit this.
Just to update details about my environment, I am using the following:
TomEE 1.6.0-SNAPSHOT (running on or bundled with Tomcat 7.0.47)
Apache Derby 10.9.0
EclipseLink 2.3.2
For TomEE, it is recommended to specify database resource in tomee.xml, so I have the following:
tomee.xml
NOTE: http://tomee.apache.org/datasource-config.html lists 'supported' properties
and per your response, I now have the following:
ha-jdbc-cluster.xml
Per the (out-dated) JTA example at this URL, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial, it says that username and password is not specified (or need to be specified), so I have not modified the persistence.xml for JPA/JTA yet.
I tested everything above, and I wanted to share the errors/warnings that I am getting in the server log after starting TomEE and after accessing web app via browser.
when TomEE started, I noticed the following in the server log:
Since, http://tomee.apache.org/datasource-config.html lists supported properties of <Resource ...=""/>, which does not include 'factory' and 'cluster' as supported properties, can/should I specify hajdbc driver instead of using factory="..." and cluster="..."?
Please advise.
Last edit: Howard Smith 2013-11-02
Okay, I am getting somewhere, I think. I modified tomee.xml as follows:
and now, I am seeing ha-jdbc being triggered in the log with the following errors:
I'm about to rename filename from ha-jdbc-cluster.xml to ha-jdbc-null.xml, and test.
okay, after renaming filename from ha-jdbc-cluster.xml to ha-jdbc-null.xml, I am now getting the following errors in log (not able to login to webapp, yet:
exceptions/stacktrace @ https://gist.github.com/smithh032772/7279765
please advise, because I would really love to get this working, and I don't know how to check this site for updates; the only way I can check for updates is refresh this page in my browser. :(
thanks!
Last edit: Howard Smith 2013-11-02
per your earlier suggestion, I added username and password to JTA datasource in persistence.xml,
and exceptions/stacktrace, on gist @ https://gist.github.com/smithh032772/7279765#file-log2-txt, seem to be the same.
Per Avoid properties conflict when configuring TomEE DataSource, I added ignoreDefaultValues=true to <Resource> in tomee.xml,
and exceptions in the log file still see the same, but they occur during startup of tomee; previously, exceptions occurred after accessing/opening webapp in browser and attempting to login on login.xhtml of the web app.
Previously, I was using beta-3, but now I'm using ha-jdbc-2.1.0-beta-4.jar, and I am getting the same exceptions as in my previous response.
META-INF/context.xml and resources in web.xml is not recommended when using TomEE. It is recommended to use tomee.xml, but <Resource ...=""> in tomee.xml does not allow me to set ha-jdbc cluster="..." and factory="...".
based on all of the config that I provided above, can you please tell me how i can configure my app to use ha-jdbc for a 2-node/database cluster (tomcat jdbc pooling is not necessary, unless you can recommend a way for me to use with tomee)?
I have 1 tomee, which hosts webapp and database (currently, via tomcat jdbc), which works great, but I just would like to have a high availability database cluster in place, so that is why I am 'trying' to use HA-JDBC. thanks.
Did some more reading/researching, and found the following discussion/topic:
HA-JDBC Configuration File Location
So, I added the following to my tomee/tomcat/JVM startup options:
started tomee, and 'after' attempting to login to webapp, i got the following:
i think i'm getting closer with tomee. please advise, based on this and earlier responses. thanks.
okay, modified the JVM option to the following,
and added the following to ha-jdbc-cluster.xml:
so, ha-jdbc-cluster.xml has the following:
and tomee.xml has the following:
and now, i have the following exception in the log file 'after' attempting to login to the web app:
please advise. thanks.
well, i attempted to configure tomcat's connection pool to
access HA-JDBC's datasource (i.e. a pool of HA-JDBC connections), as you mentioned in another thread.
tomee.xml
ha-jdbc-cluster.xml
immediately after starting tomee (and prior to login attempt), the following exception in the log:
let's try to get this working, please. thanks.
Your TomEE JDBC resource configuration contains:
JdbcDriver net.sf.hajdbc.sql.DataSource
This is not a valid JDBC driver class. If you want to configure HA-JDBC in this way, you need to use "net.sf.hajdbc.sql.Driver".
i did what you suggested, but it still resulted in an exception. please see below.
tomee.xml
ha-jdbc-cluster.xml
immediately after starting tomee (and prior to login attempt), the following exception in the log:
please advise, thanks.
Your HA-JDBC configuration defines an invalid value for <database location="..."/>
You specified a class name, when instead, you should have specified a JDBC url.
Try something like this:
thank you for the response. please read my response entirely. i tried what you suggested, that resulted in an exception, searched google, found a hint/tip, and got embedded derby loaded by adding a 'startup' database <Resource driver="embedded" derby=""/>, and then tomee started with ha-jdbc with 'no' issues. have not tested with my app yet, will report test results in my next response. now, below, i will report details of what I mentioned above.
per your last suggestion, i modified ha-jdbc-cluster.xml, and now it looks like the following:
but that resulted in the following exception (please see exception and there is more to read after the exception):
afterwards, i remembered a trick I did with glassfish 3.1.x, in the past, but wanted to do the same with tomcat/tomee. this error reminded me that i could possibly start embedded derby driver via java (-D) option, but I forgot the syntax, so searched google, and based on what others recommended, i thought it is necessary to do <Resource ...=""/> and 'use' the database (driver).
So, I added the following as the first 'embedded derby' database resource:
from prior experience (this past weekend), when I was trying sooo many things to get ha-jdbc working with tomee (and my app), i recognized that adding the following to the <Resource ...=""/> seemed to 'eagerly' use/start the database, immediately, when tomee started (instead of 'lazy' use/start database when first user login to the web app). :)
so, after adding the dummy 'startup' embedded derby database resource, tomee started with no ha-jdbc errors/exceptions. below, you will see that tomee created 'startup' resource and then ha-jdbc resource. :)
will test my app and ha-jdbc next, and report test results in my next response. thanks Paul!
I need to post my test results and any other questions in a separate topic. thank you again, Paul, for your help in this topic!
Why do you need a "dummy 'startup' embedded derby database resource"?
The no suitable driver exception means that the JDBC driver wasn't autoloaded. This usually means that your JDBC driver is not JDBC 4.0 compatible, i.e. the jar file is missing a /META-INF/services/java.sql.Driver file. What version of Derby are you using?
If your jdbc driver is not JDBC 4.0 compatible, and you are unable to update this dependency, you can start your server with the "jdbc.drivers" system property that defines the fully qualified class name of your JDBC driver.
e.g. -Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver
Also, I'm not sure why you have to 2 extra <property/> elements in your database. These would be passed through to the Driver.connect(...) method, and I doubt that derby makes use of them.
Sorry - you posted the Derby version in the 1st post in your thread. This version should be auto-loadable, so I'm not sure why you're getting a "No suitable driver" exception.
It helps to use DriverManager.setLogWriter(System.out) to debug issues like this - that way you can see any exception that might be causing org.apache.derby.jdbc.EmbeddedDriver.acceptsUrl("jdbc:derby:c:/javadb/databases/mcms;create=true") to return false.
okay Paul, thanks for the responses.