Hide Forgot
Help Desk Ticket Reference: https://c.na7.visual.force.com/apex/Case_View?id=500A0000006JsVo&sfdc.override=1 project_key: SOA The setSpecificEPR initialises a type extension if one is not already present, but this cannot be done safely. Any modifications to an EPR should only be done at the construction point, as it is the creator who is responsible for doing this. JBESB-3574 contains a diff which configures the type on construction, but we should also consider updating the EPR classes to throw exceptions if modifications are made after the creator has finished with their construction.
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.