0% found this document useful (0 votes)
42 views

Technologies For Building Grids: 15 October 2004

The document provides an introduction to developing Java web services, including an overview of the main components used like J2EE, JWSDP, and containers. It discusses concepts like JAX-RPC, defining and deploying a service, generating client code, and deploying to Tomcat.

Uploaded by

BARUTI JUMA
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views

Technologies For Building Grids: 15 October 2004

The document provides an introduction to developing Java web services, including an overview of the main components used like J2EE, JWSDP, and containers. It discusses concepts like JAX-RPC, defining and deploying a service, generating client code, and deploying to Tomcat.

Uploaded by

BARUTI JUMA
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

15th October 2004

Technologies for Building


www.eu-egee.org
Grids

EGEE is a project funded by the European Union under contract IST-2003-508833


Objectives

 To understand the major Java environment packages for writing


and deploying Java services and clients

 Basic concepts of containers

 Some JAX-RPC basics.

 Basics of deploying to containers

 An introduction to the ANT tool.

Introduction to web services, 3-4 June 2004 - 2


Making java based web services

Introduction to web services, 3-4 June 2004 - 3


Java web services development
environment
• Main components used:
 J2EE (Java 2 Enterprise Edition)
• Provides basic Java environment: compiler, virtual machine, etc.

 JWSDP (Java Web Services Developer Pack)


• Provides web services specific java APIs.
• Automatic code generation to provide web services communication
(eg. stubs)

 Container (Tomcat/Axis)
• Provides access to low level communications protocols (eg. http
through web server. Axis also provides some functions such as XML
parsing)

Introduction to web services, 3-4 June 2004 - 4


What’s in JWSDP
• (JAX = Java APIs for XML)
• JAX-RPC (Remote Procedure Calls)
 APIs for using web services and automatically creating ‘glue’ code to make
it work.
• JAXP (Processing)
 XML parsing components
• JAXR (Registries)
 UDDI etc.
• JAXM (Messaging)
 depricated
• JAXB (Binding)
 Mapping XML to Java
• SAAJ (SOAP with attachments API for Java)
 Produce and consume SOAP messages

Introduction to web services, 3-4 June 2004 - 5


The classpath

• With java based web services development the most


common source of problems is with incorrectly set
variables in the classpath.

• Similarly with Globus toolkit based grid development.

• The classpath is often the first place to look for compile


time problems.

Introduction to web services, 3-4 June 2004 - 6


Axis – Tomcat what’s the difference?

• Tomcat was developed as a container to add functionality


to the Apache web server.

• Tomcat deals mainly with servlets (non- web services).

• Tomcat was adapted to deal with web services initially

• Axis is the new development specifically for web services –


actually is like Tomcat +.

• Can use Tomcat but moving towards Axis.

Introduction to web services, 3-4 June 2004 - 7


JAX - RPC

Introduction to web services, 3-4 June 2004 - 8


JAX-RPC API packages
• javax.xml.rpc Core classes for the client side programming model

• javax.xml.rpc.encoding Java primatives <-> XML SOAP messages

• javax.xml.rpc.handler processing XML messages


• javax.xml.rpc.handler.soap

• javax.xml.rpc.holders support the use of IO parameters

• javax.xml.rpc.server minimal API for web service inplementation

• Javax.xml.rpc.soap specific SOAP bindings

Introduction to web services, 3-4 June 2004 - 9


JAX-RPC Architecture

Introduction to web services, 3-4 June 2004 - 10


Java web service flow

Introduction to web services, 3-4 June 2004 - 11


Defining a service

• A service can be defined starting with:


 A java interface

 A WSDL document

• Which to use?
 If the service end point interface is defined in java it may not be
interoperable with services/clients defined in other languages

 If the service is initially defined in WSDL it will be open

Introduction to web services, 3-4 June 2004 - 12


Client side Implementation

Introduction to web services, 3-4 June 2004 - 13


wscompile

• Generates
 Compiled class files + optionally source files for stubs to interface
with client side JAX-RPC

 WSDL file

 Model file

Example commandline

wscompile –gen:client –d output/client –classpath classpath config-file

(add –keep –s to retain java source files)

Introduction to web services, 3-4 June 2004 - 14


