mercredi 31 mars 2010

Appeler un composite SCA en java

Voici un mémo expliquant comment appeler un composite SCA de Soa Suite 11G PS1 depuis une classe java.

Avant tout il faut créer un projet SOA comprenant un composant Bpel (par exemple) qui fait un "hello world" en synchrone ou en asynchrone ...

Ensuite dans le composite il suffit de rajouter une interface "Direct Binding Service"




Nous avons donc ci-dessus un composite offrant une interface Web Service et une interface type RMI.


Oracle SOA suite propose nativement l'ensemble des API java afin de déclencher un composite SCA en RMI.


Pour cela il suffit de créer une connexion RMI via l'api "Locator" décrite dans ce code ci-dessous:


public class ClassTestRmi {
public ClassTestRmi() {
super();

Hashtable jndiProps = new Hashtable();
jndiProps.put(Context.PROVIDER_URL, "t3://10.0.0.1:7001/soa-infra");
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
jndiProps.put(Context.SECURITY_PRINCIPAL, "weblogic");
jndiProps.put(Context.SECURITY_CREDENTIALS, "welcome1");
jndiProps.put("dedicated.connection", "true");

Locator locator = null;
try {
// connect to the soa server
locator=LocatorFactory.createLocator(jndiProps);
System.out.println("Got locator : "+ locator.toString());
// find composite default domain, Helloworld Composite, version 1.0
CompositeDN compositedn = new CompositeDN("default", "Project1RMI", "1.0");

// call the direct binding of the Helloworld composite - spécifier le nom de l'interface de direct binding
DirectConnection conn = locator.createDirectConnection(compositedn,"Service1RMI");


String
inputPayload =
"
\n" +
VOTRE XML d'appel du composite (sans les balise SOAP)
"
\n";

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(inputPayload)));
Element root = doc.getDocumentElement();

//

//
//


Map partData = new HashMap();
// have to use payload see BPELProcess1RequestMessage
partData.put("payload", root);

Payload payload = PayloadFactory.createXMLPayload(partData);

//Messages are created using the MessageFactory
Message request = XMLMessageFactory.getInstance().createMessage();
request.setPayload(payload);

//

//

//
//
//

//

// this is a request-reply service so we need to use conn.request else use conn.post
// need to provide operation name so we need to use process
Message response = conn.request("process", request);

TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);

//

//
//

// need to use payload again
DOMSource source = new DOMSource((Node)response.getPayload().getData().get("payload"));

transformer.transform(source, result);
System.out.println("Result\n"+sw.toString());

} catch (Exception e) {
e.printStackTrace();
}

}




Je vous propose en attachement dans ce zip mon projet SOA composite, avec le projet Jdev d'appel en java : ICI



ps: Il est important d'importer les jar nécessaires aux api java. Voici la liste:


vendredi 26 mars 2010

SOA 11G - BPEL Process envoye un email


Cet article explique chaque étape pour connecter la Soa Suite 11G PS1 avec un serveur d'email gratuit déjà étudié (Argosoft).

Avant tout il faut configurer notre serveur d'email:

















puis vient la configuration de Soa Suite via la console d'administration Enterprise Manager:




















Ne pas oublier également de configurer la notification du workflow:









Ensuite soit vous relancez votre serveur SOA soit vous stopper et redémarrer: usermessagingdriver-email

Ensuite il suffit de déployer un composite comprenant par exemple un processus BPEL:







Suite à l'execution du composite vous devez avoir dans vos log ce type de trace:



DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.s
mtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "hsimonne-fr", port 25, isSSL false
220 ArGoSoft Mail Server Freeware, Version 1.8 (1.8.8.8)
DEBUG SMTP: connected to host "hsimonne-fr", port: 25

EHLO hsimonne-fr
250-Welcome [10.0.0.1], pleased to meet you
250-AUTH=LOGIN
250-AUTH LOGIN
250-SIZE 5242880
250 HELP
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN"
DEBUG SMTP: Found extension "SIZE", arg "5242880"
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
d2VibG9naWM=
334 UGFzc3dvcmQ6
b3JhMTIz
235 Authentication successful
DEBUG SMTP: use8bit false
MAIL FROM:
250 Sender "weblogic@mail.fr" OK...
RCPT TO:
250 Recipient "demoadmin@mail.fr" OK...
DEBUG SMTP: Verified Addresses
DEBUG SMTP: demoadmin@mail.fr
DATA
354 Enter mail, end with "." on a line by itself
Return-Path: <>
From: weblogic@mail.fr
Reply-To: no.reply@yourdomain.com
To: demoadmin@mail.fr
Message-ID: <385813920.2.1269849263251.javamail.hsimonne@hsimonne-fr>
Subject: test From Bpel - test From Bpel - 1900042010-03-29T09:54:23+02:00
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-EmailDriver-Message-ID: hsimonne-fr:25@385772960-0

