Skip to content

Commit 555c669

Browse files
authored
Merge pull request #102 from hapifhir/rel_5_1_0
Start Release branch for 5.1.0
2 parents a70fe5b + dafdf5b commit 555c669

17 files changed

+353
-155
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ The server may be configured with subscription support by enabling properties in
209209

210210
- `subscription.websocket.enabled` - Enables websocket subscriptions. With this enabled, your server will accept incoming websocket connections on the following URL (this example uses the default context path and port, you may need to tweak depending on your deployment environment): [ws://localhost:8080/hapi-fhir-jpaserver/websocket](ws://localhost:8080/hapi-fhir-jpaserver/websocket)
211211

212+
## Enabling EMPI
213+
214+
Set `empi.enabled=true` in the [hapi.properties](https://github.com/hapifhir/hapi-fhir-jpaserver-starter/blob/master/src/main/resources/hapi.properties) file to enable EMPI on this server. The EMPI matching rules are configured in [empi-rules.json](https://github.com/hapifhir/hapi-fhir-jpaserver-starter/blob/master/src/main/resources/empi-rules.json). The rules in this example file should be replaced with actual matching rules appropriate to your data. Note that EMPI relies on subscriptions, so for EMPI to work, subscriptions must be enabled.
215+
212216
## Using Elasticsearch
213217

214218
By default, the server will use embedded lucene indexes for terminology and fulltext indexing purposes. You can switch this to using lucene by editing the properties in [hapi.properties](https://github.com/hapifhir/hapi-fhir-jpaserver-starter/blob/master/src/main/resources/hapi.properties)

pom.xml

+38-18
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0"
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
22
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44

@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>ca.uhn.hapi.fhir</groupId>
1313
<artifactId>hapi-fhir</artifactId>
14-
<version>5.0.2</version>
14+
<version>5.1.0</version>
1515
</parent>
1616

1717
<artifactId>hapi-fhir-jpaserver-starter</artifactId>
@@ -20,6 +20,20 @@
2020
<maven>3.5.0</maven>
2121
</prerequisites>
2222

23+
<packaging>war</packaging>
24+
25+
<name>HAPI FHIR JPA Server - Starter Project</name>
26+
27+
<repositories>
28+
<repository>
29+
<id>oss-snapshots</id>
30+
<snapshots>
31+
<enabled>true</enabled>
32+
</snapshots>
33+
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
34+
</repository>
35+
</repositories>
36+
2337
<dependencies>
2438
<dependency>
2539
<groupId>org.eclipse.jetty.websocket</groupId>
@@ -84,7 +98,12 @@
8498
</exclusion>
8599
</exclusions>
86100
</dependency>
87-
101+
<!-- This dependency includes the JPA EMPI Server -->
102+
<dependency>
103+
<groupId>ca.uhn.hapi.fhir</groupId>
104+
<artifactId>hapi-fhir-jpaserver-empi</artifactId>
105+
<version>${project.version}</version>
106+
</dependency>
88107
<!-- This dependency is used for the "FHIR Tester" web app overlay -->
89108
<dependency>
90109
<groupId>ca.uhn.hapi.fhir</groupId>
@@ -249,22 +268,22 @@
249268
<scope>test</scope>
250269
</dependency>
251270

271+
<dependency>
272+
<groupId>org.awaitility</groupId>
273+
<artifactId>awaitility</artifactId>
274+
<version>4.0.0-rc1</version>
275+
<scope>test</scope>
276+
</dependency>
252277

253-
</dependencies>
254-
255-
<packaging>war</packaging>
256-
257-
<name>HAPI FHIR JPA Server - Starter Project</name>
278+
<!-- TODO: remove this and migrate to JU5 -->
279+
<dependency>
280+
<groupId>junit</groupId>
281+
<artifactId>junit</artifactId>
282+
<version>4.12</version>
283+
<scope>test</scope>
284+
</dependency>
258285

259-
<repositories>
260-
<repository>
261-
<id>oss-snapshots</id>
262-
<snapshots>
263-
<enabled>false</enabled>
264-
</snapshots>
265-
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
266-
</repository>
267-
</repositories>
286+
</dependencies>
268287

269288
<build>
270289

@@ -276,7 +295,7 @@
276295
<plugin>
277296
<groupId>org.eclipse.jetty</groupId>
278297
<artifactId>jetty-maven-plugin</artifactId>
279-
<version>${jetty_version}</version>
298+
<version>${jetty_version}</version>
280299
<configuration>
281300
<webApp>
282301
<contextPath>/hapi-fhir-jpaserver</contextPath>
@@ -421,6 +440,7 @@
421440
<ignoredResourcePatterns>
422441
<ignoredResourcePattern>.*\.txt$</ignoredResourcePattern>
423442
<ignoredResourcePattern>.*\.html$</ignoredResourcePattern>
443+
<ignoredResourcePattern>config/favicon.ico</ignoredResourcePattern>
424444
</ignoredResourcePatterns>
425445
</configuration>
426446
</plugin>

src/main/java/ca/uhn/fhir/jpa/starter/ApplicationContext.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package ca.uhn.fhir.jpa.starter;
22

33
import ca.uhn.fhir.context.FhirVersionEnum;
4+
import ca.uhn.fhir.jpa.empi.config.EmpiConsumerConfig;
5+
import ca.uhn.fhir.jpa.empi.config.EmpiSubmitterConfig;
46
import ca.uhn.fhir.jpa.subscription.channel.config.SubscriptionChannelConfig;
57
import ca.uhn.fhir.jpa.subscription.match.config.SubscriptionProcessorConfig;
68
import ca.uhn.fhir.jpa.subscription.match.config.WebsocketDispatcherConfig;
@@ -28,13 +30,19 @@ public ApplicationContext() {
2830
}
2931

3032
if (HapiProperties.getSubscriptionEmailEnabled()
31-
|| HapiProperties.getSubscriptionRestHookEnabled()
32-
|| HapiProperties.getSubscriptionWebsocketEnabled()) {
33+
|| HapiProperties.getSubscriptionRestHookEnabled()
34+
|| HapiProperties.getSubscriptionWebsocketEnabled()) {
3335
register(SubscriptionSubmitterConfig.class);
3436
register(SubscriptionProcessorConfig.class);
3537
register(SubscriptionChannelConfig.class);
3638
}
3739

40+
if (HapiProperties.getEmpiEnabled()) {
41+
register(EmpiSubmitterConfig.class);
42+
register(EmpiConsumerConfig.class);
43+
register(EmpiConfig.class);
44+
}
45+
3846
}
3947

4048
}

src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
import ca.uhn.fhir.jpa.api.config.DaoConfig;
88
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
99
import ca.uhn.fhir.jpa.api.dao.IFhirSystemDao;
10-
import ca.uhn.fhir.jpa.api.rp.ResourceProviderFactory;
1110
import ca.uhn.fhir.jpa.binstore.BinaryStorageInterceptor;
12-
import ca.uhn.fhir.jpa.bulk.BulkDataExportProvider;
11+
import ca.uhn.fhir.jpa.bulk.provider.BulkDataExportProvider;
1312
import ca.uhn.fhir.jpa.interceptor.CascadingDeleteInterceptor;
1413
import ca.uhn.fhir.jpa.partition.PartitionManagementProvider;
1514
import ca.uhn.fhir.jpa.provider.GraphQLProvider;
@@ -37,6 +36,7 @@
3736
import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
3837
import ca.uhn.fhir.rest.server.interceptor.ResponseValidatingInterceptor;
3938
import ca.uhn.fhir.rest.server.interceptor.partition.RequestTenantPartitionInterceptor;
39+
import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
4040
import ca.uhn.fhir.rest.server.tenant.UrlBaseTenantIdentificationStrategy;
4141
import ca.uhn.fhir.validation.IValidatorModule;
4242
import ca.uhn.fhir.validation.ResultSeverityEnum;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ca.uhn.fhir.jpa.starter;
2+
3+
import ca.uhn.fhir.context.FhirContext;
4+
import ca.uhn.fhir.empi.api.IEmpiSettings;
5+
import ca.uhn.fhir.empi.rules.config.EmpiRuleValidator;
6+
import ca.uhn.fhir.empi.rules.config.EmpiSettings;
7+
import ca.uhn.fhir.jpa.empi.svc.EmpiSearchParamSvc;
8+
import ca.uhn.fhir.jpa.subscription.channel.subscription.IChannelNamer;
9+
import ca.uhn.fhir.rest.server.util.ISearchParamRetriever;
10+
import com.google.common.base.Charsets;
11+
import org.apache.commons.io.IOUtils;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.context.annotation.Bean;
14+
import org.springframework.context.annotation.Configuration;
15+
import org.springframework.core.io.DefaultResourceLoader;
16+
import org.springframework.core.io.Resource;
17+
18+
import java.io.IOException;
19+
20+
@Configuration
21+
public class EmpiConfig {
22+
23+
@Bean
24+
IEmpiSettings empiSettings(EmpiRuleValidator theEmpiRuleValidator) throws IOException {
25+
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
26+
Resource resource = resourceLoader.getResource("empi-rules.json");
27+
String json = IOUtils.toString(resource.getInputStream(), Charsets.UTF_8);
28+
return new EmpiSettings(theEmpiRuleValidator).setEnabled(HapiProperties.getEmpiEnabled()).setScriptText(json);
29+
}
30+
31+
}

src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import ca.uhn.fhir.jpa.subscription.match.deliver.email.JavaMailEmailSender;
1111
import org.apache.commons.dbcp2.BasicDataSource;
1212
import org.hl7.fhir.dstu2.model.Subscription;
13-
import org.springframework.beans.factory.BeanFactory;
1413
import org.springframework.beans.factory.annotation.Autowired;
1514
import org.springframework.context.annotation.Bean;
1615
import org.springframework.context.annotation.Configuration;
@@ -25,7 +24,7 @@
2524
* This is the primary configuration file for the example server
2625
*/
2726
@Configuration
28-
@EnableTransactionManagement()
27+
@EnableTransactionManagement
2928
public class FhirServerConfigCommon {
3029

3130
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirServerConfigCommon.class);
@@ -205,11 +204,10 @@ public IEmailSender emailSender() {
205204
retVal.setSmtpServerPort(this.emailPort);
206205
retVal.setSmtpServerUsername(this.emailUsername);
207206
retVal.setSmtpServerPassword(this.emailPassword);
208-
// TODO KHS add these when HAPI 4.2.0 is released
209-
// retVal.setAuth(this.emailAuth);
210-
// retVal.setStartTlsEnable(this.emailStartTlsEnable);
211-
// retVal.setStartTlsRequired(this.emailStartTlsRequired);
212-
// retVal.setQuitWait(this.emailQuitWait);
207+
retVal.setAuth(this.emailAuth);
208+
retVal.setStartTlsEnable(this.emailStartTlsEnable);
209+
retVal.setStartTlsRequired(this.emailStartTlsRequired);
210+
retVal.setQuitWait(this.emailQuitWait);
213211

214212
SubscriptionDeliveryHandlerFactory subscriptionDeliveryHandlerFactory = myAppCtx.getBean(SubscriptionDeliveryHandlerFactory.class);
215213
Validate.notNull(subscriptionDeliveryHandlerFactory, "No subscription delivery handler");

src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.context.annotation.Bean;
88
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
910
import org.springframework.orm.jpa.JpaTransactionManager;
1011
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
1112

@@ -47,8 +48,9 @@ public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
4748
return retVal;
4849
}
4950

50-
@Bean()
51-
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
51+
@Bean
52+
@Primary
53+
public JpaTransactionManager hapiTransactionManager(EntityManagerFactory entityManagerFactory) {
5254
JpaTransactionManager retVal = new JpaTransactionManager();
5355
retVal.setEntityManagerFactory(entityManagerFactory);
5456
return retVal;

src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.context.annotation.Bean;
88
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
910
import org.springframework.orm.jpa.JpaTransactionManager;
1011
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
1112

@@ -32,7 +33,7 @@ public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
3233
}
3334

3435
@Override
35-
@Bean()
36+
@Bean
3637
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
3738
LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory();
3839
retVal.setPersistenceUnitName("HAPI_PU");
@@ -47,8 +48,9 @@ public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
4748
return retVal;
4849
}
4950

