Oh i missed couple more things,
1. I found one more issue when using CacheSpringStoreSessionListener with
Web console based Automatic Persistence. Transactional writes seems to fail
& does not seem to work as expected (one table/cache was inserted while
another wasn't when both were in a transaction annotated with
@Transactional. (In the below example for my test input one of the 'Emp'
object inserts would fail on the DB & this should have caused the cache &
table to rollback for both 'Dept' & 'Emp', but i see the partial entry for
'Dept')
Below is the code fragment,
*@Transactional*
*public Boolean insertDepartmentWithEmployees(Dept dept, List<Emp> empList)
{*
* Boolean ret = true;*
* try {*
* System.out.println("==== in
ObjectCacheMgrService.insertDepartmentWithEmployees ==== for dept : " +
dept);*
* String uUID = new IgniteUuid(UUID.randomUUID(),
igniteAtomicSequence.incrementAndGet()).toString();*
* dept.setId(uUID);*
* deptCache.getAndPut(uUID, dept);*
* System.out.println("==== in
ObjectCacheMgrService.insertDepartmentWithEmployees : department ====
inserted succesfully : " + dept);*
* for (Emp emp : empList) {*
* uUID = new IgniteUuid(UUID.randomUUID(),
igniteAtomicSequence.incrementAndGet()).toString();*
* emp.setId(uUID);*
* emp.setDeptid(dept.getId());*
* empCache.getAndPut(uUID, emp);*
* System.out.println("==== in
ObjectCacheMgrService.insertDepartmentWithEmployees : employee ====
inserted succesfully : " + emp);*
* }*
* } catch (Exception e) {*
* System.out.println("==== EXCEPTION in
ObjectCacheMgrService.insertDepartmentWithEmployees ==== message is : " +
e.getMessage());*
* System.out.println("==== EXCEPTION in
ObjectCacheMgrService.insertDepartmentWithEmployees ==== class is : " +
e.getClass().getName());*
* e.printStackTrace();*
* ret = false;*
* }*
* return ret;*
*}*
Below is the CacheSpringStoreSessionListener config segment,
* <!-- Postgresql datasource -->*
* <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">*
* <property name="driverClassName" value="${db.driverClassName}" />*
* <property name="url" value="${db.url}" />*
* <property name="username" value="${db.username}" />*
* <property name="password" value="${db.password}" />*
* <property name="removeAbandonedOnBorrow" value="true"/>*
* <property name="initialSize" value="10" />*
* <property name="maxTotal" value="20" />*
* <property name="maxIdle" value="5" />*
* <property name="minIdle" value="0" />*
* <property name="maxWaitMillis" value="90000" />*
* <property name="minEvictableIdleTimeMillis" value="900000" />*
* <property name="softMinEvictableIdleTimeMillis" value="900000" />*
* <property name="validationQuery" value="select 1" />*
* <property name="validationQueryTimeout" value="90" />*
* <property name="defaultTransactionIsolation" value="1" />*
* </bean>*
* <!-- For transaction manager, using DataSourceTransactionManager"
since we are using JDBC local tx -->*
* <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">*
* <property name="dataSource" ref="dataSource" />*
* <property name="defaultTimeout" value="300" />*
* </bean>*
<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven />
* <property name="CacheStoreSessionListenerFactories">*
* <list>*
* <bean
class="javax.cache.configuration.FactoryBuilder$SingletonFactory">*
* <constructor-arg>*
* <bean
class="org.apache.ignite.cache.store.spring.CacheSpringStoreSessionListener">*
* <!-- Inject transaction manager. -->*
* <property name="transactionManager"
ref="transactionManager"/>*
* </bean>*
* </constructor-arg>*
* </bean>*
* </list>*
* </property>*
Below is the exception (RunTimeException subclass only) getting thrown,
==== EXCEPTION in ObjectCacheMgrService.insertDepartmentWithEmployees ====
class is : javax.cache.integration.CacheWriterException
javax.cache.integration.CacheWriterException: class org.apache.ignite.
transactions.TransactionRollbackException: Transaction has been rolled
back: b5584ef8c51-00000000-0678-3b15-0000-000000000001
at org.apache.ignite.internal.processors.cache.GridCacheUtils.
convertToCacheException(GridCacheUtils.java:1404)
at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.
cacheException(IgniteCacheProxy.java:2641)
at org.apache.ignite.internal.processors.cache.
IgniteCacheProxy.getAndPut(IgniteCacheProxy.java:1589)
at com.brocade.dcm.server.service.ObjectCacheMgrService.
insertDepartmentWithEmployees(ObjectCacheMgrService.java:101)
at com.brocade.dcm.server.service.ObjectCacheMgrService$
$FastClassBySpringCGLIB$$2d159c39.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(
MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$
CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)
at org.springframework.aop.framework.ReflectiveMethodInvocation.
proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.
TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:
99)
at org.springframework.transaction.interceptor.
TransactionAspectSupport.invokeWithinTransaction(
TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.
TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.
proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$
DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
at com.brocade.dcm.server.service.ObjectCacheMgrService$
$EnhancerBySpringCGLIB$$592efdc.insertDepartmentWithEmployees(<generated>)
at com.brocade.dcm.server.controller.ObjectCacheMgrServiceControlle
r.putPost(ObjectCacheMgrServiceController.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.
doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.
invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.
ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.
java:116)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.invokeHandlerMethod(
RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.
java:738)
at org.springframework.web.servlet.mvc.method.
AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.
doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.
doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(
FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.
doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at org.springframework.web.servlet.FrameworkServlet.
service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(
WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.RequestContextFilter.
doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.HttpPutFormContentFilter.
doFilterInternal(HttpPutFormContentFilter.java:105)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.HiddenHttpMethodFilter.
doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.CharacterEncodingFilter.
doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(
StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(
StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(
AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(
StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(
ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(
StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(
CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(
Http11Processor.java:783)
at org.apache.coyote.AbstractProcessorLight.process(
AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(
AbstractProtocol.java:798)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
doRun(NioEndpoint.java:1434)
at org.apache.tomcat.util.net.SocketProcessorBase.run(
SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: class org.apache.ignite.transactions.TransactionRollbackException:
Transaction has been rolled back: b5584ef8c51-00000000-0678-
3b15-0000-000000000001
at org.apache.ignite.internal.util.IgniteUtils$11.apply(
IgniteUtils.java:843)
at org.apache.ignite.internal.util.IgniteUtils$11.apply(
IgniteUtils.java:841)
at org.apache.ignite.internal.util.IgniteUtils.
convertExceptionNoWrap(IgniteUtils.java:911)
... 69 more
Caused by: class org.apache.ignite.internal.transactions.
IgniteTxRollbackCheckedException: Transaction has been rolled back:
b5584ef8c51-00000000-0678-3b15-0000-000000000001
at org.apache.ignite.internal.processors.cache.
GridCacheAdapter.syncOp(GridCacheAdapter.java:4054)
at org.apache.ignite.internal.processors.cache.
GridCacheAdapter.getAndPut0(GridCacheAdapter.java:2259)
at org.apache.ignite.internal.processors.cache.
GridCacheAdapter.getAndPut(GridCacheAdapter.java:2242)
at org.apache.ignite.internal.processors.cache.
GridCacheAdapter.getAndPut(GridCacheAdapter.java:2221)
at org.apache.ignite.internal.processors.cache.
IgniteCacheProxy.getAndPut(IgniteCacheProxy.java:1582)
... 66 more
Caused by: class org.apache.ignite.IgniteCheckedException: Failed update
entry in database [table=dcm.emp, entry=Entry
[key=a0594ef8c51-f6aac86d-689c-43cc-99ad-2a04825bb0cc,
val=com.brocade.dcm.domain.model.
Emp [idHash=693577784, hash=1434265603,
id=a0594ef8c51-f6aac86d-689c-43cc-99ad-2a04825bb0cc,
ename=Jacky, job=SDEV1, mgr=2, hiredate=2017-05-28, sal=100000, comm=50000,
deptid=90594ef8c51-45a6457b-518e-473c-
aecc-7348b1ed31a5]]]
at org.apache.ignite.internal.processors.cache.store.
GridCacheStoreManagerAdapter.put(GridCacheStoreManagerAdapter.java:576)
at org.apache.ignite.internal.processors.cache.store.
GridCacheStoreManagerAdapter.putAll(GridCacheStoreManagerAdapter.java:609)
at org.apache.ignite.internal.processors.cache.transactions.
IgniteTxAdapter.batchStoreCommit(IgniteTxAdapter.java:1326)
at org.apache.ignite.internal.processors.cache.transactions.
IgniteTxLocalAdapter.userCommit(IgniteTxLocalAdapter.java:500)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal.localFinish(GridNearTxLocal.java:3021)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxFinishFuture.finish(GridNearTxFinishFuture.java:405)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal$16.apply(GridNearTxLocal.java:3171)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal$16.apply(GridNearTxLocal.java:3163)
at org.apache.ignite.internal.util.future.GridFutureAdapter.
notifyListener(GridFutureAdapter.java:382)
at org.apache.ignite.internal.util.future.GridFutureAdapter.
listen(GridFutureAdapter.java:352)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal.commitNearTxLocalAsync(GridNearTxLocal.java:3163)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal.optimisticPutFuture(GridNearTxLocal.java:2373)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal.putAsync0(GridNearTxLocal.java:623)
at org.apache.ignite.internal.processors.cache.distributed.
near.GridNearTxLocal.putAsync(GridNearTxLocal.java:386)
at org.apache.ignite.internal.processors.cache.
GridCacheAdapter$20.op(GridCacheAdapter.java:2261)
at org.apache.ignite.internal.processors.cache.
GridCacheAdapter.syncOp(GridCacheAdapter.java:4040)
... 70 more
Caused by: javax.cache.integration.CacheWriterException: Failed update
entry in database [table=dcm.emp, entry=Entry
[key=a0594ef8c51-f6aac86d-689c-43cc-99ad-2a04825bb0cc,
val=com.brocade.dcm.domain.model.Em
p [idHash=693577784, hash=1434265603,
id=a0594ef8c51-f6aac86d-689c-43cc-99ad-2a04825bb0cc,
ename=Jacky, job=SDEV1, mgr=2, hiredate=2017-05-28, sal=100000, comm=50000,
deptid=90594ef8c51-45a6457b-518e-473c-ae
cc-7348b1ed31a5]]]
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.
writeUpsert(CacheAbstractJdbcStore.java:955)
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.
write(CacheAbstractJdbcStore.java:1006)
at org.apache.ignite.internal.processors.cache.store.
GridCacheStoreManagerAdapter.put(GridCacheStoreManagerAdapter.java:568)
... 85 more
Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is
aborted, commands ignored until end of transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(
QueryExecutorImpl.java:2476)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(
QueryExecutorImpl.java:2189)
at org.postgresql.core.v3.QueryExecutorImpl.execute(
QueryExecutorImpl.java:300)
at org.postgresql.jdbc.PgStatement.executeInternal(
PgStatement.java:428)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(
PgPreparedStatement.java:169)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(
PgPreparedStatement.java:136)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.
executeUpdate(DelegatingPreparedStatement.java:98)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.
executeUpdate(DelegatingPreparedStatement.java:98)
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.
writeUpsert(CacheAbstractJdbcStore.java:902)
... 87 more
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value
violates unique constraint "dcm_emp_ename"
Detail: Key (ename)=(Jacky) already exists.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(
QueryExecutorImpl.java:2476)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(
QueryExecutorImpl.java:2189)
at org.postgresql.core.v3.QueryExecutorImpl.execute(
QueryExecutorImpl.java:300)
at org.postgresql.jdbc.PgStatement.executeInternal(
PgStatement.java:428)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(
PgPreparedStatement.java:169)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(
PgPreparedStatement.java:136)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.
executeUpdate(DelegatingPreparedStatement.java:98)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.
executeUpdate(DelegatingPreparedStatement.java:98)
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.
writeUpsert(CacheAbstractJdbcStore.java:908)
... 87 more
Jun 09, 2017 7:46:19 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with
path [] threw exception [Request processing failed; nested exception is
org.springframework.transaction.UnexpectedRollbackException:
Transaction rolled back because it has been marked as rollback-only] with
root cause
org.springframework.transaction.UnexpectedRollbackException: Transaction
rolled back because it has been marked as rollback-only
at org.springframework.transaction.support.
AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionMan
ager.java:724)
at org.springframework.transaction.interceptor.
TransactionAspectSupport.commitTransactionAfterReturnin
g(TransactionAspectSupport.java:504)
at org.springframework.transaction.interceptor.
TransactionAspectSupport.invokeWithinTransaction(
TransactionAspectSupport.java:292)
at org.springframework.transaction.interceptor.
TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.
proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$
DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
at com.brocade.dcm.server.service.ObjectCacheMgrService$
$EnhancerBySpringCGLIB$$592efdc.insertDepartmentWithEmployees(<generated>)
at com.brocade.dcm.server.controller.ObjectCacheMgrServiceControlle
r.putPost(ObjectCacheMgrServiceController.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.
doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.
invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.
ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.
java:116)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.invokeHandlerMethod(
RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.
java:738)
at org.springframework.web.servlet.mvc.method.
AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.
doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.
doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(
FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.
doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at org.springframework.web.servlet.FrameworkServlet.
service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(
WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.RequestContextFilter.
doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.HttpPutFormContentFilter.
doFilterInternal(HttpPutFormContentFilter.java:105)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.HiddenHttpMethodFilter.
doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.springframework.web.filter.CharacterEncodingFilter.
doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.
doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(
StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(
StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(
AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(
StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(
ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(
StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(
CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(
Http11Processor.java:783)
at org.apache.coyote.AbstractProcessorLight.process(
AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(
AbstractProtocol.java:798)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
doRun(NioEndpoint.java:1434)
at org.apache.tomcat.util.net.SocketProcessorBase.run(
SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
2. With Ignite/Web Console, if a DB table insert/update/delete operation
were to happen to the database directly is there a way to have that
automatically picked up into the cache (so its always in sync with the DB
tables)? I know this is too much to ask. I ask because we currently have
code which uses MyBatis as ORM to read/write to PostgreSQL DB & i need to
build a cache without trying to integrate with MyBatis which is
problematic. I have some tools in mind & things like messaging based loads,
etc to try but if Ignite does this with some integration that would be
great.
Regards,
Muthu
On Fri, Jun 9, 2017 at 8:12 PM, Muthu <[email protected]> wrote:
> Hi Alexey,
>
> I have attached the generated files from web console. But the culprit for
> this issue was the below config piece that is generated by web console in
> the CacheConfiguration for each cache
>
>
> *<property name="indexedTypes">*
> * <list>*
> * <value>java.lang.String</value>*
> *
> <value>com.brocade.dcm.domain.model.Dept</value>*
> * </list>*
> *</property>*
>
> Originally in the above config piece the first value was getting generated
> as simply "String" instead of "java.lang.String". I corrected it after
> looking at the exception on first startup before hitting this issue. Then i
> commented out the above config & the exception went away.
>
> But i found some more issues. The model generation seems to miss
> generating some fields & their getters/setters. For example for the table "
> *dcm.emp*" i described earlier (i am not copy pasting the table again
> here for brevity), the generated model DTOs did not have the field "private
> String id;" and the corresponding getters & setters for it..i had to add it
> manually in the DTO and edit the equals, hashCode & toString to fix it. I
> think manually doing this for a lot of tables is very cumbersome...
>
> *public class Dept implements Serializable {*
> *...*
> *...*
>
> *private String id;*
>
> *public String getId() {*
> * return id;*
> * }*
>
> * public void setId(String id) {*
> * this.id <http://this.id> = id;*
> * }*
> *...*
> *...*
> *}*
>
> Regards,
> Muthu
>
> On Fri, Jun 9, 2017 at 6:43 PM, Alexey Kuznetsov <[email protected]>
> wrote:
>
>> Muthu,
>>
>> Could you also attach files generated by WebConsole?
>>
>> On Sat, Jun 10, 2017 at 7:07 AM, Muthu <[email protected]> wrote:
>>
>>> Hi Folks,
>>>
>>> I used the new Web console to generate the models/artifacts to be used
>>> for automatic persistence. But when i bring up a Spring Boot server with
>>> IgniteSpringBean it fails due to a 'query registration issue'..below is the
>>> stack trace...i suspect from searching online that some word used in a
>>> column is not being accepted by H2 but couldn't figure that out from the
>>> exception...does anyone have a clue?
>>>
>>> *SEVERE: Got exception while starting (will rollback startup routine).*
>>> *class org.apache.ignite.IgniteCheckedException: Failed to register
>>> query type: QueryTypeDescriptorImpl [space=DcmEmpCache, name=Emp,
>>> tblName=null, fields={}, idxs={}, fullTextIdx=null, keyCls=class java.lang*
>>> *.String, valCls=class java.lang.Object, keyTypeName=java.lang.String,
>>> valTypeName=com.brocade.dcm.do <http://com.brocade.dcm.do>main.model.Emp,
>>> valTextIdx=false, typeId=0, affKey=null, keyFieldName=null,
>>> valFieldName=null, obsolete=fal*
>>> *se]*
>>> at org.apache.ignite.internal.processors.query.h2.IgniteH2Index
>>> ing.registerType(IgniteH2Indexing.java:1866)
>>> at org.apache.ignite.internal.processors.query.GridQueryProcess
>>> or.registerCache0(GridQueryProcessor.java:1306)
>>> at org.apache.ignite.internal.processors.query.GridQueryProcess
>>> or.onCacheStart0(GridQueryProcessor.java:756)
>>> at org.apache.ignite.internal.processors.query.GridQueryProcess
>>> or.onCacheStart(GridQueryProcessor.java:817)
>>> at org.apache.ignite.internal.processors.cache.GridCacheProcess
>>> or.startCache(GridCacheProcessor.java:1265)
>>> at org.apache.ignite.internal.processors.cache.GridCacheProcess
>>> or.onKernalStart(GridCacheProcessor.java:898)
>>> at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.j
>>> ava:1013)
>>> at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.st
>>> art0(IgnitionEx.java:1895)
>>> at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.st
>>> art(IgnitionEx.java:1647)
>>> at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java
>>> :1075)
>>> at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:
>>> 573)
>>> at org.apache.ignite.IgniteSpring.start(IgniteSpring.java:66)
>>> at org.apache.ignite.IgniteSpringBean.afterPropertiesSet(Ignite
>>> SpringBean.java:159)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.invokeInitMethods(AbstractAutowireCapableBe
>>> anFactory.java:1687)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.initializeBean(AbstractAutowireCapableBeanF
>>> actory.java:1624)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFac
>>> tory.java:555)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y$1.getObject(AbstractBeanFactory.java:306)
>>> at org.springframework.beans.factory.support.DefaultSingletonBe
>>> anRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y.doGetBean(AbstractBeanFactory.java:302)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y.getBean(AbstractBeanFactory.java:202)
>>> at org.springframework.beans.factory.config.DependencyDescripto
>>> r.resolveCandidate(DependencyDescriptor.java:208)
>>> at org.springframework.beans.factory.support.DefaultListableBea
>>> nFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
>>> at org.springframework.beans.factory.support.DefaultListableBea
>>> nFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
>>> at org.springframework.beans.factory.annotation.AutowiredAnnota
>>> tionBeanPostProcessor$AutowiredFieldElement.inject(Autowired
>>> AnnotationBeanPostProcessor.java:585)
>>> at org.springframework.beans.factory.annotation.InjectionMetada
>>> ta.inject(InjectionMetadata.java:88)
>>> at org.springframework.beans.factory.annotation.AutowiredAnnota
>>> tionBeanPostProcessor.postProcessPropertyValues(AutowiredAnn
>>> otationBeanPostProcessor.java:366)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.populateBean(AbstractAutowireCapableBeanFac
>>> tory.java:1264)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFac
>>> tory.java:553)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y$1.getObject(AbstractBeanFactory.java:306)
>>> at org.springframework.beans.factory.support.DefaultSingletonBe
>>> anRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y.doGetBean(AbstractBeanFactory.java:302)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y.getBean(AbstractBeanFactory.java:202)
>>> at org.springframework.beans.factory.config.DependencyDescripto
>>> r.resolveCandidate(DependencyDescriptor.java:208)
>>> at org.springframework.beans.factory.support.DefaultListableBea
>>> nFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
>>> at org.springframework.beans.factory.support.DefaultListableBea
>>> nFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
>>> at org.springframework.beans.factory.annotation.AutowiredAnnota
>>> tionBeanPostProcessor$AutowiredFieldElement.inject(Autowired
>>> AnnotationBeanPostProcessor.java:585)
>>> at org.springframework.beans.factory.annotation.InjectionMetada
>>> ta.inject(InjectionMetadata.java:88)
>>> at org.springframework.beans.factory.annotation.AutowiredAnnota
>>> tionBeanPostProcessor.postProcessPropertyValues(AutowiredAnn
>>> otationBeanPostProcessor.java:366)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.populateBean(AbstractAutowireCapableBeanFac
>>> tory.java:1264)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFac
>>> tory.java:553)
>>> at org.springframework.beans.factory.support.AbstractAutowireCa
>>> pableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y$1.getObject(AbstractBeanFactory.java:306)
>>> at org.springframework.beans.factory.support.DefaultSingletonBe
>>> anRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y.doGetBean(AbstractBeanFactory.java:302)
>>> at org.springframework.beans.factory.support.AbstractBeanFactor
>>> y.getBean(AbstractBeanFactory.java:197)
>>> at org.springframework.beans.factory.support.DefaultListableBea
>>> nFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
>>> at org.springframework.context.support.AbstractApplicationConte
>>> xt.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
>>> at org.springframework.context.support.AbstractApplicationConte
>>> xt.refresh(AbstractApplicationContext.java:542)
>>> at org.springframework.boot.context.embedded.EmbeddedWebApplica
>>> tionContext.refresh(EmbeddedWebApplicationContext.java:122)
>>> at org.springframework.boot.SpringApplication.refresh(SpringApp
>>> lication.java:737)
>>> at org.springframework.boot.SpringApplication.refreshContext(Sp
>>> ringApplication.java:370)
>>> at org.springframework.boot.SpringApplication.run(SpringApplica
>>> tion.java:314)
>>> at org.springframework.boot.SpringApplication.run(SpringApplica
>>> tion.java:1162)
>>> at org.springframework.boot.SpringApplication.run(SpringApplica
>>> tion.java:1151)
>>> at com.brocade.dcm.server.ObjectCacheMgrApplication.main(Object
>>> CacheMgrApplication.java:12)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>>> Source)
>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>> at org.springframework.boot.loader.MainMethodRunner.run(MainMet
>>> hodRunner.java:48)
>>> at org.springframework.boot.loader.Launcher.launch(Launcher.jav
>>> a:87)
>>> at org.springframework.boot.loader.Launcher.launch(Launcher.jav
>>> a:50)
>>> at org.springframework.boot.loader.JarLauncher.main(JarLauncher
>>> .java:51)
>>> *Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement
>>> "CREATE TABLE ""DcmEmpCache"".EMP (_KEY VARCHAR VISIBLE[*] NOT NULL,_VAL
>>> OTHER VISIBLE,_VER OTHER INVISIBLE) ENGINE ""org.apache.ignite.*
>>> *internal.processors.query.h2.IgniteH2Indexing$H2TableEngine"" ";
>>> expected "(, FOR, UNSIGNED, NOT, NULL, AS, DEFAULT, GENERATED, NOT, NULL,
>>> AUTO_INCREMENT, BIGSERIAL, SERIAL, IDENTITY, NULL_TO_DEFAULT, SEQUEN*
>>> *CE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL,
>>> CHECK, REFERENCES, ,, )"; SQL statement:*
>>> *CREATE TABLE "DcmEmpCache".Emp (_key VARCHAR VISIBLE NOT NULL,_val
>>> OTHER VISIBLE,_ver OTHER INVISIBLE) engine "org.apache.ignite.internal.pr
>>> <http://org.apache.ignite.internal.pr>ocessors.query.h2.IgniteH2Indexing$H2TableEngine"
>>> [42001-193]*
>>> at org.h2.message.DbException.getJdbcSQLException(DbException.j
>>> ava:345)
>>> at org.h2.message.DbException.getSyntaxError(DbException.java:2
>>> 05)
>>> at org.h2.command.Parser.getSyntaxError(Parser.java:537)
>>> at org.h2.command.Parser.read(Parser.java:3186)
>>> at org.h2.command.Parser.readIfMore(Parser.java:885)
>>> at org.h2.command.Parser.parseCreateTable(Parser.java:6043)
>>> at org.h2.command.Parser.parseCreate(Parser.java:4238)
>>> at org.h2.command.Parser.parsePrepared(Parser.java:362)
>>> at org.h2.command.Parser.parse(Parser.java:317)
>>> at org.h2.command.Parser.parse(Parser.java:293)
>>> at org.h2.command.Parser.prepareCommand(Parser.java:254)
>>> at org.h2.engine.Session.prepareLocal(Session.java:561)
>>> at org.h2.engine.Session.prepareCommand(Session.java:502)
>>> at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.jav
>>> a:1203)
>>> at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java
>>> :170)
>>> at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
>>> at org.apache.ignite.internal.processors.query.h2.IgniteH2Index
>>> ing$H2TableEngine.createTable(IgniteH2Indexing.java:3975)
>>> at org.apache.ignite.internal.processors.query.h2.IgniteH2Index
>>> ing.createTable(IgniteH2Indexing.java:2006)
>>> at org.apache.ignite.internal.processors.query.h2.IgniteH2Index
>>> ing.registerType(IgniteH2Indexing.java:1859)
>>> ... 64 more
>>>
>>>
>>> Below is my table schema,
>>>
>>> *CREATE TABLE dcm.emp*
>>> *(*
>>> * id text NOT NULL,*
>>> * ename text,*
>>> * job text,*
>>> * mgr text,*
>>> * hiredate date,*
>>> * sal integer,*
>>> * comm integer,*
>>> * deptid text,*
>>> * CONSTRAINT pk_emp PRIMARY KEY (id),*
>>> * CONSTRAINT fk_deptid FOREIGN KEY (deptid)*
>>> * REFERENCES dcm.dept (id) MATCH SIMPLE*
>>> * ON UPDATE RESTRICT ON DELETE CASCADE*
>>> *)*
>>> *WITH (*
>>> * OIDS=FALSE*
>>> *);*
>>> *ALTER TABLE dcm.emp*
>>> * OWNER TO postgres;*
>>>
>>>
>>> Regards,
>>> Muthu
>>>
>>
>>
>>
>> --
>> Alexey Kuznetsov
>>
>
>