config.xml
<?xml version=“1.0” encoding=“UTF-8” ?>
<configuration xmlns=“http://java.sun.com/xml/ns/jax-rpc/ri/config”>
<service name=“……..”
targetNamespace=“………………………”
typeNamespace=“……………………………..”
packageName=“……………………………….”>

<interface name=“……………………………”/>
</service>
</configuration>

name = name of service


targetNamespace = namespace of WSDL for names associated with the
service eg. port type
typeNamespace = namespace of WSDL for data types
packageName = name of java package

Introduction to web services, 3-4 June 2004 - 15


Generated files

Some of the client side generated files:

Service Service.java
Service_Impl.java
Service_SerializerRegistry.java
Exception ServiceException_SOAPSerializer.java
ServiceException_SOAPBuilder.java
Value type Info_SOAPSerializer.java
Info_SOAPBuilder.java
Interface Interface_Stub.java
method.java

Introduction to web services, 3-4 June 2004 - 16


Service.java file

• The Service.java file corresponds to the definition of


the interface for the web service, ie it contains the same
info as the <service> element in the config file.

package servicePackage;

import javax.xml.rpc.*;

Public interface Service extends javax.aml.rpc.Service


{
public servicePackage getServicePort();
}

Introduction to web services, 3-4 June 2004 - 17


Referencing the stub

• In order to get an object to reference the stub you have to


instantiate Service_Impl.
 (Unfortunately this name is only recommended)

• Service_Impl service = new Service_Impl ();

• value* name = (value)service.getServicePort


();

• With this reference you can call the methods of the service.

Introduction to web services, 3-4 June 2004 - 18


Stub Interface (javax.xml.rpc.Stub)
Public interface Stub
{
public abstract Object _getProperty (String name) throws
JAXRPCException;
public abstract Iterator _getPropertyNames ();
public abstract void _setProperty(String name, Object
value) throws JAXRPCException;
}

These methods allow the stub to be configured by setting various properties.

Introduction to web services, 3-4 June 2004 - 19


Deploying with JWSDP - Tomcat

Introduction to web services, 3-4 June 2004 - 20


Deployment:
Making the container aware of a servlet
• The web server has to be aware of the interface and
exposed methods of a servlet in order to use it.
• Using Tomcat as an example this can be done in a
number of ways.

1. Enter the values manually into the SOAP admin page


from a Deployment descriptor.
2. You can use the SOAP manager application from the command line

3. You can manually edit Tomcat’s WEB-INFO/web.xml file


4. You can create a WAR file and place it in Tomcat’s webapps folder
5. You can use ANT

Introduction to web services, 3-4 June 2004 - 21


Using a WAR file

• A WAR file is basically an archive description of a servlet


installation
(JAR and WAR naming derives from UNIX TAR – java archive, web archive,
tape archive).

• Example: placed in Tomcat’s webapps folder it can be


interpreted by the container.

Introduction to web services, 3-4 June 2004 - 22


Deployment Descriptor

A SOAP manager file

<isd:service xmlns:isd=“http://xml.apache.org/xml-soap/deployment”
id=“urn:stock-onhand”>
<isd:provider type=“java” scope=“Application” methods=“getQty”>
<isd:java class=“StockQuantity”/>
</isd:provider>
<isd:faultListener>org.apache.soap.sever.DOMFaultListener</isd:faultListener>
</isd:service>

Some containers (Tomcat) provide GUIs for deployment

Introduction to web services, 3-4 June 2004 - 23


Additional WAR files required for
JWSDP

WEB-INF/web.xml Web application deployment


descriptor

WEB-INF/jaxrpc-ri.xml JWSDP-specific deployment


information

WEB-INF/model Model file generated by wscompile

Introduction to web services, 3-4 June 2004 - 24


web.xml file
<?xml version=“1.0” encoding=“UTF-8” ?>

<!DOCTYPE web-app
PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN”
“http://java.sun.com/j2ee/dtds/web-app_2_3.dtd”>

<web-app>
<display-name>Service Name</display-name>
<description>A web service application</description>
</web-app>

Introduction to web services, 3-4 June 2004 - 25


Creating a deployable WAR file

wsdeploy –o targetFileName portableWarFileName

㻷㼋㼈㻃㼓 㼕㼒㼆㼈㼖㼖㻃㼌㼖㻃㼌㼑㼉㼒㼕㼐 㼈㼇 㻃㼅 㼜㻃㼗㼋㼈㻃㼆㼒㼑㼗㼈㼑㼗㻃㼒㼉㻃㼗㼋㼈 jaxrpc-ri.xml 㼉 㼌㼏㼈㻑