Email Bpel
Bonjour demoadmin@mail.fr
.
250 Message accepted for delivery.
QUIT


Il reste plus qu'à vérifier votre résultat dans l'interface web de argosoft:



Vous pouvez également valider les envois et réceptions d'email sur la console EM:



Encore plus ?



Configuration pour Google email (en anglais): ICI



En cas de problème de connexion, validez cela:





Pluggable Notification Service Registration
Once the implementation is available, you register it in the System MBean Browser.
To register the pluggable notification service:
1. Log in to Oracle Enterprise Manager Fusion Middleware Control Console.
2. In the navigator, expand the SOA folder.
3. Right-click soa-infra, and select Administration > System Mbean Browser.
The System MBean Browser displays on the right side of the page.
4. Expand Application Defined MBeans > oracle.as.soainfra.config > Server:
server_name > HWFMailerConfig > human-workflow.
5. Click the CustomNSDriverPropertyNames property on the right side of the page.
6. Record the values displayed by CustomNSDriverPropertyNames for the All,
Voice, Email, Fax, Pager, SMS, and IM properties.
7. Click Return.
8. Click the Operations tab.
9. Click setCustomNSDriverPropertyValue

MP190PR.inf problème de partage imprimante Canon Win7 avec Xp

Un petit mémo sur le partage d'imprimante depuis Win7 avec une Canon MP190.

J'ai rencontré quelques difficulté pour rajouter mon imprimante sur XP alors qu'elle était partagée sur mon Win7. La connexion s'effectue bien, mais l'installation bloquait sur la demande du fichier MP190PR.inf.

Voici la soluce trouvée sur un forum:

SOLUTION.

1. On the Xp machine, Add Network Printer. Browse for printer.Xp found the Canon IP5000 on the Windows 7 machine.

