1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson,...

59
1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar

Transcript of 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson,...

Page 1: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

1

Components in Perland SOAP::Lite

Team "Messengers"

Larry McKnight, MDDavis Bu, MDPete Stetson, MDMaryam Kamvar

Page 2: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

2

Table of Contents:

Project OverviewProject DemoPerl, SOAP::Lite and Components

Page 3: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

3

Context: PalmCIS

Project and Application.Project goal is to reduce medical errors. Improving communication (whiteboard) Timely access to patient information.

PalmCIS (the app) a wireless handheld version of the CIS.

Timely access to domain knowledge (Infobuttons).

Page 4: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

4

Communication Example:

Nurse wants orders renewed. Nurse identifies the Intern for her patient. Nurse finds the pager number for the Intern. Nurse pages intern, waits for response. Intern interrupts his current activities to

answer page. Intern must remember task (sign orders) Intern return to previous task.

Inefficient, error prone.

Page 5: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

5

Project:A Virtual Whiteboard

Problem: Team structure changes rapidly. Identifying and contacting providers is difficult. Problem: Interruptive work environments make errors more likely.Problem: Patients are very concerned about who looks at their data.

Solution: new system. Patient centered, asynchronous, role based (like a whiteboard).

Page 6: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

6

Legacy: WebCIS

Web based Clinical Information System CGI based (written in C). AIX Server

farm. Patient data on mainframe. Restricted

access thru UNIX sockets (DAMs). Provider Authentication data through

LDAP server. C and Perl socket drivers available. No EJB, CORBA, or .NET

Page 7: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

7

WebCIS

Page 8: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

8

New Problem

We would like to take advantage of principles in this class – XP, Components, etc.We want to use Perl. Legacy Perl drivers. Convincing the system admin to install EJB,

CORBA or .NET to run the project would kill it.

Solution: Use Perl as a component model.

Page 9: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

9

Is Perl a Component Model?

Intro to PerlPerl Objects and ModulesSOAP::LiteComponent Model definitions and satisfaction with Perl

Hold questions until end

Page 10: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

10

Intro to Perl

In the beginning: UNIX, C, sed, awk.1986 – Larry Wall Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister "So lazy he created a new computer language“

V1, 12/87 Released to Usenet V4, 3/91 The Camel book. V5, 10/94 “Everything else” - Objects, Modules. V5.6, 3/2000 V5.8, 7/2002

Today: widespread use, cgi scripts, CPAN.

Page 11: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

11

Why Perl?

Faster development time. ~1/3 – 2/3 as much code. CPAN Common things are easy, hard things are

possible.

Most things are (or can be represented as) text. Perl has excellent string handling.Perl is and (according to Larry Wall, will always be) free. Perl is fun.

Page 12: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

12

Common Myths about Perl

Myth:Easy to learn; Fact:Easy to use. Goal has always been power over learning. Lots of quirks, Easier ways.

Myth:Slow; Fact: Mostly Fast. C bindings, Profiling. Use of appropriate data structures. Mod_perl. Don't use it to develop a CAD app or Micro-

kernel.

Page 13: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

13

Perl Myths continued…

Myth:Insecure; Fact: Mostly Secure Taints, warnings, use safe Security by design, not obscurity

Myth:Not scalable; Fact: Very scalable The defining problem. The best inter-platform, inter-language support I

know of. It also scales down.

Myth:Un-maintainable; Fact: It Depends “A very high-level language” Perl lets you get away with stuff.

Page 14: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

14

Why ! Perl?

Your boss/customer wants it done in some other language.Your problem has lots of numbers in it.You need a GUI.You don't know Perl. You despise the command prompt.You don't want others to see your code.

Page 15: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

15

Perl: Data Types

Scalarsmy $null_val=""; my $count++; my $name="Larry";my $string=$name.$count; #string is “Larry1”

Arrays, Lists my @a=();my @stooges=qw(Larry Moe Curley);

Hashesmy %treatment=(diabetes=>"insulin");my $medicine=$treatment{$disease};

Page 16: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

16

Perl: Numbers

Type automatically set to int or floats depending on context.12345 Integer -54321 Negative integer 12345.67 Floating point 6.02E23 Scientific notation 0xffff Hexadecimal 0377 Octal 4_294_967_296 Underline for legibility

