Render CEC Content Item with Images in Oracle Intelligent Bots

In one of the blog published by Dolf regarding Using CEC with Oracle Intelligent Bots, he demonstrated on how to use Oracle Intelligent Bots to retrieve the content items in CEC (Content and Experience Cloud Service) using the REST API. In this blog, I will extend this use case and provide a simple example of how to […]

Render CEC Content Item in Oracle Commerce Cloud

In my previous blog, I described how to render digital assets (images) in Oracle Commerce Cloud (OCC) using custom widget. In this blog, I will show you how to render content item with content layout component in OCC. This is a good use case when you have a promotion item that you want to display […]

Content and Experience Cloud and Oracle Commerce Cloud Integration – Part 3

In the final part of this blog series, we will be first, installing the custom product image widget that you have developed in Part 2 and secondly, customizing the OCC storefront product details layout page using the custom widget. This blog discusses the use of non-public Content SDK/API. The Content SDK/API might change without warning. The […]

Content and Experience Cloud and Oracle Commerce Cloud Integration – Part 2

In part 2 of this blog series, we will be developing a simple custom product image widget. The product images are stored and managed in CEC and we will use the product ID in OCC to fetch the right image from CEC. When you are uploading the product images to CEC, you will need to […]

Content and Experience Cloud and Oracle Commerce Cloud Integration – Part 1

With the recent release of content as a service (CaaS) and digital asset management capability in CEC (Content and Experience Cloud), you can now develop a custom widget and customize the product detail page layout in OCC (Oracle Commerce Cloud) to display the digital asset and content item stored in CEC. This blog discusses the […]

PCS Web Form Tips and Tricks – Part 3

In part 1 and part 2 of my blog series, I have discussed and highlighted some tips and tricks of using layout and input controls in web form.  In part 3, I will discuss and share some of the tips that will be useful to you when you add some dynamic behaviors using events in web […]

PCS Web Form Tips and Tricks – Part 2

In part 1 of this blog series, I have discussed and highlighted some tips and tricks of using layout controls in web form.  In my part 2 blog, I will reveal some tips and tricks on using the input controls in web form. Text Input and Text Area Fields Controls Text Input is a very […]

PCS Web Form Tips and Tricks – Part 1

In this blog series, I will be discussing some useful tips and tricks that will be helpful to you when you are designing your form using the new PCS web form controls and events. In one of my colleague’s blog, he has highlighted some of the features available in PCS web form.  In PCS official […]

Schedule Instances and Analytics Archive Using Cron Job in PCS

In PCS, you can archive instance data on demand or schedule the archive to run automatically by using PCS administration UI to select the date and time or alternatively you can use CRON entry. You can also schedule to archive the analytics data to the cloud storage and BICS in the same way.  However, there […]

Retrieve and Update Task Payload with PCS REST API

PCS has a number of REST APIs you can use to search for the tasks assign to a user/group, and retrieve the payload of a specific task as well as update the payload.  In PCS 16.3.5, a new Oracle form technology was introduced, hence, there are some changes to the REST API. Prior to PCS […]

Integrating PCS, DOCS and BI Publisher using OSB/SOACS – Part 3

Introduction In the part 1 and part 2 of this blog, I’ve covered the overview, setup and OSB design, in this part 3 of the blog, I will be covering the PCS design. PCS Design In PCS, we will need to create 2 web service connectors, the first connector is for DOCS folder creation using […]

Integrating PCS, DOCS and BI Publisher using OSB/SOACS – Part 2

Introduction In this part 2 of the blog, we will examine the OSB design used in this demonstration.  OSB is used as an integration layer for PCS, DOCS and BI Publisher as OSB plays an important role acting as an integration layer for protocol translation and message transformation, and it will also serve as a […]

Integrating PCS, DOCS and BI Publisher using OSB/SOACS – Part 1

Introduction In this 3 part blog series, I will be demonstrating on how to use PCS to invoke OSB (On-Prem or SOACS) services and upload a report/doc generated using BI Publisher to DOCS.  The following components are used in this demonstration: Oracle Document Cloud Service (DOCS) Process Cloud Service (PCS) with DOCS integration configured. BI […]

12c BPM and BAM Multi Domain Setup

Introduction In this blog, I will show you how to setup BPM and BAM in 2 separate WebLogic domains, so the out-of-the-box process analytics will work as it is on the same domain. In the multi domain setup, you will have a BPM only domain and BAM/BPM domain. The BPM only domain will contain both […]

How to find purgeable instances in SOA/BPM 12c

If you are familiar with SOA/BPM 11g purging, after you have upgraded/implemented SOA/BPM 12c, you will not be able to use most of the SQL for 11g to determine the purgeable instances.  This is because SOA/BPM 12c is no longer using composite_instance table for composite instance tracking. In SOA/BPM 12c, a common component is used to […]

