Accessing Fusion Data from BI Reports using Java

Introduction In a recent article by Richard Williams on A-Team Chronicles, Richard explained how you can execute a BI publisher report from a SOAP Service and retrieve the report, as XML, as part of the response of the SOAP call.  This blog article serves as a follow on blog article providing a tutorial style walk […]

Oracle Mobile Cloud Service by Example Part 2: Create a Hello World Mobile API in 4 mins

Get started with Mobile Cloud Service (we call it MCS) in 4 mins!!! I published this short video back in June on the A-Team youtube channel. This is the first thing anyone should do when they work with MCS to establish connectivity Its already had lots of viewings so I thought I would show it here […]

Displaying Oracle Documents Cloud Services File Picker and Link Picker from other Domains

Introduction The Oracle Documents File Picker and Link Picker allow web applications to select files and folders that reside in the Oracle Documents Cloud Service. These Pickers can start from a specific folder and can further be restricted to a folder structure for a specific user and role when combined with the Oracle Documents App Link. Some of […]

Oracle BPM 12c just got Groovy – A Webcenter Content Transformation Example

Introduction On the 27th June 2014 we released Oracle BPM 12c which included some exciting new features. One of the less talked about of new features is the support of BPM Scripting which incorporates the Groovy 2.1 compiler and runtime. So what is Groovy anyway? Wikipedia describes Groovy as an object-oriented programming language for the […]

Reverse Engineer DB objects from ADF-BC

Say you are developing an application using ADF Fusion stack. If you are like me you have backed up your ADF application. However Database objects are not backed up so frequently. One day disaster strikes and you loose the schema.  Here’s how yo…

Speeding up integrated WebLogic Server Startup – avoiding multiple network bindings

If you see the following messages on the console window when start JDeveloper’s integrated WLS:

<Feb 2, 2012 1:07:41 PM PST> <Notice> <Server> <BEA-002613> <Channel “Default[5]” is now listening on 0:0:0:0:0:0:0:1:7101 for protocols iiop, t3, ldap, snmp, http.> 

<Feb 2, 2012 1:07:41 PM PST> <Warning> <Server> <BEA-002611> <Hostname “mirocha-LAP1.st-users.us.oracle.com”, maps to multiple IP addresses: 192.168.239.1, 192.168.41.1, 192.168.56.1, 10.43.1.12, 0:0:0:0:0:0:0:1> 

<Feb 2, 2012 1:07:41 PM PST> <Notice> <Server> <BEA-002613> <Channel “Default[4]” is now listening on 127.0.0.1:7101 for protocols iiop, t3, ldap, snmp, http.> 

<Feb 2, 2012 1:07:41 PM PST> <Notice> <Server> <BEA-002613> <Channel “Default[1]” is now listening on 192.168.41.1:7101 for protocols iiop, t3, ldap, snmp, http.> 

<Feb 2, 2012 1:07:41 PM PST> <Notice> <Server> <BEA-002613> <Channel “Default” is now listening on 192.168.56.1:7101 for protocols iiop, t3, ldap, snmp, http.> 

<Feb 2, 2012 1:07:41 PM PST> <Notice> <Server> <BEA-002613> <Channel “Default[3]” is now listening on 10.43.1.12:7101 for protocols iiop, t3, ldap, snmp, http.> 

<Feb 2, 2012 1:07:41 PM PST> <Notice> <Server> <BEA-002613> <Channel “Default[2]” is now listening on 192.168.239.1:7101 for protocols iiop, t3, ldap, snmp, http.> 

 

These messages indicate that WLS is binding itself to all network adapters configured on your machine running Windows – yes, this is an OS issue; it doesn’t happen on Linux.

All these bindings end up eating a couple of seconds of WLS startup time. To minimize it:

 

  1. Start WLS – On JDeveloper, go to Run > Start Server Instance
  2. Go to the admin console at http://localhost:7101/console and login as weblogic/weblogic1
  3.  On the left side navigation bar, select Environment > Servers
  4. Select Default Server from the table
  5. On the Listen Address field, enter: 127.0.0.1
  6. Restart WLS.

 

 

Here’s some before/after numbers:

Before:

IntegratedWebLogicServer startup time: 69557 ms.

 

After:

IntegratedWebLogicServer startup time: 44589 ms.

 

That’s a 25s difference. Not bad. =-)

 

Don’t install JDev and BPM in the same Home

I don’t think this is actually documented anywhere, but it is something that you will want to be aware of if you are using the BPM 11.1.1.5 Feature Pack. It is not supported to install the Feature Pack patch into … Continue reading

