Import Export Data Migration Tools

Supported Operations

Import/Export provides IMPORT, LIST, EXPORT, and DELETE operations for supported portal entities.

Import

Adds the entities defined in the specified XML file(s) to the portal database. If the specified entities are already present – determined by Id, Name, or other primary key, as appropriate – this operation will update the existing entity to match the information provided in the XML.

Usage
Import Multiple Files
ant data-import -Ddir={path-to-directory} [-Dpattern={ant-pattern}]

Where path-to-directory is a file system directory, absolute or relative, containing uPortal Import/Export XML files; and pattern is an (optional) Ant Filesystem Pattern specifying a file name pattern that candidate files must match.

 

Import Single File
ant data-import -Dfile={path-to-file}

Where path-to-file is a file system path, absolute or relative, containing uPortal Import/Export XML file.

 

(new with uPortal 4.3):  

Import Single File
ant data-import -Dfiles={comma-separated-list-of-files}

Where comma-separated-list-of-files is a comma-separated list of file system paths, absolute or relative, containing uPortal Import/Export XML files.

 

(new with uPortal 4.3):  

Import Single File
ant data-import -DfilesListFile={path-to-file}

Where path-to-file is an absolute or relative file system path to a file that contains a list of absolute or relative file system paths each of which is a uPortal Import/Export XML file.  The files are processed in the order listed, so care must be taken to insure you order them so they import properly.

List

Lists the data types the portal knows how to import/export/delete and can list all of the data currently in the database for a specific type. The data-list command with no arguments lists all supported portal data types and the operations (export, delete) supported for each. By adding the -Dtype= parameter all data that currently exists in the portal for that data type is listed

Usage
list types
ant data-list

Example output:

 [java] INFO Export and Delete Support by Data Type
 [java] INFO Data Type | Export | Delete 
 [java] INFO -----------------------+--------+--------
 [java] INFO entity-type | true | false 
 [java] INFO fragment-definition | true | false 
 [java] INFO fragment-layout | true | false 
 [java] INFO group-membership | true | false 
 [java] INFO layout | true | false 
 [java] INFO permission-owner | true | true 
 [java] INFO permission-set | true | false 
 [java] INFO portlet-definition | true | true 
 [java] INFO portlet-type | true | true 
 [java] INFO profile | true | false 
 [java] INFO stylesheet-descriptor | true | true 
 [java] INFO user | true | true 
List data of a specific type
ant data-list -Dtype={entity-type}

Where entity-type is the name of a portal data type, these can be determined by the plain ant data-list command.

Example Output, note that the part before the " - " is the sysid to use with the data-export and data-delete commands.

 [java] INFO All portlet-definition data
 [java] INFO     fragment-audit - Audit DLM Fragments
 [java] INFO     forgot-password - Forgot Password
 [java] INFO     passwordmgr - Password Management
 [java] INFO     ImportExportPortlet - Import Export Portlet
 [java] INFO     cache-manager - Cache Manager
 [java] INFO     popular-portlets - Most Popular Apps

Export

Creates XML files representing the requested entities and writes them to the specified file system location.

Usage
ant data-export -Ddir={path-to-directory} -Dtype={entity-type} [-Dsysid={entity-identifier}]

Where path-to-directory is a file system directory, absolute or relative, wherein XML will be written; and entity-type is any supported entity type (see table below); and entity-identifier is the Id or Name of a single entity of the specified type. The -Dsysid argument is not required for entity types that begin with "all-."

Named Sub-directories

On export, XML documents will be organized into sub-directories by entity type: e.g. portlet, layout, user, etc.

Delete

Removes the specified entities as well as dependent (orphaned) entities from the portal database.

Warning

The DELETE feature should be used with extreme caution and is more appropriate for DEV and TEST portals than for PROD. It is possible to make your portal unusable by deleting the wrong thing.

Usage
ant data-delete -Dtype={entity-type} [-Dsysid={entity-identifier}]

Where entity-type is any supported entity type and entity-identifier is the Id or Name of a single entity of the specified type.

Import/Export Logs

uPortal logs the outcome of Import/Export operations in UPORTAL_ROOT/target/data-import-reports.  There will be a summary report in a file with a name like data-import.txt, and if there are errors from the process there will also be an error report file for each object that failed (e.g. layout_aa148809.layout.txt).

Example Error Report

FAIL: layout - aa148809.layout
--------------------------------------------------------------------------------
java.lang.IllegalArgumentException: No published channel for fname=header referenced by layout for aa148809
	at org.jasig.portal.layout.dlm.RDBMDistributedLayoutStore.importLayout(RDBMDistributedLayoutStore.java:793)
	at sun.reflect.GeneratedMethodAccessor160.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at $Proxy124.importLayout(Unknown Source)
	at org.jasig.portal.io.xml.layout.LayoutImporter.importDataElement(LayoutImporter.java:44)
	at org.jasig.portal.io.xml.crn.AbstractDom4jImporter.importData(AbstractDom4jImporter.java:86)
	at org.jasig.portal.io.xml.crn.AbstractDom4jImporter.importData(AbstractDom4jImporter.java:53)
	at org.jasig.portal.io.xml.JaxbPortalDataHandlerService.importOrUpgradeData(JaxbPortalDataHandlerService.java:567)
	at org.jasig.portal.io.xml.JaxbPortalDataHandlerService.importData(JaxbPortalDataHandlerService.java:530)
	at org.jasig.portal.io.xml.JaxbPortalDataHandlerService.importData(JaxbPortalDataHandlerService.java:497)
	at org.jasig.portal.io.xml.JaxbPortalDataHandlerService$1.callWithoutResult(JaxbPortalDataHandlerService.java:401)
	at org.jasig.portal.concurrency.CallableWithoutResult.call(CallableWithoutResult.java:32)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)