← Back to team overview

dhis2-devs team mailing list archive

Re: Exception when importing User and User Role metadata in 2.24

 

Hi there,

In addition to the below import issues, now it seems that the passwords
have not been imported correctly so nobody can log in. The password hashes
in the old database are the same hashes that are contained in the password
xml field in the exported file. However, when the file is imported into the
system, the password hashes are not copied but are completely different in
the user objects created.

Is it the import process maybe taking a hash of the hash? Is this expected
behaviour?

In order to fix this I had to do a sql dump of the old user table, copy it
to the new database, then do a join to update the passwords of the users in
the new database.

Do you have any advice here of what I should be doing to export users from
one instance to populate a new empty instance, without having to do all
these workarounds?

Thanks,

Lorill

On Thu, Mar 30, 2017 at 2:20 PM, Lorill Crees <lcrees@xxxxxxxxxx> wrote:

> Hi,
>
> I have tracked this down. In the User xml object, within the embedded
> UserCredentials object, there is an embedded User object. It appears this
> "user" object is meant to be the user that created the UserCredentials.
>
> In some of the entries, it is the user itself that is contained in the
> embedded instance. In other entries, it contains a user that is elsewhere
> in the xml file to be imported.
>
> In order to allow the import to run without exceptions, I need to either
> delete this embedded user object, or change it to a user that already
> exists in the system prior to the import.
>
> I basically have to delete all the embedded User objects, import the file,
> then revert the deletion, and import the file again as an update.
>
> Below is an example of what is being exported.
>
> Is this expected behaviour? Is there any way that these cases can be
> handled by the app, and not throw an exception? I am doing a straight
> export from one instance to another, both of which are running the same
> DHIS 2 version and build.
>
> Thanks,
>
> Lorill
>
>
> <?xml version='1.0' encoding='UTF-8'?>
> <metaData xmlns="http://dhis2.org/schema/dxf/2.0";
> created="2017-03-30T20:22:15.342+0000">
>     <users>
>         <user name="xxx" created="2015-06-07T11:59:59.183+0000"
> lastUpdated="2015-06-07T11:59:59.183+0000"
>               id="UomqXpvKh8M">
>             <externalAccess>false</externalAccess>
>             <surname>xxx</surname>
>             <firstName>xxx</firstName>
>             <email>xxx@xxxxxxxxx</email>
>             <userCredentials code="xxx" name="xxx"
> created="2015-06-07T11:59:59.033+0000"
>                              lastUpdated="2016-04-04T21:06:22.000+0000"
> id="B8sCr5nOWro">
>                 <externalAccess>false</externalAccess>
> *                <user name="xxx" created="2015-06-07T11:59:59.183+0000"*
> *                      lastUpdated="2015-06-07T11:59:59.183+0000"
> id="UomqXpvKh8M">*
> *                    <externalAccess>false</externalAccess>*
> *                </user>*
>                 <username>xxx</username>
>                 <externalAuth>false</externalAuth>
>                 <password>$2a$10$.nZpxupXABUpy3RNpAl.
> 8uSg2OSsnZgxtSHKDTwjhTTPprSZ5W3vK</password>
>                 <passwordLastUpdated>2015-06-07T11:59:59.034+0000</
> passwordLastUpdated>
>                 <lastLogin>2015-12-22T13:35:41.507+0000</lastLogin>
>                 <selfRegistered>false</selfRegistered>
>                 <invitation>false</invitation>
>                 <disabled>false</disabled>
>                 <userRoles>
>                     <userRole name="Superuser"
> created="2015-05-04T13:43:25.507+0000"
>                               lastUpdated="2017-03-08T22:03:03.771+0000"
> id="cjBTUmG9C9K">
>                         <externalAccess>false</externalAccess>
>                         <publicAccess>--------</publicAccess>
>                         <user name="yyy" created="2015-05-29T06:54:42.
> 002+0000"
>                               lastUpdated="2015-06-02T20:16:52.617+0000"
> id="BcLOMAHqNDV">
>                             <externalAccess>false</externalAccess>
>                         </user>
>                     </userRole>
>                 </userRoles>
>             </userCredentials>
>             <organisationUnits>
>                 <organisationUnit code="malawi" name="Malawi"
> created="2013-06-10T18:34:22.000+0000"
>                                   lastUpdated="2016-02-18T21:28:15.763+0000"
> id="lZsCb6y0KDX">
>                     <externalAccess>false</externalAccess>
>                 </organisationUnit>
>             </organisationUnits>
>             <dataViewOrganisationUnits>
>                 <dataViewOrganisationUnit code="malawi" name="Malawi"
> created="2013-06-10T18:34:22.000+0000"
>                                           lastUpdated="2016-02-18T21:28:15.763+0000"
> id="lZsCb6y0KDX">
>                     <externalAccess>false</externalAccess>
>                 </dataViewOrganisationUnit>
>             </dataViewOrganisationUnits>
>         </user>
>    </users>
> </metaData>
>
> On Wed, Mar 29, 2017 at 1:42 AM, Marc Garnica <marcgarnica13@xxxxxxxxx>
> wrote:
>
>> I assume you are not importing the user with which you are logged in,
>> right? This might be the reason.. If not I don't have any clear idea.
>>
>> Marc Garnica
>>
>> 2017-03-29 0:56 GMT+02:00 Lorill Crees <lcrees@xxxxxxxxxx>:
>>
>>> Hi,
>>>
>>> I am attempting to set up a new empty 2.24 database and populate it with
>>> an export of Org units and Users and User Roles from a different 2.24
>>> database. I exported in xml format, with 2 separate export files for:
>>>
>>>    1. Org units / Org Unit Groups / Org Unit Group Sets / Org Unit
>>>    Levels
>>>    2. Users / User Groups / User Roles
>>>
>>>
>>> I am able to import the org units just fine. However, when I attempt to
>>> import the User/User Role xml file I get an exception and the metadata
>>> import halts (stacktrace below).
>>>
>>> Both instances are running the exact same version of 2.24:
>>>
>>> Version:
>>> 2.24
>>> Build revision:
>>> 294f578
>>> Build date:
>>> 2017-03-20 06:21
>>>
>>> Note that doing a dry run import shows successfully importing 19 users
>>> and 2 UserRoles.
>>>
>>> Also note that doing the export and import via json has the same result.
>>>
>>> Any help resolving this would be appreciated.
>>>
>>> Thanks,
>>>
>>> Lorill
>>>
>>> * INFO  2017-03-28 15:20:37,221 [Level: INFO, category: METADATA_IMPORT,
>>> time: Tue Mar 28 15:20:37 PDT 2017, message: Importing 19 Users]
>>> (InMemoryNotifier.java [taskScheduler-4])
>>>
>>> * INFO  2017-03-28 15:20:37,259 'admin' create org.hisp.dhis.user.User,
>>> name: xxx, uid: spw11k0SXjJ (AuditLogUtil.java [taskScheduler-4])
>>>
>>> * INFO  2017-03-28 15:20:37,281 'admin' update org.hisp.dhis.user.User,
>>> name: xxx, uid: spw11k0SXjJ (AuditLogUtil.java [taskScheduler-4])
>>>
>>> * INFO  2017-03-28 15:20:37,445 'admin' update org.hisp.dhis.user.User,
>>> name: xxx, uid: spw11k0SXjJ (AuditLogUtil.java [taskScheduler-4])
>>>
>>> * ERROR 2017-03-28 15:20:37,460 Unexpected error occurred in scheduled
>>> task. (TaskUtils.java [taskScheduler-4])
>>>
>>> org.hibernate.TransientObjectException: object references an unsaved
>>> transient instance - save the transient instance before flushing:
>>> org.hisp.dhis.user.User
>>>
>>> at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifie
>>> rIfNotUnsaved(ForeignKeys.java:279)
>>>
>>> at org.hibernate.type.EntityType.getIdentifier(EntityType.java:455)
>>>
>>> at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:281)
>>>
>>> at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:291)
>>>
>>> at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:296)
>>>
>>> at org.hibernate.persister.entity.AbstractEntityPersister.findD
>>> irty(AbstractEntityPersister.java:4126)
>>>
>>> at org.hibernate.event.internal.DefaultFlushEntityEventListener
>>> .dirtyCheck(DefaultFlushEntityEventListener.java:528)
>>>
>>> at org.hibernate.event.internal.DefaultFlushEntityEventListener
>>> .isUpdateNecessary(DefaultFlushEntityEventListener.java:215)
>>>
>>> at org.hibernate.event.internal.DefaultFlushEntityEventListener
>>> .onFlushEntity(DefaultFlushEntityEventListener.java:142)
>>>
>>> at org.hibernate.event.internal.AbstractFlushingEventListener.f
>>> lushEntities(AbstractFlushingEventListener.java:216)
>>>
>>> at org.hibernate.event.internal.AbstractFlushingEventListener.f
>>> lushEverythingToExecutions(AbstractFlushingEventListener.java:85)
>>>
>>> at org.hibernate.event.internal.DefaultAutoFlushEventListener.o
>>> nAutoFlush(DefaultAutoFlushEventListener.java:44)
>>>
>>> at org.hibernate.internal.SessionImpl.autoFlushIfRequired(Sessi
>>> onImpl.java:1264)
>>>
>>> at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1332)
>>>
>>> at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
>>>
>>> at org.hibernate.internal.AbstractQueryImpl.uniqueResult(Abstra
>>> ctQueryImpl.java:964)
>>>
>>> at org.hisp.dhis.user.hibernate.HibernateCurrentUserStore.getUs
>>> erCredentialsByUsername(HibernateCurrentUserStore.java:55)
>>>
>>> at org.hisp.dhis.user.DefaultCurrentUserService.getCurrentUser(
>>> DefaultCurrentUserService.java:93)
>>>
>>> at sun.reflect.GeneratedMethodAccessor92.invoke(Unknown Source)
>>>
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>> thodAccessorImpl.java:43)
>>>
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>>
>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>>> gReflection(AopUtils.java:302)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:157)
>>>
>>> at org.springframework.transaction.interceptor.TransactionInter
>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
>>>
>>> at org.springframework.transaction.interceptor.TransactionAspec
>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
>>>
>>> at org.springframework.transaction.interceptor.TransactionInter
>>> ceptor.invoke(TransactionInterceptor.java:96)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:179)
>>>
>>> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(
>>> JdkDynamicAopProxy.java:208)
>>>
>>> at com.sun.proxy.$Proxy54.getCurrentUser(Unknown Source)
>>>
>>> at org.hisp.dhis.hibernate.HibernateGenericStore.getSharingCrit
>>> eria(HibernateGenericStore.java:208)
>>>
>>> at org.hisp.dhis.hibernate.HibernateGenericStore.getSharingCrit
>>> eria(HibernateGenericStore.java:202)
>>>
>>> at org.hisp.dhis.hibernate.HibernateGenericStore.getSharingCrit
>>> eria(HibernateGenericStore.java:287)
>>>
>>> at org.hisp.dhis.hibernate.HibernateGenericStore.getSharingObje
>>> ct(HibernateGenericStore.java:319)
>>>
>>> at org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectSt
>>> ore.getByUid(HibernateIdentifiableObjectStore.java:108)
>>>
>>> at org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectSt
>>> ore.getByUid(HibernateIdentifiableObjectStore.java:58)
>>>
>>> at org.hisp.dhis.common.DefaultIdentifiableObjectManager.get(De
>>> faultIdentifiableObjectManager.java:244)
>>>
>>> at sun.reflect.GeneratedMethodAccessor465.invoke(Unknown Source)
>>>
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>> thodAccessorImpl.java:43)
>>>
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>>
>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>>> gReflection(AopUtils.java:302)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:157)
>>>
>>> at org.springframework.transaction.interceptor.TransactionInter
>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
>>>
>>> at org.springframework.transaction.interceptor.TransactionAspec
>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
>>>
>>> at org.springframework.transaction.interceptor.TransactionInter
>>> ceptor.invoke(TransactionInterceptor.java:96)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:179)
>>>
>>> at org.springframework.aop.interceptor.ExposeInvocationIntercep
>>> tor.invoke(ExposeInvocationInterceptor.java:92)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:179)
>>>
>>> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(
>>> JdkDynamicAopProxy.java:208)
>>>
>>> at com.sun.proxy.$Proxy68.get(Unknown Source)
>>>
>>> at org.hisp.dhis.dxf2.metadata.DefaultObjectBridge.getUidMatch(
>>> DefaultObjectBridge.java:723)
>>>
>>> at org.hisp.dhis.dxf2.metadata.DefaultObjectBridge.findMatches(
>>> DefaultObjectBridge.java:527)
>>>
>>> at org.hisp.dhis.dxf2.metadata.DefaultObjectBridge.getObjects(D
>>> efaultObjectBridge.java:422)
>>>
>>> at org.hisp.dhis.dxf2.metadata.importers.DefaultIdentifiableObj
>>> ectImporter.validateIdentifiableObject(DefaultIdentifiableOb
>>> jectImporter.java:690)
>>>
>>> at org.hisp.dhis.dxf2.metadata.importers.DefaultIdentifiableObj
>>> ectImporter.importObjectLocal(DefaultIdentifiableObjectImpor
>>> ter.java:566)
>>>
>>> at org.hisp.dhis.dxf2.metadata.importers.DefaultIdentifiableObj
>>> ectImporter.importObjects(DefaultIdentifiableObjectImporter.java:191)
>>>
>>> at org.hisp.dhis.dxf2.metadata.DefaultImportService.doImport(De
>>> faultImportService.java:261)
>>>
>>> at org.hisp.dhis.dxf2.metadata.DefaultImportService.importMetaD
>>> ata(DefaultImportService.java:177)
>>>
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>>> ssorImpl.java:62)
>>>
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>> thodAccessorImpl.java:43)
>>>
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>>
>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>>> gReflection(AopUtils.java:302)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:157)
>>>
>>> at org.springframework.transaction.interceptor.TransactionInter
>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
>>>
>>> at org.springframework.transaction.interceptor.TransactionAspec
>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
>>>
>>> at org.springframework.transaction.interceptor.TransactionInter
>>> ceptor.invoke(TransactionInterceptor.java:96)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:179)
>>>
>>> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(
>>> JdkDynamicAopProxy.java:208)
>>>
>>> at com.sun.proxy.$Proxy241.importMetaData(Unknown Source)
>>>
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>>> ssorImpl.java:62)
>>>
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>> thodAccessorImpl.java:43)
>>>
>>> at java.lang.reflect.Method.invoke(Method.java:483)
>>>
>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>>> gReflection(AopUtils.java:302)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:157)
>>>
>>> at org.springframework.aop.support.DelegatingIntroductionInterc
>>> eptor.doProceed(DelegatingIntroductionInterceptor.java:133)
>>>
>>> at org.springframework.aop.support.DelegatingIntroductionInterc
>>> eptor.invoke(DelegatingIntroductionInterceptor.java:121)
>>>
>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>> .proceed(ReflectiveMethodInvocation.java:179)
>>>
>>> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(
>>> JdkDynamicAopProxy.java:208)
>>>
>>> at com.sun.proxy.$Proxy193.importMetaData(Unknown Source)
>>>
>>> at org.hisp.dhis.importexport.action.util.ImportMetaDataTask.ca
>>> ll(ImportMetaDataTask.java:103)
>>>
>>> at org.hisp.dhis.security.SecurityContextRunnable.run(SecurityC
>>> ontextRunnable.java:57)
>>>
>>> at org.springframework.scheduling.support.DelegatingErrorHandli
>>> ngRunnable.run(DelegatingErrorHandlingRunnable.java:54)
>>>
>>> at java.util.concurrent.Executors$RunnableAdapter.call(Executor
>>> s.java:511)
>>>
>>> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>>>
>>> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu
>>> tureTask.access$201(ScheduledThreadPoolExecutor.java:180)
>>>
>>> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu
>>> tureTask.run(ScheduledThreadPoolExecutor.java:293)
>>>
>>> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>>> Executor.java:1142)
>>>
>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
>>> lExecutor.java:617)
>>>
>>> at java.lang.Thread.run(Thread.java:745)
>>> --
>>> Lorill Crees
>>> Project Leader / Senior Developer
>>> 2Paths Solutions Ltd. <http://www.2paths.com>
>>>
>>> lcrees@xxxxxxxxxx
>>> skype: lorill2paths
>>> (604) 689-4123 x 15 <(604)%20689-4123>
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~dhis2-devs
>>> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~dhis2-devs
>>> More help   : https://help.launchpad.net/ListHelp
>>>
>>>
>>
>
>
> --
> Lorill Crees
> Project Leader / Senior Developer
> 2Paths Solutions Ltd. <http://www.2paths.com>
>
> lcrees@xxxxxxxxxx
> skype: lorill2paths
> (604) 689-4123 x 15 <(604)%20689-4123>
>



-- 
Lorill Crees
Project Leader / Senior Developer
2Paths Solutions Ltd. <http://www.2paths.com>

lcrees@xxxxxxxxxx
skype: lorill2paths
(604) 689-4123 x 15

Follow ups

References