| Summary: | EPRHelper modifies EPRs when serialising to XML | ||
|---|---|---|---|
| Product: | [JBoss] JBoss Enterprise SOA Platform 5 | Reporter: | Rick Wagner <rwagner> |
| Component: | JBossESB | Assignee: | tcunning |
| Status: | CLOSED NEXTRELEASE | QA Contact: | |
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | 5.1.0 GA | CC: | rwagner, tkobayas |
| Target Milestone: | --- | ||
| Target Release: | 5.2.0.ER4 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| URL: | http://jira.jboss.org/jira/browse/SOA-2959 | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: |
All SOA-P
|
|
| Last Closed: | 2011-11-15 09:24:58 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
|
Description
Rick Wagner
2011-03-03 20:01:53 UTC
This is the SOA 5.1 ticket for JBESB-3574. Link: Added: This issue is related to JBESB-3574 Link: Added: This issue Cloned to SOA-2960 Link: Removed: This issue Cloned to SOA-2960 Originally cloned from SOA-2960, which was for 5.0.2. Since there will be no 5.0.3 (or upstream work on 5.0.2) I deleted that one. Rick Please link with soa-2961, which is the One Off for this. Link: Added: This issue is related to SOA-2961 soa-2961 is the one-off support patch for this issue Checked in one off fixes to CP branch. tcunning@localhost:JBESB_4_10_CP]$ svn commit Sending product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/EPRHelper.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/EPR.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/EmailEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/FTPEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/FTPSEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/FileEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/HTTPEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/InVMEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/JDBCEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/JMSEpr.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/LogicalEPR.java Sending product/rosetta/src/org/jboss/soa/esb/addressing/eprs/SFTPEpr.java Sending product/rosetta/tests/src/org/jboss/soa/esb/addressing/tests/EPRUnitTest.java Sending product/rosetta/tests/src/org/jboss/soa/esb/addressing/util/tests/EPRHelperUnitTest.java Transmitting file data .s............ Committed revision 37374. Release Notes Docs Status: Added: Documented as Resolved Issue Writer: Added: dlesage Release Notes Text: Added: https://issues.jboss.org/browse/SOA-2959 The setSpecificEPR initialised a type extension if none were already present, but this could not be done safely. Any modifications to an EPR should only have been done at the construction point. The code has been changed so this is now the case. Release Notes Text: Removed: https://issues.jboss.org/browse/SOA-2959 The setSpecificEPR initialised a type extension if none were already present, but this could not be done safely. Any modifications to an EPR should only have been done at the construction point. The code has been changed so this is now the case. Added: https://issues.jboss.org/browse/SOA-2959 The setSpecificEPR initialised a type extension if none were already present, but this could not be done safely as it lead to concurrent failures. Any modifications to an EPR should only have been done at the construction point. The code has been changed so this is now the case. Text description of customer's use case. (Thread heavily when running against this-- the customer had about 30 client threads.)
"Our ESB process is pretty simple as the following, if you create the sample process, you may be see the same issue at a heavy concurrency run.
ESB Web Service endpoint -->JMSRouter [async call to a JMS service to archive request XML]--> JAXB custom action {transfer XML to JAVA Bean] --->EJBProcessor [call a EJB session bean to perform Claim process] --> JAXB custom action[Transfer Response JAVA Bean to XML] --> Custom Exception handle action --> JMSRouter [async call to a JMS service to archive response XML] -->return to web service call."
Customer's jboss-esb.xml: <?xml version="1.0"?> <jbossesb parameterReloadSecs="5" xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd"> <providers> <!-- <jbr-provider host="127.0.0.1" name="Realtime-JBR-Http" protocol="http"> <jbr-bus busid="Realtime-JBR-Http" port="6001"/> </jbr-provider> --> <jms-provider connection-factory="ConnectionFactory" name="RealTimeArchiveQueque"> <jms-bus busid="RealtimeArchiveChannel"> <jms-message-filter dest-name="queue/Realtime_Archive_Queue" dest-type="QUEUE"/> </jms-bus> </jms-provider> <http-provider name="http"> <http-bus busid="http-channel"/> </http-provider> </providers> <services> <service category="ICMS" description="ICMS Http Web Service" invmScope="GLOBAL" name="ICMS-Http-WS"> <property name="maxThreads" value="100"/> <property name="inVMPassByValue" value="false"/> <listeners> <http-gateway busidref="http-channel" name="Http-Gateway" urlPattern="claim/*"> <property name="allowedPorts" value="8081"/> </http-gateway> </listeners> <actions inXsd="/xsd/IcmsAPI_Request.xsd" mep="RequestResponse" outXsd="/xsd/IcmsAPI_Response.xsd" validate="false" webservice="true"> <!-- Request Archive --> <action class="com.ihealth.icm.esb.action.JMSArchiveRouter" name="RequestArchiveRouter" process="process"> <property name="jndiName" value="queue/Realtime_Archive_Queue"/> <property name="connection-factory" value="ConnectionFactory"/> <property name="unwrap" value="false"/> <property name="persistent" value="false"/> <property name="security-principal" value="guest"/> <property name="security-credential" value="guest"/> <property name="process.event" value="RequestArchive"/> <property name="process.source" value="TMHP-INTERACTIVE"/> </action> <!-- XML to Java POJO JAXB --> <action class="com.ihealth.icm.esb.action.JaxbXMLToRequestPojoAction" name="ClaimXMLToJavaBOTransform"> <property name="process.logevent" value="true"/> </action> <!-- invoke Core ICM EJB service --> <action class="com.ihealth.icm.esb.action.EJBClaimProcessor" name="EJBRealtimeClaimProcess"> <property name="ejb3" value="true"/> <property name="jndi-name" value="icmService/ClaimSessionBean/local"/> <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory"/> <property name="method" value="processClaim"/> <property name="esb-out-var" value="org.jboss.soa.esb.message.defaultEntry"/> <property name="process.transactiontype" value="T"/> <property name="process.SLA" value="1.0"/> <property name="ejb-params"> <arg0 type="java.lang.String">process.message.id</arg0> <arg1 type="com.ihealth.icm.model.Request">org.jboss.soa.esb.message.defaultEntry</arg1> <arg2 type="java.lang.Long">process.request.in.time</arg2> <arg3 type="com.ihealth.icm.model.ProcessConfig">process.config</arg3> </property> <property name="process.logevent" value="true"/> </action> <!-- transform back to response XML JAXB --> <action class="com.ihealth.icm.esb.action.JaxbResponsePojoToXMLAction" name="ClaimJavaBOToXmlTransform"> <property name="process.logevent" value="true"/> </action> <!-- Handler Exception --> <action class="com.ihealth.icm.esb.action.ExceptionProcessor" name="ExceptionHandler"> <property name="targetServiceName" value="ICMS-Realtime-ArchiveListner"/> <property name="targetServiceCategory" value="ICMS"/> <property name="allowRetry" value="false"/> </action> <!-- Response Archive --> <action class="com.ihealth.icm.esb.action.JMSArchiveRouter" name="ResponseArchiveRouter" process="process"> <property name="jndiName" value="queue/Realtime_Archive_Queue"/> <property name="connection-factory" value="ConnectionFactory"/> <property name="unwrap" value="false"/> <property name="persistent" value="false"/> <property name="security-principal" value="guest"/> <property name="security-credential" value="guest"/> <property name="process.event" value="ResponseArchive"/> </action> </actions> </service> <service category="ICMS" description="ICMS Realtime Archive Listner" name="ICMS-Realtime-ArchiveListner"> <property name="maxThreads" value="100"/> <listeners> <jms-listener busidref="RealtimeArchiveChannel" is-gateway="false" maxThreads="100" name="RealtimeRequestArchiveQListner"/> </listeners> <actions mep="OneWay"> <action class="com.ihealth.icm.esb.action.EJBArchiveProcessor" name="EJBRealtimeRequestArchive"> <property name="ejb3" value="true"/> <property name="ejb-name" value="RealtimeArchiveSessionBean"/> <property name="jndi-name" value="icmService/RealtimeArchiveSessionBean/local"/> <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory"/> <property name="method" value="archiveMessage"/> <property name="ejb-params"> <arg0 type="com.ihealth.icm.model.ArchiveDataBean">org.jboss.soa.esb.message.defaultEntry</arg0> </property> </action> </actions> </service> <service category="ICMS" description="ICMS Http Web Service For Batch Process" invmScope="GLOBAL" name="ICMS-Http-Batch-WS"> <property name="maxThreads" value="100"/> <property name="inVMPassByValue" value="false"/> <listeners> <http-gateway busidref="http-channel" name="Http-Gateway" urlPattern="claim/*"> <property name="allowedPorts" value="8081"/> </http-gateway> </listeners> <actions inXsd="/xsd/IcmsAPI_Request.xsd" mep="RequestResponse" outXsd="/xsd/IcmsAPI_Response.xsd" validate="false" webservice="true"> <!-- Request Archive --> <action class="com.ihealth.icm.esb.action.JMSArchiveRouter" name="RequestArchiveRouter" process="process"> <property name="jndiName" value="queue/Realtime_Archive_Queue"/> <property name="connection-factory" value="ConnectionFactory"/> <property name="unwrap" value="false"/> <property name="persistent" value="false"/> <property name="security-principal" value="guest"/> <property name="security-credential" value="guest"/> <property name="process.event" value="RequestArchive"/> <property name="process.source" value="TMHP-BATCH"/> </action> <!-- XML to Java POJO JAXB --> <action class="com.ihealth.icm.esb.action.JaxbXMLToRequestPojoAction" name="ClaimXMLToJavaBOTransform"> <property name="process.logevent" value="true"/> </action> <!-- invoke Core ICM EJB service --> <action class="com.ihealth.icm.esb.action.EJBClaimProcessor" name="EJBRealtimeClaimProcess"> <property name="ejb3" value="true"/> <property name="jndi-name" value="icmService/ClaimSessionBean/local"/> <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory"/> <property name="method" value="processClaim"/> <property name="esb-out-var" value="org.jboss.soa.esb.message.defaultEntry"/> <property name="process.transactiontype" value="T"/> <property name="process.SLA" value="1.0"/> <property name="ejb-params"> <arg0 type="java.lang.String">process.message.id</arg0> <arg1 type="com.ihealth.icm.model.Request">org.jboss.soa.esb.message.defaultEntry</arg1> <arg2 type="java.lang.Long">process.request.in.time</arg2> <arg3 type="com.ihealth.icm.model.ProcessConfig">process.config</arg3> </property> <property name="process.logevent" value="true"/> </action> <!-- transform back to response XML JAXB --> <action class="com.ihealth.icm.esb.action.JaxbResponsePojoToXMLAction" name="ClaimJavaBOToXmlTransform"> <property name="process.logevent" value="true"/> </action> <!-- Handler Exception --> <action class="com.ihealth.icm.esb.action.ExceptionProcessor" name="ExceptionHandler"> <property name="targetServiceName" value="ICMS-Realtime-ArchiveListner"/> <property name="targetServiceCategory" value="ICMS"/> <property name="allowRetry" value="false"/> </action> <!-- Response Archive --> <action class="com.ihealth.icm.esb.action.JMSArchiveRouter" name="ResponseArchiveRouter" process="process"> <property name="jndiName" value="queue/Realtime_Archive_Queue"/> <property name="connection-factory" value="ConnectionFactory"/> <property name="unwrap" value="false"/> <property name="persistent" value="false"/> <property name="security-principal" value="guest"/> <property name="security-credential" value="guest"/> <property name="process.event" value="ResponseArchive"/> </action> </actions> </service> </services> </jbossesb> Verified with CR1. |