martedì 2 luglio 2013

Web Service - deployare ed eseguire una ABL procedure

In questo post esaminiamo come effettuare il deploy di una ABL procedure come web service.
Al nostro scopo editiamo e copiamo il codice seguente e salviamolo con il nome test.p.

DEFINE INPUT  PARAMETER iNum AS INTEGER    NO-UNDO.
DEFINE OUTPUT PARAMETER cReturn AS CHARACTER NO-UNDO.

IF iNum = 1 THEN DO:
    cReturn = "Test OK!".
    RETURN "OK!".
END.
ELSE DO:
    cReturn = "Test Fallito".
    RETURN "Fallito!".
END.

Come possiamo ora invocare la procedura attraverso un servizio web?
Prima di tutto abbiamo bisogno di renderla accessibile attraverso un AppServer. L'AppServer è disegnato in modo da ricevere richieste da clients OpenEdge, occorre quindi adattarlo a ricevere chiamate attrraverso web services inserendo nel mezzo un web server. Abbiamo trattato l'argomento nel post OpenEdge AppServer Web Service & Tomcat (on windows).
Un web server permette di eseguire un Web Service Adapter (WSA), programma fornito con OpenEdge che esegue una Java Servlet.
A questo punto, per creare lo "strato" necessario al deploy della nostra BL, dobbiamo usare un programma fornito da OpenEdge che permetta di generare un kit di deploy.
Lanciare il programma Proxy Generator (proxyGen). ProxyGen genera un Web Service Application Descriptor (WSAD) ed un Web service Descriptor Language (WSDL) da usare in fase di deploy e testing.
A runtime una richiesta di web service client viene "codificata" in forma di richiesta SOAP; la richiesta viene instradata, attraverso l'accoppiata web server - WSA, all'AppServer che a sua volta invoca il servizio richiesto (BL procedure) e ritorna l'output come un altro messaggio SOAP.

Figura 1

Andiamo ora a definire un'applicazione (AppObject). Selezionare File->New

Figura 2

Abbiamo dato il nome al nostro servizio ed impostato la propath accessibile dall'appserver su cui è distribuito il programma test.r. Ora selezioniamo il folder Procedures.

Figura 3

Nel nostro esempio vogliamo deployare una procedura non persistente. Premendo il tasto dx del mouse, nel riquadro relativo le Non-persistent Procedures, selezioniamo la voce Add -> Non-persistent ... poi il programma compilato test.r in modo da ottenere ciò che è mostrato in figura 3.
Procediamo selezionando la procedura e premendo il tasto dx del mouse; dal menu a tendina scegliamo la voce Customize ...
Figura 4
Selezionare il toggle-box Return ABL RETURN-VALUE. Ciò è necessario in quanto non è implicito come in un normale ritorno tra ABL procedures. Così facendo viene generato un parametro di output chiamato result.
Ora non ci resta che generare il proxy per questo nuovo AppObject.
Premere l'icona


Inserire le informazione come mostrato in figura 5
Figura 5
AppService : è l'appserver attraverso cui è raggiungibile la BL test.r.
Output Dir:    è la directory su cui sarà salvato il package da distribuire
Session Model: nel nostro caso scegliamo Free in modo da non mantenere la connessione in binding. Ovviamente deve essere anche il session model dell'appserver.

Ora selezioniamo il Folder Web Service
Figura 6
Inseriamo i valori riportati in figura 6.
URL for WSA : se avete configurato la vostra macchina come indicato nel post OpenEdge AppServer Web Service & Tomcat (on windows).
WSDL Style: Doc/Literal è lo stile che usa una formattazione xml standard per rappresentare i parametri come un singolo elemento xml. Scegliendo Doc/Literal ProxyGen effettua la formattazione necessaria per voi ed il web service consumer sarà informato che questo è lo style che deve aspettarsi.

Premendo OK parte la procedura di generazione del proxy.
A questo punto abbiamo tutto il necessario per deployare la nostra prima BL.
Dando uno sguardo alla directory C:\Temp\MyProxyTest vedrete il risultato dell'operazione appena effettuata (proxygen). I file che ci interessano sono test.wsm (web service mapping)  e test.wsdl.
Per deployare la nostra applicazione usiamo uno dei tool forniti da OpenEdge (Progress Explorer Tool o OpenEdge Explorer).
Per velocità nel nostro caso usiamo Progress Explorer Tool. Nel nostro esempio la macchina su cui andremo a deployare è localhost.
Navighiamo l'albero del Tool raggiungendo il nodo Web Services Adapter ed espandiamolo fino a raggiungere il sotto-nodo wsa1 -> WebServices. Selezioniamo quest'ultimo e premendo il tasto destro del mouse scegliamo la voce Deploy A New Web Service ...
Figura 7
Premendo browse scegliere il file C:\Temp\MyProxyTest\test.wsm e premere Continue. Alla maschera successiva premere OK.
Complimenti, il deploy è andato a buon fine. Potete verificare nella directory del vostro web server (es. C:\<dir install>\webapps\wsa\wsa1) la presenza di 3 nuovi file; test.wsad, test.props, test.wsdl.
Non resta che abilitare il servizio; da Progress Explorer Tool selezionare test, tasto destro, Enable.




0 commenti: