22
Soaplab SOAP-based Analysis Web Services Martin Senger <[email protected]> http:// industry.ebi.ac.uk/soaplab

Soaplab SOAP-based Analysis Web Services

  • Upload
    nowles

  • View
    42

  • Download
    4

Embed Size (px)

DESCRIPTION

Soaplab SOAP-based Analysis Web Services. Martin Senger http://industry.ebi.ac.uk/soaplab. What is the task?. You have (or someone else has) one or more command-line analysis tools You want to access them from other computers, eventually over an Internet - PowerPoint PPT Presentation

Citation preview

Page 1: Soaplab SOAP-based Analysis Web Services

SoaplabSOAP-based Analysis Web Services

Martin Senger <[email protected]>

http://industry.ebi.ac.uk/soaplab

Page 2: Soaplab SOAP-based Analysis Web Services

What is the task?

1. You have (or someone else has) one or more command-line analysis tools

2. You want to access them from other computers, eventually over an Internet

3. You want to access them using your (or someone else’s) programs, not just by filling the forms and clicking on web pages

Page 3: Soaplab SOAP-based Analysis Web Services

How it fits with the rest of the world

• Phase 1: Describe your command-line tool (preferable using an ACD file)

– http://www.hgmp.mrc.ac.uk/Software/EMBOSS/Acd/index.html

• Phase 2: Soaplab– this whole presentation is about this phase

• Phase 3: Write your own programs (GUIs and others) to access tools via Soaplab– part of this presentation is about this– Taverna: an example of a workflow system using

Soaplab (and other) web services as components

Page 4: Soaplab SOAP-based Analysis Web Services

What Web Services are in Soaplab?

• By resources that are being accessed:– command-line tools (sub-project: AppLab)– web pages (sub-project: Gowlab)

• By results that are being delivered:– Analysis/Gowlab Factory Service (misnomen)

• produces a list of all available services

– Analysis Service• represents one analysis tool and allows to start it, to control it, and

to exploit it, or it represents a remote web page accessible using the same API as other Soaplab analysis services

• does it in loosely type manner using the same API for all analysis

– Derived Analysis Service• does the same as the Analysis Service above but in a strongly typed

manner having individual API for any individual analysis tool

Page 5: Soaplab SOAP-based Analysis Web Services

Tomcat(or any servlet engine)

Apache Axis(SOAP Toolkit)

Soaplabservices

AppLabserver

Filesystemwith analysis

results

MySQL withresults

Command-linedriven

analysis tools

XML(analysis

description)

XML(analysis

description)

XML(analysis

description)

acd2xml(convertor)

XML(analysis

description)

XML(analysis

description)

ACD(analysis

description)

Talisman

Provided readyclients

Your ownclientprograms

BioPerlmodules(Bio::Tools::Run::Analysis)

Files: IOR/analyses/…

Create analysis description

Convert to XML

Start Tomcat server

Start AppLab server

Use existing client, or/and

Deploy Web Services

write your own client

This isSoaplab

Downoad: applab-cembalo-soaplab-version (for EMBOSS)

Downoad: analysis-interfaces-version

Downoad: soaplab-clients-version

http://industry.ebi.ac.uk/soaplab/dist/

Graphically…

Important:• how to write ACD• what API to use by the clients B

inary

distrib

utio

n

Page 6: Soaplab SOAP-based Analysis Web Services

Tomcat(or any servlet engine)

Apache Axis(SOAP Toolkit)

Soaplabservices

Gowlabclasses

Filesystemwith “analysis”

results

MySQL withresults

Remoteweb resources(web pages)

XML(analysis

description)

XML(analysis

description)

XML(analysis

description)

acd2xml(convertor)

XML(analysis

description)

XML(analysis

description)

ACD(analysis

description)

Talisman

Provided readyclients

Your ownclientprograms

BioPerlmodules(Bio::Tools::Run::Analysis)

Create web resource description

Convert to XML

Start Tomcat server

Start AppLab server

Use existing client, or/and

Deploy Web Services

write your own client

This isSoaplab

Downoad: analysis-interfaces-version

Downoad: soaplab-clients-version

http://industry.ebi.ac.uk/soaplab/dist/

Or…

Important:• how to write ACD• what API to use by the clients B

inary

distrib

utio

n

Page 7: Soaplab SOAP-based Analysis Web Services

A. Client developer