REST Adapter and JSON Translator in SOA/OSB 12.1.3

If you are using REST adapter in SOA/OSB 12.1.3, you would probably encounter some requirements that you would need to response with a JSON array format which has no object name or name/value pairs, and must be a valid format according to RFC4627 specification. For example: [“USA”,”Canada”,”Brazil”,”Australia”,”China”,”India”] In SOA/OSB 12.1.3, the REST adapter requires you […]

Using OSB 12.1.3 Resequencer

Resequencer feature has been added to Oracle Service Bus 12c (12.1.3), it utilises the same resequencer engine as Oracle Mediator.  The objective of this feature is to provide you with the ability to resequence the incoming messages that arrive in random order and send them to the target services in an orderly manner.  In this […]

Mediator Parallel Routing Rules

Introduction In 11g, mediator executes routing rules either sequentially or in parallel.  If you are planning to use parallel routing rules, you would need to understand how the mediator queues and evaluates routings in parallel in different threads. This article describes 2 different threads used in the parallel routing rules and the design consideration if […]

Using Global Token in PS6 (

Introduction The configuration plan for composite deployment is composite-specific.  Therefore, when you deploy the SOA composite application into different environments (e.g. development, test, production), you need to substitute the binding variables in each configuration plan for each environment, this is a tedious and time consuming task, and prone to mistakes. In PS6, there is a new feature called […]

EDN Debugging

I have a customer asked me about how to debug EDN. This blog will show you how to debug EDN and the tools that can be used to debug EDN.

<!–[if !supportLists]–>1.<!–[endif]–>Using EDN-DB-LOG

EDN comes with a useful EDN DB logging servlet to view logging information generated by the EDN component. It is only available for END-DB which is based on AQ, it will not work for EDN with JMS. The servlet uses a table called “EDN_LOG_MESSAGES” in SOA_INFRA schema. It logs the operation on “main” operation of event_queue and oaoo-queue with timestamp information.

The default URL is http://<host_name>:<port_number>/soa-infra/events/edn-db-log.  In this servlet, you can enable, disable and clear logs but you need to have the administrative role in order to access the servlet.  This is a good tool to use to display dynamic counts of un-deq’ed events (potentially “stuck”) in the “main” and “OAOO” queues. The log also provides information of EDN bus when it is being connected to AQ-DB.  In the screenshot below, “EVENT_SEQ:202” shows that the EDN bus is being started.

When the logging is enabled, the EDN_LOG_MESSAGES table will be populated with messages until the logging is disabled, so it is inadvisable to leave logging turned on for large amounts of events. It is recommended to clear the log regularly.

Messages in the log are grouped together. Usually the first line in the group will indicate what operation is being performed, and the event sequence number is used to group the messages together and each group will be highlighted using the same color (e.g. enqueuing an event or handling an event that has been dequeued). In the screenshots below, “EVENT_SEQ:204” is dequeuing an event and “EVENT_SEQ:205” is enqueuing an event.


2. Database tables

The second method is to examine the database table. You can check on count of potentially “stuck” events currently in the following queue tables:


  • EDN_EVENT_QUEUE_TABLE – This table is for “EDN_EVENT_QUEUE” AQ. Every event published is temporarily enqueued into this table.
  • EDN_OAOO_DELIVERY_TABLE – This table only stores the event with “OAOO” (one-and-only-one) delivery target(s). The event is temporarily enqueued into this table for END_OAOO_QUEUE AQ.


For event with OAOO delivery target, it travels through both tables, first it is stored in EDN_EVENT_QUEUE_TABLE and then in EDN_OAOO_DELIVERY_TABLE.

This example shows the event enq’ed in “edn_event_queue”.


Another alternative is to check the count from the following database views:


  • AQ$EDN_EVENT_QUEUE_TABLE: There are two rows for every event enqueued into “edn_event_queue”.
  • AQ$EDN_OAOO_DELIVERY_TABLE: There is one row for every event enqueued into “edn_oaoo_queue”. 



This example shows further details about that event which is deq’ed by the subscribers of “edn_event_queue”.


The AQ$EDN_EVENT_QUEUE_TABLE.MSG_STATE shows the state of the message.  The states are listed in the table below:

State Code










The message is ready to be processed, i.e., either the delay
time of the message has passed or the message did not have a delay time specified






The delay specified by message_properties_t.delay while executing dbms_aq.enqueue has not been reached.






The message has been successfully processed (dequeued) but will remain in the queue until the retention_time specified for the queue while executing dbms_aqadm.create_queue has been reached.






The message was not successfully processed (dequeued) in either 1) the time specified by message_properties_t.expiration while executing dbms_aq.enqueue or 2) the maximum number of dequeue attempts (max_retries) specified for the queue while executing dbms_aqadm.create_queue.






