Coder Social home page Coder Social logo

ipf's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ipf's Issues

Support for using FlowManagement functionality from Java routes

Currently the FlowManager can be used only from Groovy routes. It would be great if we can use it from Java routes as well. Currently a lot of initialization happens in Flow_ProcessorDefinition classes for the correct working for flow management functionality. Just using Flow_Processor classes in Java routes doesn't seem to work.

Use right place for home community ID in ITI-18 requests

Home community ID in ITI-18 Get* requests should be placed into and read from the XML attribute "home" instead of the "$homeCommunityId" ebXML slot --- this is prescribed by the IHE ITI FT, Vol. 2a, Sections 3.18.4.1.2.3.7.* as well as in the XCA Supplement.

ATNA auditing should be adapter appropriately.

Flow Purger tries to delete all obsolete flows in Derby

Even though the code indicates that only 100 flows are deleted in a loop, I got an memory-related exception (Derby 10.4.1.2):

org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select this_.C_
4968 ID as C1_0_0_, this_.C_ACK_COUNT_EXPECTED as C2_0_0_, this_.C_APPLICATION as C3_0_0_, this_.C_CREATION_TIME as C4_0_0_, this_.C_DERIVED_STATUS as C5_
4968 0_0_, this_.FLOW_MESSAGE_ID as FLOW9_0_0_, this_.C_PACKET as C6_0_0_, this_.C_REPLAY_COUNT as C7_0_0_, this_.C_REPLAY_TIME as C8_0_0_ from PLATFORM.T
4968 FLOW this where this_.C_CREATION_TIME<? and this_.C_APPLICATION=? order by this_.C_CREATION_TIME asc]; SQL state [XJ001]; error code [0]; Java exce
4968 ption: 'GC overhead limit exceeded: java.lang.OutOfMemoryError'.; nested exception is java.sql.SQLException: Java exception: 'GC overhead limit excee
4968 ded: java.lang.OutOfMemoryError'.
4969 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
4970 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
4971 at ....
org.openehealth.ipf.commons.flow.FlowManagerBase.purgeFlows(FlowManagerBase.java:100)
.....
4988 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
4989 at $Proxy54.purgeFlows(Unknown Source)

In http://tim.oreilly.com/pub/a/onjava/2007/01/31/tuning-derby.html?page=1, it is stated that Derby does NOT provide something to restrict the result set like Oracle (where rownum< xxx) or MySQL (LIMIT xxx), so the restriction in Hibernate is useless and you have to work with scrollable result sets. The pattern described in the Hibernate docs is:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Criteria query = session.createCriteria(myCriteria).setCacheMode(IGNORE).setFetchSize(200);
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
int count=0;
while ( results.next() ) {
Type result = (Type) results.get(0);
result.updateStuff(...);
if ( ++count % 100 == 0 ) {
//flush a batch of updates and release memory:
session.flush();
session.clear();
}
}

Update Groovy version to 1.7.5

  • Resolve maven plug-in dependencies
  • Resolve all compile problems
  • Resolve all test problems
  • Update basic archetype
  • Update wiki
  • Do smoke tests, within Eclipse, in modules CDA, HL7 and HL7DSL

Missing Quartz transitive dependency

Until version 1.6.6, Quartz has a dependency to commons-collections 3.2, but fails to note this in its pom. If commons-collections 3.2 is not accidentally loaded by other modules, scheduling a Flow Purge triggers an error.
In commons-flow, depend on a recent quartz version (e.g. 1.8.3; note: groupId became org.quartz-scheduler) or explicitly depend on commons-collections 3.2.

Camel 2.5.0 upgrade

Resolve issues with multiple registrations of CamelContext on MBeanServer and ActiveMQ waiting for locks on datastore

Provide possibility to change OBX-5 type

For the issue described on https://groups.google.com/group/ipf-user/browse_thread/thread/e4dc776842fc39e5?hl=de the following solution is proposed: add the following method to SegmentAdapter.groovy:

