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 more
You 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:
If you found a bug which is not listed above, please report it in JIRA. Click here (You need to be logged in with your OpenMRS ID).
User's Guide
User's Guide for Metadata Sharing Module
Technical Details
Technical Details for Metadata Sharing Module
Other Resources
- Download
- Source Code Repository
- JIRA Dashboard
- Form Bank
- Metadata Sharing Project - Google Summer of Code 2010
- Metadata Sharing Project (round 2)Â - Google Summer of Code 2011
- Metadata Sharing Server Project