• Needs to know the Soaplab API

• Can develop in any programming language

• Needs to know a place (an endpoint) with a running Soaplab services– http://industry.ebi.ac.uk/soap/soaplab (EMBOSS)

• Can use the ready, pre-prepared Java and Perl clients

Downoad: soaplab-clients-version

http://industry.ebi.ac.uk/soaplab/dist/

Page 8: Soaplab SOAP-based Analysis Web Services

Soaplab APIhttp://industry.ebi.ac.uk/soaplab/API.html

createJob (inputs)run()waitFor()

getResults()destroy()

getSomeResults()

createAndRun (inputs)

runAndWaitFor (inputs)

The main methods for running an analysis

The methods for askingwhat is happening

getStatus()getLastEvent()

getCreated()getStarted()getEnded()getElapsed()

getCharacteristics()

getAnalysisType()getInputSpec()getResultSpec()

describe()

The methods for askingabout the whole analysis

createEmptyJob()

set_sequence_usa (datum)set_format (datum)set_firstonly (datum)…get_report()get_outseq()

An example of (additional)methods for a derived service

getAvailableAnalyses()getAvailableCategories()getAvailableAnalysesInCategory()getServiceLocation()

The List (factory) service

Page 9: Soaplab SOAP-based Analysis Web Services

Once you know API…import org.apache.axis.client.*;import javax.xml.namespace.QName;import org.apache.axis.AxisFault;import java.util.*;

Call call = null;try {

// specify what service to use call = (Call) new Service().createCall(); call.setTargetEndpointAddress ("http://industry.ebi.ac.uk/soap/soaplab/display::showdb");

// start the underlying analysis (without any input data) call.setOperationName (new QName ("createAndRun")); String jobId = (String)call.invoke (new Object[] { new Hashtable() });

// wait until it is completed call.setOperationName (new QName ("waitFor")); call.invoke (new Object[] { jobId });

// ask for result 'outfile' call.setOperationName (new QName ("getSomeResults")); Map result = (Map)call.invoke (new Object[] { jobId, new String[] { "outfile" } });

// ..and print it out System.out.println (result.get ("outfile"));

} catch (AxisFault e) { AxisUtils.formatFault (e, System.err, target.toString(),

(call == null ? null : call.getOperationName())); System.exit (1);} catch (Exception e) { System.err.println (e.toString()); System.exit (1);}

import org.apache.axis.client.*;import javax.xml.namespace.QName;import org.apache.axis.AxisFault;import java.util.*;

Call call = null;try {

// specify what service to use call = (Call) new Service().createCall(); call.setTargetEndpointAddress ("http://industry.ebi.ac.uk/soap/soaplab/display::showdb");

// start the underlying analysis (without any input data) call.setOperationName (new QName ("createAndRun")); String jobId = (String)call.invoke (new Object[] { new Hashtable() });

// wait until it is completed call.setOperationName (new QName ("waitFor")); call.invoke (new Object[] { jobId });

// ask for result 'outfile' call.setOperationName (new QName ("getSomeResults")); Map result = (Map)call.invoke (new Object[] { jobId, new String[] { "outfile" } });

// ..and print it out System.out.println (result.get ("outfile"));

} catch (AxisFault e) { AxisUtils.formatFault (e, System.err, target.toString(),

(call == null ? null : call.getOperationName())); System.exit (1);} catch (Exception e) { System.err.println (e.toString()); System.exit (1);}

Page 10: Soaplab SOAP-based Analysis Web Services

Once you know API…

use SOAP::Lite;

my ($soap) = new SOAP::Lite -> proxy ('http://industry.ebi.ac.uk/soap/soaplab/display::showdb');

my $job_id = $soap->createAndRun()->result;$soap->waitFor ($job_id);my $results = $soap->getSomeResults ($job_id, ['outfile'])->result;

print $results->{'outfile'} . "\n";

use SOAP::Lite;

my ($soap) = new SOAP::Lite -> proxy ('http://industry.ebi.ac.uk/soap/soaplab/display::showdb');

my $job_id = $soap->createAndRun()->result;$soap->waitFor ($job_id);my $results = $soap->getSomeResults ($job_id, ['outfile'])->result;

print $results->{'outfile'} . "\n";

use Bio::Tools::Run::Analysis;print new Bio::Tools::Run::Analysis (-name => 'display::showdb') ->wait_for ( {} ) ->result ('outfile');