void setObx5Type(String type, int desiredRepetitionsCount = 1) {
    if (! segment.getClass().name.endsWith('.OBX')) {
        throw new AdapterException('only OBX segments can be served by this method')
    }

    for (int i = 0; i < desiredRepetitionsCount - count(5); ++i) {
        nrp(5)
    }

    putAt(2, type)
    Varies.fixOBX5(target, target.message.parser.factory)
}

Generation of HL7v2.x response messages

  • NakFactory should be the only place to map exception types to NAK messages. The code in MllpMarshallUtils should be moved to the BasicNakFactory. Btw, should not it be named ResponseFactory (it may create naks and acks)?

The following concerns the HL7v2ws components (and perhaps the rest of our Hl7v2.x based components):
Maybe we should allow configuration of hl7v2 endpoints with NakFactory to override the generation of error messages per endpoint instead of per component. With the option to configure the NAK factory in the endpoint, the route developer can override the mapping ExceptionType -> Error message in his/her custom NakFactory.

Comments are welcome.

ITI-47 raw wsdl definition has wrong soap actions

SOAP Action and WS-Addressing action should be equal. This is not the case in the ITI-47 wsdl definition.

This issue is critical for using iti-47 with CXF 2.3.2 (comes with Camel 2.6.0).
Affected are all 2.2 milestones up to m5.

Side effects of mapping support in Groovy markup builders

When

  • IPF mapping services are activated, and
  • an XML document is being built by means of Groovy markup builder, and
  • a non-existent method of class String is being called,

then a MissingMethodException is thrown and handled by the Groovy markup builder in a special, but unfortunate way, which can lead to endless loops and, potentially, other problems.

The solution is to wrap the MissingMethodException generated by the mapper service into a RuntimeException.

Create the possibility to reuse IPF's dependencies configuration in IPF-based projects

When an IPF-based project needs some additional dependendencies, they should be compatible with the ones used by IPF --- e.g. the IPF uses spring-core while the project additionally needs spring-web. At the moment, the project's pom.xml must explicitly mention all versions numbers, and the project author must ensure that they are the same as in the IPF's root pom.xml. This issue relates to plugin dependencies as well (e.g. the gmaven plugin).

The possibility to reuse "dependencyManagement" and "pluginManagement" sections of IPF's root pom.xml in IPF-based projects would help to simplify the project author's life and to avoid potential errors.

Preserve Maven repository structure of dependencies when generating IPF distribution ZIPs

Currently, when a distrubution ZIP of the IPF is created, all JARs are placed into two flat sub-folders --- "dist" for IPF JARs and "lib" for dependencies' ones. Would it be not better to "mirror" the Maven2 repository structure instead? In particular, this would give the possibility to create an off-line Maven2 build environment by simply copying the provided structure into ~/.m2/repository.

Your opinions are highly appreciated.

Add DSL for building Custom HL7 structures?

Although it's possible now to compile custom HL7 structures at runtime, creating these custom structures is still unintuitive.
I wonder if a DSL like the one used for HL7 validation could help, e.g. compare the custom definitions in modules-hl7 (below package org.openehealth.ipf.modules.hl7.parser.groovytest.hl7v2.def.v25, way more than 100 LOC) with:

forVersion('2.5')
.message('MDM', 'T01 T02')
.addSegment('ZBE')

.newSegment('ZBE')
.addRepeatingType('MovementId', EI, 999)
.addType('StartMovementDateTime', TS, 26)
.addType('EndMovementDateTime', TS, 26)
.addType('Action', ST, 10)

Integrate Maven Eclipse plug-in

  1. Integrate maven Eclipse plug-in to generate the IPF Eclipse projects files with mvn eclipse:eclipse.
  2. Wiki should be updated accordingly.

use ehcache instead of hand-made purgeable collections

ehcache library should be used instead of org.openehealth.ipf.commons.core.purgeable.* and derived classes for implementing purgeable collections used for storing web service asynchrony correlation items and HL7v2 interactive continuation/unsolicited fragmentation pieces