Override with int or hex functions

Page 17: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

17

Perl: Type conversion

Hashes can be arrays%fruit=('apples',3,'oranges',6);

print $fruit{apples}; #prints 3

All arrays have scalar contexts$a=(2,4,6,8); #a is 8

$b=%c; #b is the number of items in c

($sec, $min, $hour, …)=localtime;

$now=localtime; #$now is like "Fri Aug 18,…)

Page 18: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

18

Perl: Subroutines

Arguments Passed as a single flat list of scalars (@_) Return is evaluated in the context it is called. @c=myadd($a,$b);sub mysort { my $a=shift; my $b=shift; … return @c;}$d=mysort(@c);

Page 19: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

19

Perl: References

@alist=("pitt", "hanks", "cage", "cruise");%treat=("headache"=>"aspirin", "cold"=>"chicken soup");sub c2f { 9/5*$ARG[0]+32 };

$stars=\@alist; $therapy=\%treat; $coldtherapy=\$treat{"cold"};$convert=\&c2f;$pi=\3.1459;

print $$coldtherapy; #prints chicken souppush @blist, $stars->[3]; #cruise is blisted

$family={dad=>"Homer", mom=>"Marge", son=>"Bart"}

Page 20: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

22

Defining Perl Objects:

package NBC::Horse; #namespaceour @ISA=("Animal"); #inheritancesub new{ my ($class, $name)=@_; my $self={name=>"$name", #anonymous reference sound=>"neigh"}; bless $self, $class; #blessed into an object} #return implied…sub sound { my $self=shift; return $self->{sound};}

Page 21: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

23

Instantiation of Perl Objects:

use NBC::Horse;

my $horse=NBC::Horse->new("Mr. Ed");

#is equivalent to

my $horse=NBC::Horse::new("Horse", "Mr. Ed");

print $horse->name, " says ", $horse->sound, ".\n";

#prints Mr. Ed says neigh.

Page 22: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

24

Perl Ties

DBMuse DB_File;tie %treat, "DB_File", "treatments";

my $rx=$treat{"Diabetes"}; $treat{"PUD"}="PrevPak";

Rolling your own:User Code Executed Codetie $s, "SomeClass" SomeClass->TIESCALAR()$p = $s $p = $obj->FETCH()$s = 10 $obj->STORE(10)

Page 23: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

25

Perl Modules

The unit of software reuse in Perl is the module, a file that has a collection of related functions designed to be used by other programs and library modules. Every module has a public interface, a set of variables and functions that outsiders are encouraged to use. From inside the module, the interface is defined by initializing certain package variables that the standard Exporter module looks at. From outside the module, the interface is accessed by importing symbols as a side effect of the use statement. … When we talk about modules in this chapter, and traditional modules in general, we mean those that use the Exporter.

Page 24: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

26

Perl Modules

#!/usr/bin/perl –wTpackage Cards::Poker; use Exporter;use strict;use vars qw(@ISA @EXPORTS $VERSION);@ISA=qw(Exporter);@EXPORTS=(shuffle @deck);@deck=();$VERSION=0.01;1;sub new{…sub shuffle{…

Page 25: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

27

Perl POD

The Semantic Interface pod2man, pod2text, pod2html, pod2latex…