use Bio::Tools::Run::Analysis;print new Bio::Tools::Run::Analysis (-name => 'display::showdb') ->wait_for ( {} ) ->result ('outfile');

• …or using BioPerl modules

• Direct usage of the Soaplab API…

Page 11: Soaplab SOAP-based Analysis Web Services

What names to use for inputs?

• Ask getInputSpec()

– some inputs are mutually exclusive (but Soaplab does not tell you )

– supported types: basic types

• And the results? Ask getResultSpec() – expected types: basic types, byte[], byte[][]– better check org.embl.ebi.SoaplabClient.AxisUtils.aa2bb()

Page 12: Soaplab SOAP-based Analysis Web Services

What else…

• Code examples at:– http://industry.ebi.ac.uk/soaplab/UserGuide.html

• Play also with existing clients:run-analysis-client –hrun-factory-client –hrun-registry-client –hrun-tutorial

Downoad: soaplab-clients-version

http://industry.ebi.ac.uk/soaplab/dist/

Page 13: Soaplab SOAP-based Analysis Web Services

B. Service provider

• EMBOSS provider

– contains pre-generated XML files for all EMBOSS analysis (but not EMBOSS itself)

• Provider of your own analysis tools

– contains for creating XML files

Downoad: analysis-interfaces-version

http://industry.ebi.ac.uk/soaplab/dist/

Downoad: applab-cembalo-soaplab-version (for EMBOSS)

http://industry.ebi.ac.uk/soaplab/dist/

acd2xml(convertor)

Page 14: Soaplab SOAP-based Analysis Web Services

Installation

• Run perl INSTALL.pl– and you will be asked many questions– or prepare your answers in environment

variables and run: perl INSTALL.pl –q

• Do you want to add your analyses?– write an ACD file (e.g. metadata/bigdeal.acd)– run: generator/acd2xml –d –l MyApps.xml bigdeal – see generator/README for details

Page 15: Soaplab SOAP-based Analysis Web Services

What questions to expect?basics

JAVA_HOME where is Java installedPROJECT_HOME where is everything unpackedRESULTS_URL URL pointing to the server-side results

