Skip to Main Content

Java Development Tools

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Connection reset by peer using BLOB on ADF BC REST Service

Subramanian Meyyappan-OracleAug 22 2019 — edited Aug 25 2019

Hi Folks,

  I'm having a requirement to POST/PATCH/GET a large amount of data (JSON formatted) using Oracle JET.

This JSON will store in Oracle DB as a BLOB column using via REST API (ADF BC).

So, I have followed the below implementation – Encoded the JSON Payload into Base64 string format.

Oracle docs:

https://docs.oracle.com/middleware/12213/adf/develop/consuming-adf-restful-web-services.htm#GUID-8F913A6E-5FB1-4636-B0A8-25C3B5731E1A

Three operations required to complete the requirement.

  1. In GET call want to retrieve the JSON payload(encrypted) which has stored in BLOB attribute.
  2. In POST call need to send the JSON payload(encrypted)to the BLOB attribute.
  3. In PATCH call update the existing payload.

Action Steps has taken for GET call:

I have created a transient attribute in ADF BC - ViewObject there in Voimpl getter method has overridden this way.

Flex2 - BLOB

Flex2InString - String

public String getFlex2InString() throws Exception {

    Object flex2 = getAttributeInternal(FLEX2);

    if (flex2 != null) {

      return blobToBase64Conversion((BlobDomain) flex2);

    }

    return (String) getAttributeInternal(FLEX2INSTRING);

  }

  public String blobToBase64Conversion(BlobDomain blob) throws Exception { 

    return Base64.getEncoder().encodeToString(blob.getBytes(1L, (int) blob.getLength())); 

  }` 

After I completed this implementation on ADF side. I have implemented following things on JET(using basic Html5) Side.

Action Steps has taken for POST/PATCH call:

        As per the documentation, I can able to understand there no need to handle anything for POST/PATCH calls.

But, while sending the JSON payload, convert the payload into BASE64 format in JET and sent it for BLOBDomain vo attribute. BTW, ADF framework will take care accordingly.

Result: As per the documentation it is working as expected for smaller JSON (less than 3MB) But, the following exception raise while Posting larger JSON(> 3 MB)

ADF BC is throwing me following exception:

[2019-08-23T00:06:26.841+03:00] [BPM_server1] [NOTIFICATION:16] [] [] [tid: [ACTIVE].ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)']

[userId: <anonymous>] [ecid: ba73bc42-0480-42d0-ae26-3cc3443115bd-00025e70,0] [APP: ADAAService_RESTWebService] [partition-name: DOMAIN] [tenant-name: GLOBAL]

[ADF_MESSAGE_CONTEXT_DATA: Component=REST;#;

Cause=JBO-26041: Failed to post data to database during "Update": SQL Statement "JBO-29000: Unexpected exception caught: java.sql.SQLRecoverableException,

msg=IO Error: Connection reset by peer".] [ADF_MESSAGE_STATUS: add_request_message] [ADF_MESSAGE_ACTION_NAME: The resource lifecycle was interrupted]

The resource lifecycle was interrupted

[2019-08-23T00:06:26.843+03:00] [BPM_server1] [TRACE:16] [] [oracle.adf.model.rest.log] [tid: [ACTIVE].ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: ba73bc42-0480-42d0-ae26-3cc3443115bd-00025e70,0] [APP: ADAAService_RESTWebService] [partition-name: DOMAIN] [tenant-name: GLOBAL] [SRC_CLASS: oracle.adf.internal.model.rest.core.lifecycle.ErrorMessageHandler] [SRC_METHOD: buildMessage] ADF: Adding the following error message for binding 'null': Connection reset by peer[[

  1. java.sql.SQLRecoverableException: IO Error: Connection reset by peer

at oracle.jdbc.driver.T4CConnection.putBytes(T4CConnection.java:3097)

at oracle.sql.BLOB.setBytes(BLOB.java:803)

at weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB.setBytes(Unknown Source)

at oracle.jbo.domain.BlobDomain.writeBytesToLob(BlobDomain.java:459)

at oracle.jbo.domain.BaseLobDomain.saveToDatabase(BaseLobDomain.java:624)

at oracle.jbo.server.EntityImpl.doDMLWithLOBs(EntityImpl.java:9740)

at oracle.jbo.server.EntityImpl.doDML(EntityImpl.java:9619)

at com.oracle.ocs.adaa.bpm.framework.EntityImplEx.doDML(EntityImplEx.java:60)

at com.oracle.ocs.adaa.bpm.model.entities.BpmRequestsEOImpl.doDML(BpmRequestsEOImpl.java:552)

at oracle.jbo.server.EntityImpl.postChanges(EntityImpl.java:7488)

at oracle.jbo.server.EntityImpl.callPostChanges(EntityImpl.java:7267)

at oracle.jbo.server.DBTransactionImpl.doPostTransactionListeners(DBTransactionImpl.java:3390)

at oracle.jbo.server.DBTransactionImpl.postChanges(DBTransactionImpl.java:3183)

at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2181)

at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2461)

at oracle.adf.model.bc4j.DCJboDataControl.commitTransaction(DCJboDataControl.java:1754)

at oracle.adf.model.binding.DCDataControl.callCommitTransaction(DCDataControl.java:1516)

at oracle.adf.internal.model.rest.core.domain.ResourceTree.commitTransaction(ResourceTree.java:567)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecycleContext.endTransaction(ResourceLifecycleContext.java:87)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecycle.commit(ResourceLifecycle.java:280)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecyclePhase$8.executePhase(ResourceLifecyclePhase.java:47)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecycleProcessor.processPhase(ResourceLifecycleProcessor.java:312)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecycleProcessor.processCommitPhases(ResourceLifecycleProcessor.java:189)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecycleProcessor.executeLifecycle(ResourceLifecycleProcessor.java:121)

at oracle.adf.internal.model.rest.core.lifecycle.ResourceLifecycleProcessor.execute(ResourceLifecycleProcessor.java:53)

at oracle.adf.internal.model.rest.core.http.RESTHttpRequestExecutor.internalExecute(RESTHttpRequestExecutor.java:169)

at oracle.adf.internal.model.rest.core.http.RESTHttpRequestExecutor.execute(RESTHttpRequestExecutor.java:96)

at oracle.adf.model.servlet.rest.ResourceServlet.execute(ResourceServlet.java:283)

at oracle.adf.model.servlet.rest.ResourceServlet.doPatch(ResourceServlet.java:125)

at oracle.adf.model.servlet.rest.ResourceServlet.service(ResourceServlet.java:133)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)

at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)

at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:207)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at oracle.wsm.agent.handler.servlet.SecurityFilter.doFilter(SecurityFilter.java:360)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:209)

at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:244)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at oracle.security.jps.ee.http.JpsAbsFilter$3.run(JpsAbsFilter.java:174)

at java.security.AccessController.doPrivileged(Native Method)

at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)

at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:650)

at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:112)

at oracle.security.jps.ee.http.JpsAbsFilter.doFilterInternal(JpsAbsFilter.java:292)

at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:149)

at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at oracle.security.wls.filter.SSOSessionSynchronizationFilter.doFilter(SSOSessionSynchronizationFilter.java:294)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:248)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3706)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3672)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:328)

at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)

at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)

at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)

at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2443)

at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2291)

at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2269)

at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1705)

at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1665)

at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272)

at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)

at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)

at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)

at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)

at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)

Caused by: java.io.IOException: Connection reset by peer

at sun.nio.ch.FileDispatcherImpl.read0(Native Method)

at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)

at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)

at sun.nio.ch.IOUtil.read(IOUtil.java:197)

at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)

at oracle.net.nt.TimeoutSocketChannel.read(TimeoutSocketChannel.java:145)

at oracle.net.ns.NIOHeader.readHeaderBuffer(NIOHeader.java:83)

at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:140)

at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:102)

at oracle.net.ns.NIONSDataChannel.readDataFromSocketChannel(NIONSDataChannel.java:81)

at oracle.jdbc.driver.T4CMAREngineNIO.prepareForReading(T4CMAREngineNIO.java:103)

at oracle.jdbc.driver.T4CMAREngineNIO.unmarshalUB1(T4CMAREngineNIO.java:535)

at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:486)

at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:253)

at oracle.jdbc.driver.T4C8TTILob.write(T4C8TTILob.java:177)

at oracle.jdbc.driver.T4CConnection.putBytes(T4CConnection.java:3091)

... 75 more

]]

While searching in Oracle MOS, the following links showed me a different solution to fix this issue.

I can able to understand the connection got closed before the transaction commits. Can you please advise me on the issue and its solution.

https://support.oracle.com/epmos/faces/DocumentDisplay?id=2399524.1

https://support.oracle.com/epmos/faces/DocumentDisplay?id=2387567.1

JET version: 5.0

Studio Edition Version 12.2.1.0.0

Regards,

Subramanian

Comments
Post Details
Added on Aug 22 2019
6 comments
1,303 views