…=head1 NAMEMyModule…=head1 SYNOPSIS use MyModule;…=item foo($bar)Foo transforms $bars and returns a $baz=cutsub foo { my $bar=shift;…

Page 26: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

28

Modules for Distribution

CPANh2xsTest HarnessPOD

http://www.cpan.org/misc/cpan-faq.htmlman perlmodlib

Page 27: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

29

CPAN

Page 28: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

30

Installing Modules

Finding Modulesfind `perl –e ‘print “@INC” ’`-name “*.pm” -printpmdesc

http://search.cpan.org/

Unixtar –xzvf; perl Makefile.PL; make; make test; make installperl –MCPAN -eshell

Windows (ActiveState Perl)perl ppm.pl

Page 29: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

31

Language Interfaces & Distributed Perl?

XSJava.pmCORBA::OrbitCOMSOAP::Lite

Page 30: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

32

XS

XS=eXternal SubroutineSee man pages perlguts, perlxs, perlxstut,perlcall, perlapi, h2xs, Chap. 21 of the Camel.

Page 31: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

33

Building XS

h2xs -A -n Mytest

MANIFEST, Makefile.PL,Mytest.pm, Mytest.xs, Changes

edit Mytest.xs

perl Makefile.PL

make

make test

Page 32: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

34

Example: XS

#include "EXTERN.h" #include "perl.h" #include "XSUB.h" MODULE = Mytest PACKAGE = Mytest void round(arg) double arg CODE: if (arg > 0.0) { arg = floor(arg + 0.5); }

else if (arg < 0.0){ arg = ceil(arg - 0.5); } else { arg = 0.0; } OUTPUT: arg

Page 33: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

35

Example:calling XS

package Mytest;

require Dynaloader;

our @ISA=(…Dynaloader…);

bootstrap Mytest $VERSION;

Page 34: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

36

Example: Java.pm

use Java;

$java = new Java;

$frame = $java->create_object( "java.awt.Frame","Frame's Title");

$frame->setSize(400,400);

$frame->show();

$java->do_event( $frame,"addWindowListener",\&event_handler);

Page 35: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

37

Example: CORBA::ORBit

use CORBA::ORBit idl=>[‘echo.idl’];

my $orb=CORBA::ORB_init(“orbit-local-orb”);

open IOR, “echo.ior”;

my $ior=<IOR>;

close IOR;

my $echo=$orb->string_to_object($ior);

$echo->echoString($mystring);

Page 36: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

38

Example: COM

http://www.extropia.com/tutorials.misc/perl_com.html

package WebMail;

use Mail::Sender;

1;

sub send {

my($from, $replyto, $to, $cc, $bcc, $smtp, $subject, $message, $file) = @_;

Page 37: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

39

Example: Perl COM cont…

PerlCtrl.pl –t

=POD =BEGIN PerlCtrl %TypeLib = ( PackageName => 'WebMail',

TypeLibGUID => '{B3C98206-C910-11D3-B450-00805F9BDE4A}', ControlGUID => '{B3C98207-C910-11D3-B450-00805F9BDE4A}',

DispInterfaceIID=>'{B3C98208-C910-11D3-B450-00805F9BDE4A}', ControlName => 'WebMail',

… Methods => { 'send' =>

{ RetType => VT_BOOL,TotalParams => 9,

Page 38: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

40

SOAP

Simple Object Access ProtocolXML standard

<s:Envelope xmlns:s=… >

<s:Header>…</s:Header>

<s:Body>

<n:foo xmlns:n="urn:fooserv">

<symbol xsi:type="xsd:string">bar</symbol>

</n:foo>

</s:Body>

</s:Envelope>

Page 39: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

41

SOAP::Lite Client Example

#!/usr/bin/perl -w

use SOAP::Lite;

print SOAP::Lite

->uri('http://www.soaplite.com/Demo')

->proxy('http://services.soaplite.com/hibye.cgi')

->hi()

->result;

Page 40: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

42

SOAP::Lite Client Example2

#!/usr/bin/perl -w

use SOAP::Lite +autodispatch=>

uri=>('http://www.soaplite.com/Temper'),

proxy=>('http://services.soaplite.com/temper.cgi');

print f2c(98.6);

Page 41: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

43

SOAP::Lite CGI Server

#!/usr/bin/perl -w

use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI

->dispatch_to('Temperatures')

->handle;

package Temperatures;

sub f2c{

my ($class,$f)=$_;

return 5/9*($f-32);

}

Page 42: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

44

SOAP HTTP Daemon Server

#!/usr/bin/perl -w

use SOAP::Transport;

use Temperatures;

my $daemon=SOAP::Transport::HTTP::Daemon

->new(LocalPort=>81)

->dispatch_to('/home/soaplite/modules');

print "started SOAP daemon at ",$daemon->url, "\n";

$daemon->handle;

Page 43: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

45

SOAP::Lite

Object methods, and exceptions.mod_perl, mod_soap serversStated support for: .NET / COM MS SOAP/ Apache SOAP interoperability HTTPS / Jabber / MQSeries / SMTP / POP3 WSDL schema

Page 44: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

46

SOAP::Lite suds

Autodispatch doesn't always work.Talking to .Net servers requires explicitly naming and typing variables in SOAP::Lite.

Page 45: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

47

Components

What's a component? Legally Practically

Page 46: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

48

A component defined "Legally"

"A component model defines specific interaction and composition standards. A component model implementation is the dedicated set of executable software elements required to support the execution of components that conform to the model"

"A software component is a software element that conforms to a component model, and can be independently deployed and composed without modification according to a composition standard"

Page 7 CBSE

Page 47: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

49

Interaction Standard

"the mandatory requirements employed and enforced to enable software elements to directly interact with other software elements"

Distributed Computing?Interfacing other languages?

Page 48: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

50

Interaction Standard

At a bare minimum: package, useFor completeness, use Exporter.

The unit of software reuse in Perl is the module, a file that has a collection of related functions designed to be used by other programs and library modules. Every module has a public interface, a set of variables and functions that outsiders are encouraged to use. From inside the module, the interface is defined by initializing certain package variables that the standard Exporter module looks at. From outside the module, the interface is accessed by importing symbols as a side effect of the use statement. … When we talk about modules in this chapter, and traditional modules in general, we mean those that use the Exporter.

Page 49: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

51

A component explained "Technically"

Channel

Stub Skel

Component

Client Server

InterfaceInterface

Symbol table

Module

Perl

Page 50: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

52

Perl Interaction Standard

A Symbol tableHow does the compiler know parameter types All parameters are passed as a list of scalars.

How do I know how many parameters, ordering, expected return, etc. Smantics. Read the module documentation. Same problem in every other component

interface.

Page 51: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

53

Semantics

String foo (String bar, int baz)

raises fooException;

float divide (float numerator, float denominator);

Page 52: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

54

Composition Standard

Combining of two or more software components yielding a new component behavior at a different level of abstraction.Clearly separate from OS and other componentsTypically involves: Installation Configuring Instantiating

Page 53: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

55

Practical Components

Software Reuse"you need components for complex, mission critical systems, because they are robust, scalable, flexible"

Page 54: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

56

Practical Components

Table 3.1 Interfaces Naming Meta data Interoperability Customization Composition Evolution Support Packaging and Deployment

Page 55: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

57

Choosing a component model

State managementScalabilityRobustnessSecurityFault toleranceDeploymentPlatform SupportEase of Development

Page 56: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

58

Perl as a Component Model

Conclusion From the definitions in the book, Perl fulfills

the requirements of a component model. From a practical perspective, Perl modules

are used as components. Perl (+/- SOAP::Lite) fares well in criteria

used to evaluate other component models. Our project benefits from legacy support by

using Perl.

Page 57: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

59

Whiteboard Architecture

Portal

Formatting

Data Objects

DB Driver

Database

Page 58: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

60

Whiteboard Architecture

portal

Web_BrowserSOAP_HTTP_Daemon

Patient

Provider

Mailbox

Note

Netscape

Palm

Session

RoleC

WB

LDAP_DriverDAM_Driver

DB2 MySQL

MySQL_Driver

SLAPd

Portal_CGI_API

CGI_Session_API

palm_API

netscape_API

Patient_API

Provider_API

Mailbox_API

Note_API

SQL

Role_API

MySQL_APIDAM_API LDAP_API

LDAPsocket

WB_API

Page 59: 1 Components in Perl and SOAP::Lite Team "Messengers" Larry McKnight, MD Davis Bu, MD Pete Stetson, MD Maryam Kamvar.

61

Whiteboard Architecture

portal

Web_Browser

MySQL_Driver

SOAP_LiteSOAP_HTTP_Daemon

MySQL

WB

Patient

Provider

Mailbox

Note

Netscape

Palm

Session

RoleC

Portal_CGI_API

CGI_Session_API

Palm_Formatting_API

Netscape_Formatting_API

WB_API_thru_SOAP

SOAP

Patient_API

Provider_API

Mailbox_API

Note_API

MySQL_API

SQL

Role_API

WB_API

LDAP_DriverDAM_Driver

DB2 SLAPd

DAM_APILDAP_API

socket LDAP