2. COPY the network path (\\windows7machine\printername

3. Cancel the install.

4. On the Xp machine, Add A Printer

5 Add a local Printer

6 Create a new port

7. From drop-down list, select ' local port'

8. In "Enter Port Name", PASTE the network path found in 2 aboveClick the usual oks and print a test page.I did this on all the pc's on the LAN which previously had the Pixma driver installed, and they all can find the Pixma installed on the Windows 7 machine.

lundi 22 mars 2010

Composite SCA avec WS-Adressing + BPEL


Ce mémo vous propose d'implémenter un composite SCA (SOA Suite 11G PS1) qui va utiliser (interface entrante) du WS-Adressing.

Le WS-Adressing est un standard permettant de véhiculer des messages SOAP de façon bidirectionnelle, en mode synchrone ou asynchrone, indépendamment de la couche de transport.

Tout d'abord il faut attacher une politique de sécurité depuis Enterprise Manager ou depuis Jdev. Oracle propose cette policy en standard.




Cette politique SCA impose un dialogue avec un header WS-Adressing:








Le composite contient un processus BPEL qui a 2 méthodes d'accès et donc 2 receive.

Dès la réception du premier message il va ensuite attendre un 2 ieme message conforme à l'id WS-Adressing précédent.













Pour tester le composite WS-Adressing nous pouvons utiliser SoapUI comme suit:





Le composite SCA possède une nouvelle instance suite au second appel et l'identification WS-Adressing va permettre au composant BPEL de poursuivre son execution.


Retrouvez mon exemple dans Jdev 11g: ICI

Composite SCA avec EDN et Bpel en corrélation




Voici un petit mémo sur Soa Suite 11G PS1 utilisant un composite (ci-dessus) réagissant sur un évènement EDN.



Pour cela il suffit de déclarer un évènement, comme dans mon exemple en appuyant sur l'éclair orange de l'éditeur SCA. Cet évènement est basé sur une structure XSD libre.



Le composite recevra via JMS ou AQ (mode event de soa 11g) un évènement que vous pouvez générer à partir de la console Enterprise Manager 11G:




Le premier évènement contient un ID (identifiant fonctionnel) qui nous servira pour la corrélation sur le processus BPEL.

Le composite réagit alors à notre évement XML:




Puis le processus BPEL attend, un message avec le même ID et une balise suite avec le contenu 'suite'



Si l'on pousse l'évènement suivant on a alors :


Une seconde instance de composite SCA va alors se déclencher. La corrélation du processus BPEL se déclenche alors pour reprendre en cours le processus:




Un petit focus sur la corrélation dans BPEL PM, il suffit de regarder mes articles précédents sur ce sujet.


Dans la Soa 11G il suffit de faire sur le premier receive :

sur le second receive:

Je propose le projet Jdev en entier: ICI

mardi 9 mars 2010

Oracle BAM 11g - icommand

La fonction d'import / export du BAM version 11g change :

D:\productORACLE\v11.2\Oracle_SOA1\bam\bin>iCommand -CMD export -NAME "/test/Conso" -TYPE DATAOBJECT -FILE MonDataObject.xml


D:\productORACLE\v11.2\Oracle_SOA1\bam\bin>iCommand -CMD export -NAME "/public/Report/BAM" -TYPE REPORT -FILE CAReport.xml

Le détail de la command et de ses options:
D:\productORACLE\v11.2\Oracle_SOA1\bam\bin>icommand


Oracle BAM - Utilitaire de commande [Build 7562, RÚfÚrentiel BAM version 2025] C
opyright ® 2002, 2009, Oracle et/ou ses filiales. Tous droits rÚservÚs.

ICOMMAND
-CMDFILE file_name
[-DOMAIN domain_name]
[-USERNAME user_name]
[-LOGFILE file_name]
[-LOGMODE APPEND OVERWRITE]

Or:

ICOMMAND
-CMD command_name
[command parameters]
[-DOMAIN domain_name]
[-USERNAME user_name]
[-LOGFILE file_name]
[-LOGMODE APPEND OVERWRITE]

If DOMAIN is omitted, "main" will be used.
If "main" is used, ADC location in the config file will be used.
The -USERNAME specifies the BAM login user to be used.
If -USERNAME is used then ICOMMAND will prompt for a password.
If LOGMODE is omitted, OVERWRITE will be used.
Command and parameter names are not case-sensitive.
Parameter values that contain spaces should be enclosed in quotes.

Commands and their parameters:

EXPORT
-FILE file_name
[-NAME item_name]
[-TYPE DATAOBJECT SECURITYFILTERS FOLDER REPORT RULE DISTRIBUTIONLIST EMS EDS ALL]
[-MATCH dos_pattern]
[-REGEX regular_expression]
[-ALL [0 1]]
[-SYSTEMOBJECTS [0 1]]
[-DEPENDENCIES [0 1]]
[-LAYOUT [0 1]]
[-CONTENTS [0 1]]
[-PERMISSIONS [0 1]]
[-OWNER [0 1]]
[-HEADER [0 1]]
[-FOOTER [0 1]]
[-APPEND [0 1]]
[-PREVIEW [0 1]]

IMPORT
-FILE file_name
[-DELAY milliseconds]
[-UPDATELAYOUT [0 1]]
[-MODE PRESERVEID UPDATE OVERWRITE APPEND RENAME ERROR]
[-PRESERVEOWNER]
[-SETCOL[n] column_name/NULL NOW VALUE:value]
[-CONTINUEONERROR [0 1]]
[-PREVIEW [0 1]]

DELETE
[-NAME item_name]
[-TYPE DATAOBJECT SECURITYFILTERS FOLDER REPORT RULE DISTRIBUTIONLIST EMS EDS
ALL]
[-MATCH dos_pattern]
[-REGEX regular_expression]
[-ALL [0 1]]
[-SYSTEMOBJECTS [0 1]]

RENAME
-NAME item_name
-NEWNAME new_item_name
[-TYPE DATAOBJECT FOLDER REPORT RULE DISTRIBUTIONLIST EMS EDS]

CLEAR
-NAME item_name
[-TYPE DATAOBJECT FOLDER DISTRIBUTIONLIST]

Sample Object names:
Data Object: "/Samples/Call Center"
Private Report: "/private:userid/Report/My folder/My report"
Public Report: "/public/Report/Some folder/Some report"
rule (Alert): "/private:userid/Rule/My alert"

Sample command file:
<?xml version="1.0" encoding="utf-8"?>
<OracleBAMCommands>
<Export name="/My folder/My data object" file="MyFile.xml" contents="0" />
<Delete name="/My folder/My data object" />
</OracleBAMCommands>

ICommand regular expressions:
The behavior of ICommand -regex is exactly like java.util.regex package for
matching character sequences against patterns specified by regular expressions.