ATNA audit message for ITI-18 (Registry Stored Query) has empty UserID

This is a variant on an older issue (see http://gforge.openehealth.org/gf/project/ipf/tracker/?action=TrackerItemEdit&tracker_item_id=400&start=50 ).

When the UserID is empty the attribute should not be present:

audit message snippet:

<ActiveParticipant UserID="" UserName="618fa909-d68e-4982-aab2-4ea90a3ef15c" UserIsRequestor="true">

Complete audit message:

<AuditMessage xsi:noNamespaceSchemaLocation="healthcare-security-audit.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <EventIdentification EventActionCode="E" EventDateTime="2010-06-21T16:14:24.901+02:00" EventOutcomeIndicator="0">
        <EventID code="110112" displayName="Query" codeSystemName="DCM" />
        <EventTypeCode code="ITI-18" displayName="Registry Stored Query" codeSystemName="IHE Transactions" />
    </EventIdentification>
    <ActiveParticipant UserID="" UserName="618fa909-d68e-4982-aab2-4ea90a3ef15c" UserIsRequestor="true">
        <RoleIDCode code="110153" displayName="Source" codeSystemName="DCM" />
    </ActiveParticipant>
    <ActiveParticipant UserID="direct:GetDocuments" AlternativeUserID="4888" UserIsRequestor="false">
        <RoleIDCode code="110152" displayName="Destination" codeSystemName="DCM" />
    </ActiveParticipant>
    <AuditSourceIdentification AuditEnterpriseSiteID="PXS.UID" AuditSourceID="PXS.UID" />
    <ParticipantObjectIdentification ParticipantObjectID="urn:uuid:5c4f972b-d56b-40ac-a5fcc8ca9b40b9d4" ParticipantObjectTypeCode="2" ParticipantObjectTypeCodeRole="24">
        <ParticipantObjectIDTypeCode code="ITI-18" displayName="Registry Stored Query" codeSystemName="IHE Transactions" />       
    <ParticipantObjectQuery>dXJuOnV1aWQ6MTNiNmZlODYtYWI0Mi00N2M4LWIwMGMtOWE0YmI5N2NjMTczLA==</ParticipantObjectQuery>
        <ParticipantObjectDetail type="QueryEncoding" value="d2luZG93cy0xMjUy" />
        <ParticipantObjectDetail type="ihe:homeCommunityID" value="VW5rbm93bg==" />
    </ParticipantObjectIdentification>
</AuditMessage>

IPF reference application route should be updated

If a file, that causes validation failure (for example a .bat script), is copied in the {{input}} folder of the IPF reference application (tutorials-ref), that file will be processed infinitely.

CXF 2.2 does not accept empty WS-A asynchrony ACKs

When a Web Service receives a request with WS-A ReplyTo header, it sends immediately an acknowledgement with HTTP code 202. This acknowledgement may contain a SOAP message, but not obligatory --- content length == 0 is acceptable as well [1]. The problem is that CXF 2.2 throws an exception when no SOAP payload is available. The current IPF's workaround is to simply ignore this exception, but It should be checked whether newer versions of CXF still suffer from this bug, and --- when they do --- a corresponding patch can be created and provided.

[1] http://www.w3.org/TR/2006/NOTE-soap11-ror-httpbinding-20060321/

Review HL7v2 exception aggregation when generating NAKs

In org.openehealth.ipf.modules.hl7.CompositeHL7v2Exception#populateMessage() we have to create a cumulative HL7v2 NAK from multiple exceptions. In the current implementation, a lot of information goes lost, because we try to put all possible data in a single ERR segment and not all fields there are repeatable --- for example, there can be only one numerical error code. A possible solution would be to use multiple ERR segments, when the message structure allowsus to have them.

The gdsl extension for idea are not generated.

The gdsl extensions for IDEA, and the DSL docs are not generated by the IPF Maven plug-in.The reason is that the generated groovy stubs do not contain java docs due to the Groovy/Gmaven update. Affects are milestones 2.2-m3, 2.2-m4 and 2.2-m5.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.