Buffered messages enqueued by a Streams Capture process




Buffered Expired


User-enqueued expired buffered messages




If the subscriber type is equal to 2 when there is no subscribers to the message, and there is no transaction id due to invalid transaction, it will be marked as UNDELIVERABLE.



When the state message is expired, the AQ$EDN_EVENT_QUEUE_TABLE.EXPIRATION_REASON will be populated with one of the following value:


  • Messages to be cleaned up later



3.<!–[endif]–>Server Logs


The third method is using EM log configuration and log viewer. There are few logger names related the EDN:


  • oracle.integration.platform.blocks.event
  • oracle.integration.platform.blocks.event
  • oracle.integration.platform.blocks.event.saq
  • oracle.integration.platform.blocks.event.jms

You can set log level to one of the following to capture more details:

  • TRACE:1 (FINE) – Logging the event content details, XPath filter results, event enqueue, dequeue, publish and send operations
  • TRACE:16 (FINER) – Logging the begin, commit and rollback statements of XA transaction (for OAOO) and retry count.
  • TRACE:32 (FINEST)  – All above.

The log level changes take effect immediately without server restart.However, if you want the changes to persist after server restart, make sure to check on the “Persist Log Level State Across Component Restarts” prior to server restart.


At FINER or FINEST level, you may see loggings like “Began XA for OAOO.” and “Rolled back XA for OAOO.” These are normal messages of OAOO event delivery when there are no events waiting to be delivered. They are NOT errorred conditions. You may turn off these messages by setting the Java logging level to “TRACE:1 (FINE)” or a higher value. All detailed logging goes into SOA server’s diagnostic.log file configured in EM.  Below is a snippet of the diagnostic log showing the event delivery to an OAOO subscriber:


[SRC_METHOD: finerBeganXA] Began XA for OAOO.


[SRC_METHOD: fineEventPublished] Received event: Subject: … Sender: …. Event: …


[SRC_METHOD: fineFilterResults] Filter [XPath Filter: …] for subscriber “…” returned true/false


[SRC_METHOD: fineDequeuedEvent] Dequeued event, Subject: … [source type ..]: business-event…


[SRC_METHOD: fineOAOOEnqueuedEvent] Enqueued OAOO event, Subject: … [source: …, target: … ]: business-event…


[SRC_METHOD: fineOAOODequeuedEvent] Dequeued OAOO event, Subject: … [source: …, target: …]: business-event…


[SRC_METHOD: finerInsertedTryCount] Inserted try count for msgId: …. Status: …


[SRC_METHOD: finerRemovedTryCount] Removed try count for msgId: …


[SRC_METHOD: fineSentOAOOEvent] Sent OAOO event [QName: … to target: …]: business-event…


[SRC_METHOD: fineCommittedOAOODelivery] Committed OAOO Delivery, Subject: … [source: …, target: …]: business-event…


[SRC_METHOD: finerBeganXA] Began XA for OAOO.


[SRC_METHOD: finerRolledbackXA] Rolled back XA for OAOO.


In some cases, more than one method may be necessary to assist in the debugging process. Below is a comparison of server and DB logging that might help you in evaluating and determining which method(s) is/are most suitable in your environment.




Server Logging

  • EDN will generate standard Java logging messages when events are published, when they are pulled from persistent storage and when they are delivered.
  • The logger used by EDN depends on the implementation. For instance, EDN-DB uses “oracle.integration.platform.blocks.event.saq” and EDN-JMS uses “oracle.integration.platform.blocks.event.jms”.
  • As in all Java logging, messages are written at different log levels from ERROR to FINEST. The most detailed messages (including the event body) use FINEST.
  • Loggers can also be configured in logging.xml in your config directory.




DB Logging

  • If you are using EDN-DB, a lot of debugging information may not be accessible due to the many activities that occurred in the database which couldn’t be logged in the server. Hence, a servlet web page that accesses the debug logging table is implemented to assist the debugging process. The page is located at: http://hostname:port/soa-infra/events/edn-db-log and you do need to have administrative role to access the servlet page.
  • There are commands on the servlet web page to enable and disable logging and for clearing the log table. The table will be filled with messages, so it is inadvisable to leave logging turned on for large amounts of events. It is recommended to clear the log regularly.
  • Messages in the log are grouped together. Usually the first line in the group will indicate what operation is being performed (e.g. enqueuing an event or handling an event that has been dequeued).

<!–[if !supportLists]–>