...
To print out the names of all the patients in the system:
Code Block |
---|
List<Patient> patients = Context.getPatientService().getAllPatients();
for (Patient patient : patients) {
System.out.println("Patient: " + patient.getGivenName() + " " + patient.getFamilyName());
}
|
In an External Application using web services
See Web Services
In an External Application
Note |
---|
We no longer test this use case so you may experience difficulties trying to use this approach. Please see Web Services as an alternative. |
The openmrs-api-xxx.jar file can be used in stand-alone java applications. There are three simple steps you need to follow:
- Choose an option below for including the openmrs jar(s) and dependencies
- Fire up OpenMRS by calling: Context.startup(<connection.url>, <connection.username>, <connection.password>, getProperties());
- You need to surround any units of work with Context.openSession() (which startup() calls for you) and Context.closeSession()
- Authenticate into OpenMRS by calling: Context.authenticate(username, password);
- You should be able to call into the Context and work with the services.
Example
Code Block |
---|
public static void main(String[] args) {
File propsFile = new File(OpenmrsUtil.getApplicationDataDirectory(), "openmrs-runtime.properties");**
Properties props = new Properties();
OpenmrsUtil.loadProperties(props, propsFile);
Context.startup("jdbc:mysql://localhost:3306/db-name?autoReconnect=true", "openmrs-db-user", "3jknfjkn33ijt", props);
try {
Context.openSession();
Context.authenticate("admin", "test");
List<Patient> patients = Context.getPatientService().getPatients("John");
for (Patient patient : patients) {
System.out.println("Found patient with name " + patient.getPersonName() + " and uuid: " + patient.getUuid());
}
...
}
finally {
Context.closeSession();
}
}
|
...
Using the API 1.8.0+ Jar (maven based)
OpenMRS introduced Maven in 1.8. The easiest way to use the OpenMRS API is to also use maven for your project. Once you do that, simply use these in your pom.xml
Code Block |
---|
<dependency>
<groupId>org.openmrs.api</groupId>
<artifactId>openmrs-api</artifactId>
<version>${openMRSVersion}</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.openmrs.api</groupId>
<artifactId>openmrs-api</artifactId>
<version>${openMRSVersion}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openmrs.web</groupId>
<artifactId>openmrs-web</artifactId>
<version>${openMRSVersion}</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.openmrs.web</groupId>
<artifactId>openmrs-web</artifactId>
<version>${openMRSVersion}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openmrs.test</groupId>
<artifactId>openmrs-test</artifactId>
<version>${openMRSVersion}</version>
<type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openmrs.tools</groupId>
<artifactId>openmrs-tools</artifactId>
<version>${openMRSVersion}</version>
</dependency>
<properties>
<openMRSVersion>1.8.1</openMRSVersion>
</properties>
|
...
- When coding against the database API, domain objects (Patients, Users, etc.) provided from the API are only guaranteed to be valid between calls to context.openSession() and context.closeSession().
- You needn't worry about this within a web application environment as long as you are using a filter such as
org.openmrs.web.OpenmrsFilter
(since the filter marks the boundaries around each HTTP request) - You cannot use domain objects across transactions (or requests) (e.g., if you loaded a
Patient
object on one web page, you must reload that object, before using it on subsequent pages)
- You needn't worry about this within a web application environment as long as you are using a filter such as
- It is the developer's responsibility to ensure that context.closeSession() is called (if not within webapp environment) to release precious resources (even in the event of an exception)
- These transaction boundary calls are lightweight -- i.e., there is little penalty for calling them