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.
Three operations required to complete the requirement.
I have created a transient attribute in ADF BC - ViewObject there in Voimpl getter method has overridden this way.
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.
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.
[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[[
- 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.