Hi Lorill Sorry for getting back to you on this so late, but I think this is fixed in 2.25+ now, could you have a look?
-- Morten Olav Hansen Senior Engineer, DHIS 2 University of Oslo http://www.dhis2.org On Fri, Mar 31, 2017 at 11:31 PM, Lorill Crees <lcr...@2paths.com> wrote: > 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 <lcr...@2paths.com> 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>x...@gmail.com</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$.nZpxupXABUpy >> 3RNpAl.8uSg2OSsnZgxtSHKDTwjhTTPprSZ5W3vK</password> >> <passwordLastUpdated>2015-06-0 >> 7T11: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.0 >> 02+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 <marcgarnic...@gmail.com> >> 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 <lcr...@2paths.com>: >>> >>>> 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> >>>> >>>> lcr...@2paths.com >>>> skype: lorill2paths >>>> (604) 689-4123 x 15 <(604)%20689-4123> >>>> >>>> _______________________________________________ >>>> Mailing list: https://launchpad.net/~dhis2-devs >>>> Post to : dhis2-devs@lists.launchpad.net >>>> 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> >> >> lcr...@2paths.com >> skype: lorill2paths >> (604) 689-4123 x 15 <(604)%20689-4123> >> > > > > -- > Lorill Crees > Project Leader / Senior Developer > 2Paths Solutions Ltd. <http://www.2paths.com> > > lcr...@2paths.com > skype: lorill2paths > (604) 689-4123 x 15 > > _______________________________________________ > Mailing list: https://launchpad.net/~dhis2-devs > Post to : dhis2-devs@lists.launchpad.net > Unsubscribe : https://launchpad.net/~dhis2-devs > More help : https://help.launchpad.net/ListHelp > >
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp