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/

Reply via email to