Metadata Sharing Module
Contacts: Rafal Korytkowski, Darius Jazayeri, Piotr Bryk
Overview
The Metadata Sharing Module allows all kinds of metadata (concepts, htmlforms, locations, roles, programs, etc.) to be exchanged between different OpenMRS installations. It supports metadata defined in the core as well as in modules provided appropriate handlers are registered. Conflicts between local and incoming metadata can be identified and resolved. The module can be used both through an API and a web interface.
Any dependent metadata will be packaged along with the selected item. For example, if you select a concept which has coded answers, it will package the initial concept along with all the coded answer concepts, class and datatype. If you select an htmlform, it will package the form along with the encounter type, all concepts used on that form, etc.
Release Notes
See release notes in JIRA.
1.2
Added support for OpenMRS Platform 2.0
Dropped support for OpenMRS 1.8.x and below
Bug fixes
1.1.9
Bug fixes
1.1.8
Bug fixes around sharing Concepts
1.1.2
Added support for the Facility Data module
Added support for Tomcat 7
1.1.1
META-297: Unable to import metadata sharing package with Role
1.1
Support for Publishing/Subscribing Dictionary modules
Extracted mapping functionality to the Metadata Mapping module (required module)
Bug fixes around importing/exporting concepts
1.0.10
Converting concepts between OpenMRS 1.9 and earlier versions
1.0.9
Bug fixes related to importing/exporting concepts with mappings in OpenMRS 1.9
1.0.8
Added support for concepts in OpenMRS 1.9 (note you need to upgrade to 1.9.1 rev:28634)
Improved support for OpenMRS 1.9 in general
1.0.7
Mavenized and deployed to the maven repository for use in other modules. The source code is moved to https://github.com/OpenMRS/openmrs-module-metadatasharing.
1.0.6
IMPORTANT UPDATE: Fixes OpenMRS auditing (date_changed, changed_by, etc., did not get updated) and incompatibility with the sync module, which was broken for versions 1.0.3, 1.0.4, 1.0.5. Please update as soon as possible.
1.0
Sharing Concepts between OpenMRS 1.6 and 1.7/1.8
Preserving IDs if possible and requested
Custom import modes
Subpackages for 1000 items and more
Exporting packages on-the-fly
Improved search (searching by ids, enhanced performance)
Disabling mapping incoming Concepts to local Concepts upon import
Finding matching Concepts based on Concept mappings.
0.10
Creating new versions of metadata packages
Publishing/Subscribing to metadata packages through RESTful web services
Automatic notifications about package updates
0.9
Adding mappings of a chosen Concept Source to Concepts upon export
Mapping incoming Concepts to local Concepts upon import
Overwriting local metadata with incoming metadata
Replacing incoming metadata included in a package with local metadata
Validating existing metadata upon export
Validating existing and incoming metadata upon import
0.8
Exporting/Importing Concepts and OpenmrsMetadata
Exporting/Importing HtmlForms given HTML Form Entry Module is installed (see #Requirements)
Planned features:
If you would like to request a new feature which is not listed above, please create an issue in JIRA. Click here (You need to be logged in with your OpenMRS ID).
Installation
Download and install the latest version (v1.3).
The module is under heavy development and it is best to use the latest available version with all bug fixes.
Download older versions from the module repository.
Requirements
1.x
This version to work correctly requires OpenMRS 1.9.1, 1.8.4, 1.7.4 or 1.6.6. Packages exported with this version are not backwards compatible. Packages exported with previous versions cannot be imported with this version.
0.10.x
This version will work correctly with the same OpenMRS versions as version 0.9.x. Packages exported with this version are entirely compatible with 0.9.x.
0.9.x
For the module to work correctly you need to run OpenMRS in either of the following versions: 1.6.4 Build 21295+, 1.7.3 Build 21294+, 1.8.1 Build 21293+.
As of the 0.9 version of the module to import/export HtmlForms you need HtmlForm Entry Module in version 1.8 or later.
0.8.x
OpenMRS 1.6.3+ (1.7.x and later were not tested)
In order to import/export HtmlForms you need HtmlForm Entry Module in version 1.7.2.
Troubleshooting
MySQL error ‘Packet too large’ – set MySQL variable max_allowed_packet=16M details
Import fails with ConcurrentModificationException and the following stack trace:
SEVERE: Servlet.service() for servlet openmrs threw exception java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) at org.openmrs.api.handler.ConceptNameSaveHandler.handle(ConceptNameSaveHandler.java:55) at org.openmrs.api.handler.ConceptNameSaveHandler.handle(ConceptNameSaveHandler.java:37)It is a known bug in OpenMRS (TRUNK-2428). You need to update OpenMRS and use one of recommended versions (see #Requirements).
Import fails with Column 'concept_name_id' cannot be null:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'concept_name_id' cannot be null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 121 more at org.openmrs.module.metadatasharing.reflection.OpenmrsClassScanner.invokeServiceSaveItem(OpenmrsClassScanner.java:265) at org.openmrs.module.metadatasharing.reflection.OpenmrsClassScanner.serviceSaveItem(OpenmrsClassScanner.java:174) at org.openmrs.module.metadatasharing.handler.impl.OpenmrsObjectHandler.saveItem(OpenmrsObjectHandler.java:107) ... 53 moreYou need to upgrade OpenMRS to 1.9.1 rev:28634, 1.8.4 rev:28650, 1.7.4 rev:28651, 1.6.6 rev:28652. See TRUNK-3626.
Other known issues which have not been fixed yet:
User's Guide
User's Guide for Metadata Sharing Module
Technical Details
Technical Details for Metadata Sharing Module
Other Resources
Metadata Sharing Project - Google Summer of Code 2010
Metadata Sharing Project (round 2) - Google Summer of Code 2011