Core Refactored Services Overview and How to Use them Les Westberg

Core Refactored Services
Overview and How to Use them
Les Westberg
Agilex - Principal Architect,
Aurion – Lead Architect
Agilex
www.agilex.com
Core Java Library Architecture
Design Information:
Aurion: http://wiki.aurionproject.org/display/AurionMain/CORE+Java+Library+Architecture
CONNECT:
https://developer.connectopensource.org/display/CONNECTWIKI/CORE+Java+Library+Archite
cture
Refactor of existing services
Separate business logic and web service specific logic
CONNECTCoreLib project contains business logic
Place business logic into core library
Used Spring to inject different implementations
Flexibility to configure whether interfaces are secured/unsecured
Initially have 4 inject-able interfaces
No Op (Simple hard code implementation)
Java
Note specs dictate NHIN layer must be secured and will not have this one.
Secured web service
Unsecured web service
Note specs dictate NHIN layer must be secured and will not have this one.
Agilex
2
www.agilex.com
Core Java Library Architecture (Cont.)
Projects were reorganized
Number of projects reduced
Reorganized to enable organizations using pass-through only mode to not be required to
deploy orchestration web services.
Project and class names were normalized for consistency
Changed how WS-Addressing was being used
Removed policy statements from the WSDL
Helper class being used to insert WS-Addressing tags into the message.
Gives more programmatic control
Web services can be selectively used when needed
Java implementations can be used when web services are not needed
Other technologies including REST can be used
Agilex
3
www.agilex.com
Project Structure
AurionCoreLib/CONNECTCoreLib
Java Library
Contains
Java Interface Class
Java Implementation
– Contains the business Logic for the service
Injectable Proxy Implementation for each supported service
type
–
–
–
–
Java
NoOp
Secured Web Service
Unsecured Web Service
Web Service Projects
Simple wrapper class
Calls the Java business logic from CoreLib
Agilex
www.agilex.com
Example Project – Doc Query
Base Package
Aurion: org.alembic.aurion
CONNECT: gov.hhs.fha.nhinc
AurionCoreLib/CONNECTCoreLib
<base>.docquery.<service-level>.AdapterDocQueryOrchImpl.java
<base>.docquery.<service-level>.proxy.AdapterDocQueryProxy.java
<base>.docquery.<service-level>.proxy.AdapterDocQueryProxyJavaImpl.java
<base>.docquery.<service-level>.proxy.AdapterDocQueryNoOpImpl.java
<base>.docquery.<service-level>.proxy.AdapterDocQueryObjectFactory.java
<base>.docquery.<servicelevel>.proxy.AdapterDocQueryWebServiceSecuredImpl.java
<base>.docquery.<servicelevel>.proxy.AdapterDocQueryWebServiceUnsecuredImpl.java
AurionAdapterWeb/CONNECTAdapterWeb
<base>.docquery.<service-level>.AdapterDocQuerySecured.java
<base>.docquery.<service-level>.AdapterDocQueryUnsecured.java
<base>.docquery.<service-level>.AdapterDocQueryImpl.java
Agilex
www.agilex.com
Services Refactored in Release 3.1
(Aurion/CONNECT)
Patient Discovery (Sync)
Document Query (Sync)
Document Retrieve (Sync)
Patient Discovery (Deferred)
Document Submission (Deferred)
Document Submission (Sync)
Agilex
6
www.agilex.com
New Services Implemented Using
Core Java Architecture
CONNECT 3.1/Aurion 3.1
Document Query (Deferred)
Document Retrieve (Deferred)
Administrative Distribution
Aurion 4.0
HIEM
Aurion (Current)
Connection Manager
Agilex
7
www.agilex.com
Services Which Have Not Been Refactored
HIEM (Not in CONNECT)
Audit Query
Reidentification
Some internal components
Agilex
8
www.agilex.com
Spring Configuration Files
Located in “nhin” folder in the domain config directory
C:\Sun\AppServer\domains\domain1\config\nhin
Generally one config file per service
Some services grouped together in a config file.
Change config file to switch to a different component
implementation
Component Proxy Configuration Utility
Can be used to make quick switch across all services
Only one component in the config file can have its “id”
tag match that in the “description” tag
Agilex
9
www.agilex.com
Example Configuration file
<?xml version="1.0" encoding="UTF-8" standalone="no"?><beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springbeans-2.5.xsd">
<!-The beans available in this file must be identified in the "description" element for the Spring configuration
application. Beans are listed between braces in the description separated with a comma like the following sample:
{somebean,anotherbean}
-->
<description>Beans included in this file: {adapterxdrresponse}</description>
Injected Component will be the
one whose ID matches this tag in
the description.
<!-- No-op Implementation -->
<bean
class="gov.hhs.fha.nhinc.docsubmission.adapter.deferred.response.proxy.AdapterDocSubmissionDeferredResponseProxyNoOpImpl"
id="adapterxdrresponsenoop"
name="adapterxdrresponsenoop">
<meta key="impltype" value="noop"/>
</bean>
The Java implementation will be
used in this file.
<!-- Java Implementation -->
<bean
class="gov.hhs.fha.nhinc.docsubmission.adapter.deferred.response.proxy.AdapterDocSubmissionDeferredResponseProxyJavaImpl"
id="adapterxdrresponse"
name="adapterxdrresponsejava">
<meta key="impltype" value="java"/>
</bean>
<!– Other implementations -->
</beans>
Agilex
10
www.agilex.com
Component Proxy Switcher
Agilex
11
www.agilex.com
Component Proxy Configuration Utility
Utility to quickly switch all components to a specific
implementation
NoOp
Java
Secured Web Service
Unsecured Web Service
When switching, if specific service does not exist for
that configuration, it will remain unchanged.
Can be switched while app server is still running
However, when using the switcher tool, it is best to restart
glassfish – we have seen memory issues if this is not done.
Agilex
12
www.agilex.com
Component Proxy Configuration Utility
(Cont.)
Documentation
Aurion:
http://wiki.aurionproject.org/display/AurionMain/Co
mponent+Proxy+Configuration+Utility
CONNECT:
https://developer.connectopensource.org/display/C
ONNECTWIKI/Component+Proxy+Configuration+Utili
ty
Location:
…\Product\Production\Utilities\Configurati
onUtility\RunFrom
Four batch files
SwitchToJava.bat
SwitchToNoOp.bat
SwitchToWebSecured.bat
SwitchToWebUnsecured.bat
Agilex
13
www.agilex.com
Preparation to Run Utility
Compile the utility
Go to the directory:
…\Product\Production\Utilities\ConfigurationUtility
Compile it
ant package.create
Go to the directory:
…\Product\Production\Utilities\ConfigurationUtility\RunFrom
Run CopyLibs.bat
This copies the needed libraries to this directory
Run the appropriate “SwitchTo” batch file.
Agilex
14
www.agilex.com
Secure/Unsecure Interfaces
Agilex
15
www.agilex.com
Secured/Unsecured Interfaces
Boundary between Gateway/Adapter
CONNECT Release 1.x
unsecure services
CONNECT/Aurion Release 2.x and 3.0
secured services
CONNECT/Aurion Release 3.1, CONNECT 3.2, Aurion 4.0
Can be configured to use either secured or unsecured services
Enabled because of Core Java Library Architecture
Switching is done using Spring Injection
Some services require Secure only (i.e. NHIN Services)
Agilex
16
www.agilex.com
Timeout/Retry Capabilities
Agilex
17
www.agilex.com
Timeout/Retry Capabilities
Implemented as part of release 2.4 patch
Implemented as part of core refactor in Release 3.1
Timeout and Retry values are configured in gateway.properties
file
Values:
webserviceproxy.timeout=120000
webserviceproxy.retryattempts=2
webserviceproxy.retrydelay=30000
webserviceproxy.exceptionstext=SocketTimeoutException
Known Issue (Fixed in Aurion 4.0):
artf1020: Class that is throwing the error is now:
InvocationTargetException.
So timeout message is being buried.
Agilex
18
www.agilex.com
Questions/Discussion
My Contact Information:
les.westberg@agilex.com
Agilex
www.agilex.com
Agilex
www.agilex.com