Advertisements
RSS

Tag Archives: ADF

Using the Oracle Credential Store Framework (CSF) in your Oracle BPM / ADF project

In our Oracle BPM/SOA project we initially started with 1 process which had a service call out to Oracle UCM/WCC. Since WCC uses basic authentication by default we enabled an OWSM policy on the external reference and made sure the username and password were set in the composite.xml. With the help of Oracle config plans we were able to transfer the SCA through the different OTAP environments.


<interface.wsdl interface="http://www.stellent.com/CheckIn/#wsdl.interface(CheckInSoap)"/>
<binding.ws port="http://www.stellent.com/CheckIn/#wsdl.endpoint(CheckIn/CheckInSoap)" location="oramds:/apps/rubix/references/UCM.wsdl" soapVersion="1.1">
<wsp:PolicyReference URI="oracle/wss_http_token_client_policy" orawsp:category="security" orawsp:status="enabled"/>
<property name="oracle.webservices.auth.password" type="xs:string" many="false" override="may">welcome2</property>
<property name="oracle.webservices.auth.username" type="xs:string" many="false" override="may">ucmuser</property>

However when there became more and more processes, with increased complexity and all with numberous callouts to backends with authentication enabled, the delivey of our release through the OTAP environment became more complex as well.Besides that, our Oracle ADF task screens needed connection to many of the same endpoints as well so we ended up with username and password properties in that deployment as well.

So to centralize the username and password in our environment we decided to use the full potential of the Oracle Credential Store Framework (CSF) for both BPM and ADF. Oracle CSF is part of the Oracle Platform Security Services (OPSS).

Since Oracle BPM relies heavily on the SOA-INFRA structure used by Oracle SOA Suite the functionality works identical. Lucky for us Edwin Biemond already blogged about this feature regarding Oracle SOA Suite which we could simple re-use for Oracle BPM.

Oracle Credential Store Framework

Next step was Oracle ADF where our task has functionality to call web services which have the same basic authentication. Again we have a quick start by using this blogpost from Wilfred van der Deijl. In this blogpost he explains how to use a key to the credential store and how to retrieve it from your ADF application.

ADF and Oracle Credential Store

With the help of these 2 fellow Dutch Oracle techies blogs this turned out to be the smoothest user story in our last sprint ;-)

References:

Advertisements
 
2 Comments

Posted by on 19-11-2013 in ADF, BPM, Oracle, SOA Suite

 

Tags: , , , , , ,

Oracle ADF custom Validator for BSN check

In the Netherlands, all people of ages 14 and up receive a Burgerservicenummer (BSN) (Citizen’s Service Number). It is printed on driving licenses, passports and international ID cards, under the header Personal Number. The number is unique and may not contain any information about the person to whom it is assigned. (no information such as gender or date of birth, etc). (source: Wikipedia)

The BSN consists of 9 digits and uses an algorithm often called “the 11-check”. This 11-check algorithm works like this:

Let's say we perform the 11-check on BSN 123456782
1st digit = 1, 9 * 1 = 9
2nd digit = 2, 8 * 2 = 16
3rd digit = 3, 7 * 3 = 21
4th digit = 4, 6 * 4 = 24
5th digit = 5, 5 * 5 = 25
6th digit = 6, 4 * 6 = 24
7th digit = 7, 3 * 7 = 21
8th digit = 8, 2 * 8 = 16
9th digit = 2, -1 * 2 = -2 (last digit is not added but subtracted)

total: 154

Because 154 can be divided by 11 we can assume 123456782 is valid (154/11=14, no rest 0)

So let’s start with creating a custom Validator in our ADF project. This is excellent documented by Mohammed Jabr on his blog.

Create a Java class that implements the javax.faces.validator.Validator

class

Use the following code:


package nl.rubix;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

public class BsnValidator implements Validator
{
 public BsnValidator()
 {
 super();
 }

public void validate(FacesContext facesContext, UIComponent uIComponent,
 Object object) throws ValidatorException
 {
 String BSN = object.toString();
 if (BSN.length()==9)
 {
 int checksum = 0;
 for(int i=0;i<8;i++)
 {
 checksum = checksum + (Character.digit(BSN.charAt(i),10) * (9-i));
 }
 checksum = checksum - Character.digit(BSN.charAt(8),10);
 // System.out.println("checksum total = " + checksum);
 // check Modulus for checksum
 if ( (checksum % 11 ) != 0)
 {
 System.out.println("checksum / 11 is niet 0");
 FacesMessage fm = new FacesMessage("BSN fails 11-check");
 throw new ValidatorException(fm);
 }
 else
 {
 // System.out.println("checksum works !!!");
 }
 }
 else
 {
 FacesMessage fm = new FacesMessage("BSN must be 9 digits");
 throw new ValidatorException(fm);
 }
 }
}

register the custom validator in your WEB-INF/faces-config.xml file

facesConfig

Configure the inputText to use the custom validator.

buttonForm

Go to the properties of your inputText and make sure you use the correct validatorID:


<af:inputText label="BSN:" id="it1">
 <f:validator validatorId="bsnvalidator"/>
 </af:inputText>

And on runtime this is the result (in Dutch I know):
Result

References:

 
Leave a comment

Posted by on 10-01-2013 in ADF, Oracle

 

Tags: , ,

Get value from inputtext in Oracle ADF

No rockit science this blogpost for the ADF gurus out there, but since I’m the new kid in town regarding Oracle ADF I decided to note down some of the stuff I found very usefull.

In our Oracle BPM project we generate our human task screens, however the customer wants them heavy modifed and at one time we needed the value of a inputtext component which had no binding.


FacesContext facesContext = FacesContext.getCurrentInstance();
 UIViewRoot root = facesContext.getViewRoot();
 RichInputText inputText = (RichInputText)root.findComponent("it1");
 String myString = inputText.getValue().toString();

Where value “it1” is the ID of your inputText component

Reference and all credits:

 
1 Comment

Posted by on 19-12-2012 in Oracle

 

Tags: , ,

Oracle BPM / ADF integration Best Practices (#oow)

Last OOW I visited the presentation of Danilo Schmiedel (blog & twitter) and Andrejus Baranovskis (blog & twitter) covering the topic “Oracle BPM & Oracle ADF” integration best practices. With my experience in BEA AquaLogic BPM 6 and Oracle BPM 10 the ADF integration in 11g was all new for me, so with just playing around with it I was very interested in the best practices.combining these 2 Oracle technologies for rich user interfaces.

So last month we started our Oracle BPM 11g project and during “sprint 0” we came to the conclusion that we would have long-running instances with a lot of human interaction and discussed the look-and-feel posibilities with our teams user experience expert. So a good time to look back upon the best practices from both gentlemans. So we used their presentation and advice to discuss the option of creating a generic ADF human task handler.

Check out Danilo’s blogpost about their presentation yourself and off course the presentation on slideshare.



 
Leave a comment

Posted by on 30-10-2012 in Events

 

Tags: , , ,