50-
@Bean()
51-
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
51+
@Bean
52+
@Primary
53+
public JpaTransactionManager hapiTransactionManager(EntityManagerFactory entityManagerFactory) {
5254
JpaTransactionManager retVal = new JpaTransactionManager();
5355
retVal.setEntityManagerFactory(entityManagerFactory);
5456
return retVal;

src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.context.annotation.Bean;
88
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
910
import org.springframework.orm.jpa.JpaTransactionManager;
1011
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
1112

@@ -47,8 +48,9 @@ public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
4748
return retVal;
4849
}
4950

50-
@Bean()
51-
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
51+
@Bean
52+
@Primary
53+
public JpaTransactionManager hapiTransactionManager(EntityManagerFactory entityManagerFactory) {
5254
JpaTransactionManager retVal = new JpaTransactionManager();
5355
retVal.setEntityManagerFactory(entityManagerFactory);
5456
return retVal;

src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.context.annotation.Bean;
88
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
910
import org.springframework.orm.jpa.JpaTransactionManager;
1011
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
1112

@@ -47,8 +48,9 @@ public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
4748
return retVal;
4849
}
4950

50-
@Bean()
51-
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
51+
@Bean
52+
@Primary
53+
public JpaTransactionManager hapiTransactionManager(EntityManagerFactory entityManagerFactory) {
5254
JpaTransactionManager retVal = new JpaTransactionManager();
5355
retVal.setEntityManagerFactory(entityManagerFactory);
5456
return retVal;

0 commit comments

Comments
 (0)