㻷㼋㼈㻃㼄㼕㼆㼋㼌㼙㼈㻃㼆㼒㼑㼗㼄㼌㼑㼖㻝
㼆㼏㼄㼖㼖㻃㼉 㼌㼏㼈㼖㻃㼄㼑㼇 㻃㼕㼈㼖㼒㼘㼕㼆㼈㼖
㼆㼒㼐 㼓 㼌㼏㼈㼇 㻃㼆㼏㼄㼖㼖㻃㼉 㼌㼏㼈㼖㻃㼉㼒㼕㻃㼗㼋㼈㻃㼗㼌㼈㼖
㼆㼒㼐 㼓 㼌㼏㼈㼇 㻃㼆㼏㼄㼖㼖㻃㼉 㼌㼏㼈㼖㻃㼉㼒㼕㻃㼖㼈㼕㼌㼄㼏㼌㼝㼈㼕㼖
㻺 㻶㻧㻯㻃㻋 㼌㼑㻃㻺 㻨㻥㻐㻬㻱㻩㻃㼇 㼌㼕㼈㼆㼗㼒㼕㼜㻌
㼐 㼒㼇 㼈㼏㻃㼉 㼌㼏㼈㻃㼉㼒㼕㻃㼗㼋㼈㻃㼖㼈㼕㼙㼌㼆㼈㻃㻋 㻃㼌㼑㻃㻺 㻨㻥㻐㻬㻱㻩㻌
㼐 㼒㼇 㼌㼉 㼌㼈 㼇 㻃web.xml㻃㼉 㼌㼏㼈
jaxrpc-ri-runtime.xml㻃㻋 㼅 㼄㼖㼈㼇 㻃㼒㼑㻃jaxrpc-ri.xml㻌

Introduction to web services, 3-4 June 2004 - 26


Package Structure for JAX-RPC Service
Endpoint

Introduction to web services, 3-4 June 2004 - 27


Introducing the ANT tool

Introduction to web services, 3-4 June 2004 - 28


Ant

Ant – Another Neat Tool

• Ant is a tool for building projects

• It uses a build file, called build.xml, to determine how to


build a particular project

Introduction to web services, 3-4 June 2004 - 29


ANT vs MAKE

• ANT performs similar functions to make as a software


project build tool.

• Build.xml is similar to a Makefile

• It is written in Java and is therefore entirely platform


independent

Introduction to web services, 3-4 June 2004 - 30


Understanding Ant

• The key to understanding Ant is to understand the


build.xml file structure

<project ..>
<property .../>
<target .../>
</project>

• The root element is project


• There are then properties elements, which can be set
externally or internally to the file
• There are also target elements which specify what
actions are to be taken

Introduction to web services, 3-4 June 2004 - 31


Target in ANT

The use of the word target can be confusing.

In ANT a target is an action

It is not a destination – as the word is used in some other


development environments.

(There is also a task in ANT – this is a finer grained action


than a target.)

Introduction to web services, 3-4 June 2004 - 32


Example Project (1)

• The next few slides will demonstrate the use of Ant to build
a very simple project

• There are three classes in the Project

 Person
• Contains a name, age and an Address
 Address
• Contains street, town and country information
 Display
• Instantiates 3 Person classes and displays their details on the
command line

Introduction to web services, 3-4 June 2004 - 33


Example Project (2)

• All the source files are in a package structure in a


directory called src

• An example output would be:

Introduction to web services, 3-4 June 2004 - 34


Compile Example

• This example will perform a simple compile

<project name="PeopleProject" default="compile" basedir=".">


<!-- set global properties for this build -->
<property name="src" location="src"/>
<target name="compile” >
<!-- Compile the java code -->
<javac srcdir="${src}"/>
</target>
</project>

• There is only one target, which will compile all classes in


the same location as the source files

Introduction to web services, 3-4 June 2004 - 35


More Complex Example

• This example will now create a directory called build and


put the compiled code in there, preserving package
structure

<property name="src" location="src"/>


<property name="build" location="build"/>

<target name="init">
<mkdir dir="${build}"/>
</target>

<target name="compile" depends="init" >


