Everest 1.2 Update – Progress – New Features Justin Fyfe Duane Bender January 2013 WGM
Transcript
Slide 1
Everest 1.2 Update Progress New Features Justin Fyfe Duane
Bender January 2013 WGM
Slide 2
Agenda Overview News New Features .NET Version Silverlight and
Windows Phone 7/8 Version Java Version Roadmap
Slide 3
A (brief) History Everest: Started in 2008 An HL7v3 toolkit for
writing Windows applications Code generated from MIF files
Traditionally, focused on Microsoft.NET platform Tight integration
with WCF Integrates with Visual Studio Open Source (Apache 2)
Slide 4
News : Everest Book Complete Development guide Covers 1.0 eBook
and Hardcover Free for contributors
Slide 5
News : Public SVN Everest and jEverest have publicly accessible
SVN repositories Readonly anonymous access Patches can be submitted
by anyone to [email protected] Serious contributors can
be given commit access
Slide 6
.NET EDITION New Features
Slide 7
Better integration with WCF Better support for accessing SOAP
headers from messages receiveResult.ResponseHeaders = new
System.ServiceModel.Channels.MessageHeaders
(receiveResult.Headers.MessageVersion);
receiveResult.ResponseHeaders.Add(MessageHeader.CreateHeader("myHeader",
"urn:my-ns:com", "Value"));
Slide 8
Better Integration with WCF Creation of a custom binding
provider for existing WCF services EverestSerializerFormat
attribute replaces standard XmlSerializerFormat attribute on
service contract [EverestSerializerFormat(Formatter =
typeof(XmlIts1Formatter), GraphAide = typeof(DatatypeFormatter),
ValidateConformance = false)]
[ServiceContract(Namespace="urn:hl7-org:v3")] public interface
IServiceContract { /// /// Do something ///
[OperationContract(Action="*")] IGraphableAnything(IGraphable
request); }
Slide 9
Other Features Detailed validation errors/warnings for data
types Over 60 defects were corrected Enhanced documentation on data
types classes Formatter performance enhancements
Slide 10
EVEREST COMPACT VERSION New Features
Slide 11
Compact Edition? Optimized for low resource execution
environments Phones (Windows Phone 7/8) Windows RT Devices (ARM
based Windows 8) Silverlight (Browser based execution)
Slide 12
HL7v3 from your mobile
Slide 13
Supported Features Full data types support (including
behaviors) Serialization support for XML ITS1 and Data Types R1 (R2
on roadmap) Tested with NE2008, NE2010, and CA standards
Connectivity WCF (SOAP 1.1/1.2) over http/https Limitations
Reflection formatter only Can use a pre-generation tool to make
this faster
Slide 14
Why? Mobile apps can benefit from integration using HL7v3 FHIR
is not yet ready HL7v3 registries/repositories have lots of
information that can be leveraged on mobile PIX/PDQ HL7v3 can be
useful in mobile apps Especially when integrating with XDS on
mobile platforms HL7v3 is preferable over HL7v2.x on mobile
platforms as WS-* can easily be implemented on mobile platforms
using WCF. A debate between myself and a coworker in our lab an Ill
show you project
Slide 15
XML/v3 is CPU intensive
Slide 16
XML/v3 Wastes Bandwidth
Slide 17
JAVA VERSION New Features
Slide 18
The Java Version Finally, after 3 years Separate code base
from.NET version Leverages Java patterns Code generated from MIF
from GPMR Tested with NE2008, NE2010, CA Technical challenges with
Java Lack of reified generics No closures / lambda expressions
Slide 19
Adaptations from.NET Java INT ten = new INT(10); for(INT i =
new INT(0); i.compareTo(ten) < 0; i = i.increment())
System.out.println(i.toString()); TS now = TS.now();
System.out.println(now.getValue()); PQ day = new PQ(BigDecimal.ONE,
"d"); TS yesterday = now.subtract(day);
System.out.println(yesterday.getValue()); ST str = new
ST("Justin"); TS today = TS.now(); PQ day = new PQ(BigDecimal.ONE,
"d"), hours = new PQ(BigDecimal.valueOf(3), "h"); PQ dayLessHours =
day.subtract(hours); INT rad = new INT(3); REAL pi = new
REAL(Math.PI); REAL area = pi.multiply(new
REAL(Math.pow(rad.toDouble(), 2)));.NET for (INT i = 0; i < 10;
i++) Console.WriteLine(i); TS now = DateTime.Now;
Console.WriteLine(now.Value); TS yesterday = now - "1 d";
Console.WriteLine(yesterday.Value); ST str = "Justin"; TS today =
DateTime.Today; PQ day = "1 d", hours = 3 h"; PQ dayLessHours = day
- hours; INT rad = 3; REAL pi = Math.PI; REAL area = pi *
Math.Pow((double)rad, 2);
Slide 20
Constructing an Instance // Quickly create an instance
MCCI_IN000002CA instance = new MCCI_IN000002CA( new
II(UUID.randomUUID()), TS.now(), ResponseMode.Immediate,
MCCI_IN000002CA.defaultInteractionId(),
MCCI_IN000002CA.defaultProfileId(), ProcessingID.Production,
AcknowledgementCondition.Never ); // Format try(XmlIts1Formatter
fmtr = new XmlIts1Formatter()) { // Add a helper formatter for R1
fmtr.getGraphAides().add(new DatatypeFormatter());
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
IFormatterGraphResult graphResult = fmtr.graph(outStream,
instance); // Output validation errors for(IResultDetail detail :
graphResult.getDetails()) System.out.printf("%s : %s",
detail.getType(), detail.getMessage()); } catch(Exception e) {
e.printStackTrace(); }
Slide 21
Sending/Receiving v3 Everest integrates with Spring one of two
ways: Using SpringClientConnector Similar to the WcfClientConnector
in.NET Using EverestMarshaller / EverestUnmarshaller in AppContext
xml configuration
Version 1.2 Todo List Unit Testing (Jan Feb 2013) Currently one
student in charge of porting unit tests (help is appreciated)
Spring Connector Currently needs testing and additional development
work. Documentation & Clean-up
Slide 24
Roadmap If interest continues development will continue on
Everest 1.4 (Q1 2014) Data Types R2 for Java and Compact version
CDA/XDS Connectors (experimentation required) MEX support (for WCF
services) and WSDL import functionality (map XMLSerializer to
Everest classes) JSON Formatter Android version of jEverest
Slide 25
More Info http://everest.marc-hi.ca SVN:
https://fisheye.marc-hi.ca/svn/Everesthttps://fisheye.marc-hi.ca/svn/Everest
https://fisheye.marc-hi.ca/svn/jEveresthttps://fisheye.marc-hi.ca/svn/jEverest
UN: Guest