tomcat and axis locationsTOMCAT_HOME directory where is a Tomcat servlet engineTOMCAT_URL URL accessing Tomcat (e.g. http://localhost:8080)AXIS_IN_TOMCAT directory where Axis is installed under TOMCAT

mySQL locations (the whole mySQL stuff is, however, optional)MYSQL_URL location of mySQL Soaplab databaseMYSQL_USER username of mySQL Soaplab databaseMYSQL_PASSWD password for mySQL Soaplab database

rarely needed, only for your own analysesADD_TO_PATH will be added to PATH before the AppLab server starts

nothing to do with web-services (so ignore it…)ALWEB_SCRIPTS_URL where are alweb cgi-bin scriptsALWEB_DOCS_URL where are alweb related documents

basicsJAVA_HOME where is Java installedPROJECT_HOME where is everything unpackedRESULTS_URL URL pointing to the server-side results

tomcat and axis locationsTOMCAT_HOME directory where is a Tomcat servlet engineTOMCAT_URL URL accessing Tomcat (e.g. http://localhost:8080)AXIS_IN_TOMCAT directory where Axis is installed under TOMCAT

mySQL locations (the whole mySQL stuff is, however, optional)MYSQL_URL location of mySQL Soaplab databaseMYSQL_USER username of mySQL Soaplab databaseMYSQL_PASSWD password for mySQL Soaplab database

rarely needed, only for your own analysesADD_TO_PATH will be added to PATH before the AppLab server starts

nothing to do with web-services (so ignore it…)ALWEB_SCRIPTS_URL where are alweb cgi-bin scriptsALWEB_DOCS_URL where are alweb related documents

Page 16: Soaplab SOAP-based Analysis Web Services

And run it!

• ./run-AppLab-server– check AppLabServer.log

• (start your Tomcat)• ./ws/deploy-web-services

• try any client– check soaplab.log

• …complain to [email protected]

Page 17: Soaplab SOAP-based Analysis Web Services

Deploying services

• That can be tricky…because it includes many things:– move your classes to Tomcat– create service descriptors (files *.wsdd)– generate and compile code for the derived

services– etc.

• Therefore, use a Soaplab admin client:– run-admin-client –help– which is used by ws/deploy-web-services, anyway

Page 18: Soaplab SOAP-based Analysis Web Services

Practical session

Page 19: Soaplab SOAP-based Analysis Web Services

A. Main steps

i. Download various Soaplab distributions

ii. Try several ready clients

1. Code your own client (calling EMBOSS at EBI)

2. Run Soaplab on top of your own EMBOSS installation on your machine

3. Code your own ACD file and run Soaplab service on top of it

Page 20: Soaplab SOAP-based Analysis Web Services

Code your own client• Calling EMBOSS at EBI:

– class Seqret.java– usage:java Seqret [format] < input_sequence > reformatted_sequence

– where format represents output sequence format and is used as parameter osformat, and input_sequence is used as parameter sequence_direct_data or sequence_usa (check for double colon)

– check it by calling:• java Seqret ncbi < embl:v08008

– it does the same as:

>gnl|embl|MMIGK7 (V00808.1) Part of the murine gene for kappa-immunoglobulin leader peptide and variable part (cell line MOPC41).cgtgaccaatcctaactgcttcttaataatttgcataccctcactgcatcgccttggggacttctttatataacagtcaaacatatcctgtgccattgtcattgcagtcaggactcagcatggacatgagggctcctgcacagatttttggcttcttgttgctcttgtttcaaggtaaaatgaaacttaaaattgggaattttccactgtttccaactgtggttagtgttgactggcatttgggggatgtcctcttttatcatgcttatctatgtggatattcattatgtctccactcctaggtaccagatgtgacatccagatgacccagtctccatcctccttatctgcctctctgggagaaagagtcagtctcacttgtcggccaagtcaggacattggtagtagcttaaactggcttcagcaggaaccagatggaactattaaacgcctgatctacgccacatccagtttagattctggtgtccccaaaaggttcagtggcagtaggtctgggtcagattattctctcaccatcagcagccttgagtctgaagattttgtagactattactgtctacaatatgctagttctccgtggacgttcggtggaggcaccaagctggaaatcaaacgtaagtagaatccaaagtctctttcttccgttgtctagtctgtgtctatg

>gnl|embl|MMIGK7 (V00808.1) Part of the murine gene for kappa-immunoglobulin leader peptide and variable part (cell line MOPC41).cgtgaccaatcctaactgcttcttaataatttgcataccctcactgcatcgccttggggacttctttatataacagtcaaacatatcctgtgccattgtcattgcagtcaggactcagcatggacatgagggctcctgcacagatttttggcttcttgttgctcttgtttcaaggtaaaatgaaacttaaaattgggaattttccactgtttccaactgtggttagtgttgactggcatttgggggatgtcctcttttatcatgcttatctatgtggatattcattatgtctccactcctaggtaccagatgtgacatccagatgacccagtctccatcctccttatctgcctctctgggagaaagagtcagtctcacttgtcggccaagtcaggacattggtagtagcttaaactggcttcagcaggaaccagatggaactattaaacgcctgatctacgccacatccagtttagattctggtgtccccaaaaggttcagtggcagtaggtctgggtcagattattctctcaccatcagcagccttgagtctgaagattttgtagactattactgtctacaatatgctagttctccgtggacgttcggtggaggcaccaagctggaaatcaaacgtaagtagaatccaaagtctctttcttccgttgtctagtctgtgtctatg

run-analysis-client -e http://industry.ebi.ac.uk/soap/soaplab \-name edit::seqret \-w -r outseq –q \sequence_usa embl:v00808 osformat ncbi

run-analysis-client -e http://industry.ebi.ac.uk/soap/soaplab \-name edit::seqret \-w -r outseq –q \sequence_usa embl:v00808 osformat ncbi

Page 21: Soaplab SOAP-based Analysis Web Services

Run Soaplab on top of your EMBOSS

• Install EMBOSS• Install the rest • run AppLab and Tomcat

servers• deploy Soaplab services• check with Soaplab and your

clients

Page 22: Soaplab SOAP-based Analysis Web Services

Add your own analysis

• add a “real” analysis– cal [–m] [–j] [–y] [[month] year]

– write an ACD file– convert it to XML, create MyApp.xml

– edit run-AppLab-server script– restart AppLab and Tomcat server

• deploy:• ws/deploy-web-services –n cal –l

– try by: ws/run-analysis-client

• add a Gowlab-based resource