<!-- Compile the java code -->
<javac srcdir="${src}" destdir="${build}“ />
</target>

Introduction to web services, 3-4 June 2004 - 36


Creating JAR files (1)

• This build.xml will require two runs:


 One to compile and package in to a JAR
 One to clean up unnecessary files

<project name="PeopleProject" default="dist" basedir=".">

<target name="init" description="prepare the environment">


<mkdir dir="${build}"/>
<mkdir dir="lib"/>
</target>

...

Introduction to web services, 3-4 June 2004 - 37


Creating JAR files (2)

...

<target name="compile" depends="init" >


<!-- Compile the java code -->
<javac srcdir="${src}" destdir="${build}"/>
</target>

<target name="dist" depends="compile" >


<jar jarfile="lib/PeopleProject.jar" basedir="${build}"/>
</target>

<target name="clean" description="clean up">


<delete dir="${build}"/>
</target>

</project>

Introduction to web services, 3-4 June 2004 - 38


Invoking targets

• Here dist invokes clean so we now only require one run


of ant

<target name="dist" depends="compile" >


<jar jarfile="lib/PeopleProject.jar" basedir="${build}"/>
<antcall target="clean"/>
</target>

<target name="clean" description="clean up" >


<delete dir="${build}"/>
</target>

Introduction to web services, 3-4 June 2004 - 39


Setting the classpath

• To set the classpath, use the classpath task and specify


the appropriate pathelement tags

<javac srcdir="${src}" destdir="${build}">


<classpath>
<pathelement path="${basedir}/lib/Jar1.jar"/>
<pathelement path="${basedir}/lib/Jar2.jar"/>
<pathelement path="${basedir}/lib/Jar2.jar"/>
</classpath>
</javac>

• All of the above JAR files will now be on the class path
when the source is compiled

Introduction to web services, 3-4 June 2004 - 40


Copying Files

• The copy task in ant allow you to copy files and/or


directories

<copy file=“Example.txt" toDir="MyFiles/"/>

• This example will copy the file Example.txt to the


MyFiles directory.

Introduction to web services, 3-4 June 2004 - 41


Looking ahead to Globus and Ant

• Much of the work in building and deploying Grid Services


for Globus can be done using Ant build files
• The next few slides will go through some of the build files
that are provided with Globus
• You can also write your own build files for use with Globus

Introduction to web services, 3-4 June 2004 - 42


startContainer(1)

• The main build file that is provided with Globus contains a


target called startContainer

<target name="startContainer">
<ant antfile="${build.services}" target="startContainer"/>
</target>

• This is invoking a target with the same name in another


build file called build.services
• We will see this target on the next slide

Introduction to web services, 3-4 June 2004 - 43


startContainer(2)

• Here is the target in build.services

<target name="startContainer" depends="setJbossClientClasspath,


setWebSphereClientClasspath">

</target>

• The dependencies add JAR files to the classpath

Introduction to web services, 3-4 June 2004 - 44


Starting a Java VM
• The java task runs the specified Java class

<target name="startContainer" depends="setJbossClientClasspath,


setWebSphereClientClasspath">

<java
classname="org.globus.ogsa.server.ServiceContainer"
fork="yes">

</java>

</target>

• The fork attribute indicates that this class should be run


in a new VM
Introduction to web services, 3-4 June 2004 - 45
Specifying Java Options (1)

• The arg task allows you to specify arguments for the class

<java classname="org.globus.ogsa.server.ServiceContainer"
fork="yes">
...
<arg line="-p ${service.port}"/>
<arg line="-${container.initialization}"/>
...
</java>

Introduction to web services, 3-4 June 2004 - 46


Specifying Java Options (2)

• The arguments being used would, so far, be equivalent to:

java org.globus.ogsa.server.ServiceContainer –p 8080 -eager

• The –p switch specifies the port

• container.initializion has evaluated to eager

Introduction to web services, 3-4 June 2004 - 47


Classpath

• The classpath is set using properties specified in an


external properties file
<project ... >
<property file="ogsa.properties"/>

<arg line="-p ${service.port}"/>


<arg line="-${container.initialization}"/>

...

<classpath>
<pathelement location="${ogsa.jar}"/>
<pathelement location="${samples.lib}/${samples.jar}"/>
<path refid="classpath"/>
</classpath>

Introduction to web services, 3-4 June 2004 - 48

You might also like