On 28/09/2012 11:51, Colm O hEigeartaigh wrote:
Hi Francesco,
> When you manually change some field - mapped as 'AccountId' in
Syncope - on an external resource, Syncope does not have
> anymore an handle to understand that the remote user object is
linked to an internal user.
> H2 behavior looks normal the but ApacheDS' does not sound: have you
tried to look at connid log during the further synchronization
> from ApacheDS?
Here is the exception that appears in "core.log". The scenario is that
a user "bob" that was successfuly synchronized previously, has now
been renamed to "bob2" in the Apache DS backend. Should I open a JIRA
for this?
From the stacktrace below I understand that Syncope is trying to do the
same as in the H2 case (e.g. create a new user when manually changing
the attribute mapped as AccountId) but it fails because some of the
attributes mapped in Syncope for the ApacheDS resource have the 'UNIQUE'
constraint defined in the related attribute schema.
It looks like normal behavior to me.
Regards.
10:45:57.806 ERROR org.apache.syncope.core.scheduling.AbstractTaskJob
- Could not create user bob2
org.springframework.dao.DataIntegrityViolationException: The
transaction has been rolled back. See the nested exceptions for
details on the errors that occurred.; nested exception is
<openjpa-2.2.0-r422266:1244990 fatal store error>
org.apache.openjpa.persistence.EntityExistsException: The transaction
has been rolled back. See the nested exceptions for details on the
errors that occurred.
FailedObject:
org.apache.syncope.core.persistence.beans.user.UAttrUniqueValue@36d544bf
at
org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:318)
~[spring-orm-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible(DefaultJpaDialect.java:120)
~[spring-orm-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:516)
~[spring-orm-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
~[spring-tx-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
~[spring-tx-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:394)
~[spring-tx-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
~[spring-tx-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
~[spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
~[spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at $Proxy123.create(Unknown Source) ~[na:na]
at
org.apache.syncope.core.scheduling.SyncJob.createUser(SyncJob.java:331) [SyncJob.class:na]
at
org.apache.syncope.core.scheduling.SyncJob.handleDelta(SyncJob.java:716)
[SyncJob.class:na]
at
org.apache.syncope.core.scheduling.SyncJob$1.handle(SyncJob.java:645)
[SyncJob$1.class:na]
at
org.apache.syncope.core.propagation.ConnectorFacadeProxy$1.handle(ConnectorFacadeProxy.java:374)
[ConnectorFacadeProxy$1.class:na]
at
org.identityconnectors.framework.impl.api.StreamHandlerUtil$ObjectStreamHandlerAdapter.handle(StreamHandlerUtil.java:79)
[framework-internal-1.3.2.jar:na]
at
org.identityconnectors.framework.impl.api.BufferedResultsProxy.invoke(BufferedResultsProxy.java:268)
[framework-internal-1.3.2.jar:na]
at
org.identityconnectors.framework.impl.api.DelegatingTimeoutProxy.invoke(DelegatingTimeoutProxy.java:102)
[framework-internal-1.3.2.jar:na]
at $Proxy173.search(Unknown Source) [na:na]
at sun.reflect.GeneratedMethodAccessor438.invoke(Unknown Source)
~[na:na]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
~[na:1.6.0_35]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_35]
at
org.identityconnectors.framework.impl.api.LoggingProxy.invoke(LoggingProxy.java:76)
[framework-internal-1.3.2.jar:na]
at $Proxy173.search(Unknown Source) [na:na]
at
org.identityconnectors.framework.impl.api.AbstractConnectorFacade.search(AbstractConnectorFacade.java:142)
[framework-internal-1.3.2.jar:na]
at
org.apache.syncope.core.propagation.ConnectorFacadeProxy.getAllObjects(ConnectorFacadeProxy.java:364)
[ConnectorFacadeProxy.class:na]
at
org.apache.syncope.core.scheduling.SyncJob.doExecute(SyncJob.java:640)
[SyncJob.class:na]
at
org.apache.syncope.core.scheduling.AbstractTaskJob.execute(AbstractTaskJob.java:101)
[AbstractTaskJob.class:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
[quartz-1.8.6.jar:na]
at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
[quartz-1.8.6.jar:na]
Caused by: org.apache.openjpa.persistence.EntityExistsException: The
transaction has been rolled back. See the nested exceptions for
details on the errors that occurred.
at
org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2337)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2174)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2072)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1990)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1514)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:933)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:570)
~[openjpa-persistence-2.2.0.jar:2.2.0]
at
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)
~[spring-orm-3.1.2.RELEASE.jar:3.1.2.RELEASE]
... 26 common frames omitted
Caused by: org.apache.openjpa.persistence.EntityExistsException:
Unique index or primary key violation: "U_TTRNQVL_STRINGVALUE_INDEX_9
ON PUBLIC.UATTRUNIQUEVALUE(STRINGVALUE, SCHEMA_NAME)"; SQL statement:
INSERT INTO PUBLIC.UAttrUniqueValue (ID, BOOLEANVALUE, DATEVALUE,
DOUBLEVALUE, LONGVALUE, STRINGVALUE, ATTRIBUTE_ID, SCHEMA_NAME) VALUES
(?, ?, ?, ?, ?, ?, ?, ?) [23505-168] {prepstmnt 271272750 INSERT INTO
PUBLIC.UAttrUniqueValue (ID, BOOLEANVALUE, DATEVALUE, DOUBLEVALUE,
LONGVALUE, STRINGVALUE, ATTRIBUTE_ID, SCHEMA_NAME) VALUES (?, ?, ?, ?,
?, ?, ?, ?) [params=?, ?, ?, ?, ?, ?, ?, ?]} [code=23505, state=23505]
at
org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4903) ~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4878)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:78)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:143)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:79)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:99)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:87)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:357)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flushGraph(ConstraintUpdateManager.java:349)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:97)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:103)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:76)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:713)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
~[openjpa-kernel-2.2.0.jar:2.2.0]
at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
~[openjpa-kernel-2.2.0.jar:2.2.0]
... 34 common frames omitted
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Unique
index or primary key violation: "U_TTRNQVL_STRINGVALUE_INDEX_9 ON
PUBLIC.UATTRUNIQUEVALUE(STRINGVALUE, SCHEMA_NAME)"; SQL statement:
INSERT INTO PUBLIC.UAttrUniqueValue (ID, BOOLEANVALUE, DATEVALUE,
DOUBLEVALUE, LONGVALUE, STRINGVALUE, ATTRIBUTE_ID, SCHEMA_NAME) VALUES
(?, ?, ?, ?, ?, ?, ?, ?) [23505-168] {prepstmnt 271272750 INSERT INTO
PUBLIC.UAttrUniqueValue (ID, BOOLEANVALUE, DATEVALUE, DOUBLEVALUE,
LONGVALUE, STRINGVALUE, ATTRIBUTE_ID, SCHEMA_NAME) VALUES (?, ?, ?, ?,
?, ?, ?, ?) [params=?, ?, ?, ?, ?, ?, ?, ?]} [code=23505, state=23505]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:247)
~[openjpa-lib-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:223)
~[openjpa-lib-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1000(LoggingConnectionDecorator.java:72)
~[openjpa-lib-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:1162)
~[openjpa-lib-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:272)
~[openjpa-lib-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1741)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate(PreparedStatementManagerImpl.java:267)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:118)
~[openjpa-jdbc-2.2.0.jar:2.2.0]
... 47 common frames omitted
--
Francesco Chicchiriccò
ASF Member, Apache Cocoon PMC and Apache Syncope PPMC Member
http://people.apache.org/~ilgrosso/