New version of JDeveloper 11.1.2.0 released with Maven support and better performance

Oracle has released a new version of JDeveloper, 11.1.2.0, with a whole bunch of new features, including Maven support, and a lot of performance enhancements.  You can check out details of the new features here. Please note that this version … Continue reading

ADF Layouts Revisted

Designing UI pages in ADF can be somewhat cumbersome if you don’t understand what really goes on behind the scenes when using the layout specific tags such as panelGroupLayout. OOTB JDeveloper comes with many different types of layout based tags. If you have read my previous post on layout management, you will notice that some of these tags are meant for specific layout design type patterns: Stretch (application LaF i.e. JDeveloper UI), or Flow (generic web site LaF). Moreover, using the layout tags in an “illegal” combination usually creates a design that renders the UI in a undesirable behavior. For example, stretchable items (i.e. tables) not stretching, or scrollable (flow) content not scrolling. To better understand how to create better layouts we must first understand what the layout components will actually turn into HTML wise on the browsers end. This knowledge will help not only in choosing the correct combination of layout tags, but will also enable you to use the power of CSS styles to “control” how the elements look and behave. The first layout tag that I am going to discuss is one of the most used tag, the panelGroupLayout.

Tag name: af:panelGroupLayout
UIComponent class:oracle.adf.view.rich.component.rich.layout.RichPanelGroupLayout
Component type: oracle.adf.RichPanelGroupLayout

The panelGroupLayout control is a layout element that arranges its children in one of a few simple patterns. Each pair of adjacent children will be separated by an optional separator child. It can lay out children consecutively (wrapping as needed), or in a single horizontal line, or vertically.  Rules of thumb on usage:

  • Never place a scrolling panelGroupLayout inside of another scrolling panelGroupLayout since users do not like nested scroll bars
  • Never specify percentage heights in any component’s inlineStyle attribute
  • Never use the “position” style in any component’s inlineStyle attribute. Unless you are using fixed pixel heights on them, you would never place a panelSplitter or panelStretchLayout inside of any panelGroupLayout regardless of what you have set its layout attribute to

If you believe that you need to break one of these rules, this is an indication that your page structure is not following the page structure guidelines and you will likely have troubles getting your application to render consistently across various web browsers and computing platforms. You may also alternatively place a facetRef, iterator, or switcher inside of the panelGroupLayout and their resolved children will be treated as if they were direct children of the panelGroupLayout. If you don’t want this behavior, you may wrap the children you want to be grouped in a group component.

Geometry Management:

  • This component CAN be stretched by a parent layout component that stretches its children, e.g., panelStretchLayout if: layout=”scroll” or layout=”vertical”
  • This component CANNOT be stretched by a parent layout component that stretches its children if: layout=”default” or layout=”horizontal”

Ok, now that we understand what the adf side of things are. When you use the panelGroupLayout what happens on the browser side? Based on the layout “type” selected, this will mean different things. In general, here are the browser HTML equivalents to the different layout styles:

  • layout= “default” will turn into a HTML “SPAN”
  • layout = “vertical” will turn into a HTML “DIV”
  • layout= “scroll” will also turn into a HTML “DIV” – with an added “style” setting to induce the vertical scrollbar to appear – overflow: auto; width: 100%; height: 100%;
  • layout=”horizontal” will turn into a HTML “table”- with 1 HTML row “TD” defined. Each element added will become a HTML cell “TD”

To give an example of using the panelGroupLayout in combinations of other panelGroupLayouts that uses different layout settings, here is an image that shows a simple use case. Note: the colored borders are there to show each of the component elements.

 

The ADF components that were used are as follows:

This, in turn produces these HTML tags:

In this example, the top panelGroupLayout (bordered in green) has been set to layout=horizontal, which sets the tag in the browser to be an HTML “TABLE”. In this table body, you see 1 table row (TR) defined. Each subsequent item added to the row, becomes a table cell (TD). The 2 items that have been added are panelGroupLayout’s that have the layout set to “vertical”, which in turn creates a HTML “DIV”. Knowing this you can add standard CSS style elements to these ADF layout tags to create visual behavior such as padding and margin. This is just a example on how to use the appropriate ADF layout tags to create conventional visual designs. In addition, once you have mastered what the ADF to HTML tag equivalents are, you will be able to convert your HTML mockups into the ADF world. In my next post I will cover more of the layout tags.

Changing the default editor/view in JDeveloper

If you work a lot with complex ADF pages in JDeveloper, you may get tired of waiting for it to open your pages in the Design view, I know I do!  Fortunately, there is a simple solution.  You can change … Continue reading