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
© Copyright 2025