Google
 

Monday, November 24, 2008

Java Console and File Input/Output Cheat Sheet

Console Output
System.out.print("Hello ");
System.out.println("world");
Console Input
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String text = in.readLine();
File Output
PrintWriter out = new PrintWriter(new FileWriter("K:\\location\\outputfile.txt")));
out.print("Hello ");
out.println("world");
out.close();
File Input
BufferedReader in = new BufferedReader(new FileReader("K:\\location\\inputfile.txt"));
String text = in.readLine();
in.close();
Converting input data
String text = in.readLine();
int x = Integer.parseInt(text);
double y = Double.parseDouble(text);
Reading until EOF
while (in.ready()) {
text = in.readLine();
System.out.println(text);
}
Pulling apart delimited items on a line
String text = "Beggars in Spain*Nancy Kress*1992";
StringTokenizer tokenizer = new StringTokenizer(text,"*");
String title = tokenizer.nextToken();
String author = tokenizer.nextToken();
String year = tokenizer.nextToken();
String letters = "a b c d e f g h i j";
StringTokenizer tokenizer = new StringTokenizer(text," ");
String[] allText = new String[10];
int pos = 0;
while (tokenizer.hasMoreTokens())
allText[pos++] = tokenizer.nextToken();

Thursday, October 30, 2008

Splitting the ALSB Logging

What it does

Normally the AquaLogic Service Bus logs in the main Weblogic domain log. This sample code splits the ALSB logging to a separate log.

How it Works

A startup class is used to direct ALSB log entries to the new ALSB log. A log filter is used to stop the ALSB logs from continuing to also go to the Weblogic domain log.

How to install and execute

Compile and deployment steps:

1. Review the ALSBLogStart.properties to make sure these are correct for default values.

2. Run the ant build.xml "jar" task to compile and generate the jtvalsbLogger.jar

3. Put the jtvalsbLogger.jar file in the weblogic domain lib directory on each server in the cluster

<wl_home>/../user_projects/domains/<domain>/lib

For example on my laptop I put the jar file in C:/bea92ALSB/user_projects/domains/alsb_cluster/lib

4. Copy the Create_ESB_Logging_Resources.py and Create_ESB_Logging_Resources.properties files

to some directory on the wls server box.

Edit the Create_ESB_Logging_Resources.properties file to match the desired settings

for the target wls domain.

5. Make sure the target wls domain is running. If the target is a cluster, make sure all the managed

servers are running as well as the admin server.

6. From a command prompt, run the setDomainEnv script in the <wl_home>/../user_projects/domains/<domain>/bin directory

(In windows its setDomainEnv.cmd. In linux its setDomainEnv.sh)

Change directory to the directory containing your Create_ESB_Logging_Resources.py file.

7. Run the wlst script to config the wls domain for the new logging settings.

wlst Create_ESB_Logging_Resources.py


The output should look something like (depending on whether you are installing to cluster):

Starting an edit session ...

Started edit session, please be sure to save and activate your

changes once you are done.

creating Log Filter ALSBRejectLogFilter

setting attributes for LogFilter ALSBRejectLogFilter

creating startup class ALSBLogStart

setting attributes for startupClass ALSBLogStart

assigning logFilter ALSBRejectLogFilter to server log AlexAdminServer

assigning logFilter ALSBRejectLogFilter to server log ESB1

assigning logFilter ALSBRejectLogFilter to server log ESB2

Saving all your changes ...

Saved all your changes successfully.

Activating all your changes, this may take a while ...

The edit lock associated with this edit session is released

once the activation is completed.

Activation completed

End of Main


Finished.

8. Restart the WLS domain. As the admin server and each managed server start up you should

see something like the following in the console output or server log:

<May 14, 2008 8:41:45 AM EDT> <Notice> <Log Management> <BEA-170027> <The server initialized the domain log broadcaster successfully

. Log messages will now be broadcasted to the domain log.>

*** ALSB Log path = servers/AlexAdminServer/logs/

*** ALSB Log fileName = alsb%u.log

*** ALSB Log fileSizeBytes = 5000000

*** ALSB Log fileCount = 10

*** ALSB Log fileAppend = false

*** Added ALSB Log handler to server logger= weblogic.logging.WLLogger@1563a3d

These messages in the log indicate the startup class is loading properly in each wls server.

9. Check the appropriate log directory to make sure each server in the cluster (admin and managed servers)

have a new alsb log file. The location and name of the new log files will match the ALSBLogStart.properties

settings which are echoed to the server log as shown in step 8 above.

Other related stuff

http://forums.bea.com/thread.jspa?threadID=300003205

http://forums.bea.com/thread.jspa?threadID=570001171

Wednesday, August 27, 2008

I have been on several teams where we studiously designed UML diagrams at the beginning of the project. As the project progressed, and deadlines approached,

the UML diagrams were left somewhere behind, not to be updated in months. When a new developer joined the team, we showcased the old UML diagrams,

and kept telling "Oh, we never had time to update them, please see the source code to get an idea. And, don't hesitate to ask if you have any doubt's".

I am sure, you all have gone through the same scenario.

However, we don't have to keep making up stories anymore, since this article shows how easy and simple it is to include UML diagrams

within your Javadoc and also keep them updated with every change in the source code repository. We can do these in less than a few minutes,

and in a few simple steps.

Getting started with UmlGraph takes five steps:

  1. Download the source code for UMlGraph.
  2. Download and install Graphviz.
  3. Make changes to your Ant build file.
  4. Run the Ant target.
  5. Add this target to your CI job.

Step 1: Download the source code for UMLGraph from here. Unzip the contents. To compile the Java doclet from the source code run

ant on the build.xml file. Copy the UmlGraph.jar file to your projects library. If there is a version mismatch between the different versions

of JDK you are using you get an exception like this:

java.lang.UnsupportedClassVersionError: Bad version number in .class file

Make sure you recompile the UMLGraph source code, and copy the library to your project.


Step2 : Download and install Graphviz from
here. The dot file needs to be post-processed with Graphviz to produce the actual UML diagram.

Running the UmlGraph doclet will generate a Graphviz diagram specification that can be automatically processed to create png drawings.

You can also generate other formats using Graphviz as well. If Graphviz isn't installed you will get an exception as shown below:

BUILD FAILED
/Users/meerasubbarao/Development/webservices-samples/build.xml:107:
Execute failed: java.io.IOException: dot: not found
Total time: 269 milliseconds


Step 3. Changes to your build.xml file.
Assuming you already have a working project, with Ant build file. Add the following target to your build.xml file as shown below:

view plaincopy to clipboardprint?

  1. <target name="javadocs" depends="build" description="generates javadoc and also UML Diagram">  
  2.         <mkdir dir="${reports.dir}/javadoc"/>  
  3.             <javadoc sourcepath="${src.dir}" packagenames="com.stelligent.*" destdir="${reports.dir}/javadoc"  
  4.                 classpathref="java.classpath" private="true">  
  5.                    <doclet name="org.umlgraph.doclet.UmlGraphDoc"  
  6.                       path="lib/UMLGraph.jar">  
  7.                         <param name="-attributes" />  
  8.                         <param name="-operations" />  
  9.                         <param name="-qualify" />  
  10.                         <param name="-types" />  
  11.                         <param name="-visibility" />  
  12.                     </doclet>  
  13.                   </javadoc>  
  14.           <apply executable="dot" dest="${reports.dir}" parallel="false">  
  15.             <arg value="-Tpng"/>  
  16.             <arg value="-o"/>  
  17.              <targetfile/>  
  18.              <srcfile/>  
  19.              <fileset dir="${reports.dir}" includes="*.dot"/>  
  20.              <mapper type="glob" from="*.dot" to="*.png"/>  
  21.           </apply>  
  22.     </target>  

<target name="javadocs" depends="build" description="generates javadoc and also UML Diagram">
        <mkdir dir="${reports.dir}/javadoc"/>
     <javadoc sourcepath="${src.dir}" packagenames="com.stelligent.*" destdir="${reports.dir}/javadoc"
         classpathref="java.classpath" private="true">
          <doclet name="org.umlgraph.doclet.UmlGraphDoc"
              path="lib/UMLGraph.jar">
          <param name="-attributes" />
          <param name="-operations" />
          <param name="-qualify" />
          <param name="-types" />
          <param name="-visibility" />
          </doclet>
          </javadoc>
         <apply executable="dot" dest="${reports.dir}" parallel="false">
         <arg value="-Tpng"/>
         <arg value="-o"/>
         <targetfile/>
         <srcfile/>
         <fileset dir="${reports.dir}" includes="*.dot"/>
         <mapper type="glob" from="*.dot" to="*.png"/>
         </apply>
    </target>

 
 

A number of options contol the operation of UMLGraph class diagram generator. These can be specified as parameters within your build file as shown above.

Details about a few options are:

-output
Specify the output file (default graph.dot).
-d
Specify the output directory (defaults to the current directory).
-qualify
Produce fully-qualified class names.
-horizontal
Layout the graph in the horizontal direction.
-attributes
Show class attributes (Java fields)
-operations
Show class operations (Java methods)
-constructors
Show a class's constructors
-visibility
Adorn class elements according to their visibility (private, public, protected, package)
-types
Add type information to attributes and operations
-enumerations
Show enumarations as separate stereotyped primitive types.
-enumconstants
When showing enumerations, also show the values they can take.
-all
Same as -attributes -operations -visibility -types -enumerations -enumconstants

Take a look here for more options.

Step 4. Run the ant target:
Open a command window and run the ant target: ant javadocs and you should see output as such in your console window:

meera-subbaraos-macbook-9:webservices-samples meerasubbarao$ ant javadocs
Buildfile: build.xml

init:

cleanGenerated:

build:
[javac] Compiling 22 source files to /Users/meerasubbarao/Development/ci-jobs/jobs/PetStore_Nightly/workspace/webservices-samples/classes
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.

javadocs:
[javadoc] Generating Javadoc
[javadoc] Javadoc execution
[javadoc] Loading source files for package com.stelligent.biz.ws...
[javadoc] Loading source files for package com.stelligent.ent.jpa...
[javadoc] Constructing Javadoc information...
[javadoc] UmlGraphDoc version 5.0, running the standard doclet
[javadoc] Standard Doclet version 1.5.0_13
[javadoc] Building tree for all the packages and classes...
[javadoc] Building index for all the packages and classes...
[javadoc] Building index for all classes...
[javadoc] Generating /Users/meerasubbarao/Development/ci-jobs/jobs/PetStore_Nightly/workspace/webservices-samples/reports/javadoc/stylesheet.css...
[javadoc] UmlGraphDoc version 5.0, altering javadocs
[javadoc] Building Package view for package com.stelligent.biz.ws
[javadoc] Building Package view for package com.stelligent.ent.jpa
[javadoc] Building Context view for class com.stelligent.biz.ws.SupplierManagerBean
[javadoc] Building Context view for class com.stelligent.biz.ws.SupplierManager
[javadoc] Building Context view for class com.stelligent.biz.ws.SignonManagerBean
[javadoc] Building Context view for class com.stelligent.biz.ws.SignonManager
.....

BUILD SUCCESSFUL
Total time: 8 seconds
meera-subbaraos-macbook-9:webservices-samples meerasubbarao$

 
 

The javadoc generated is pretty neat with UML diagrams on the top:


Step 5: Add this target to your CI Job.
If you already have a CI server like
Hudson up and running, which runs commit builds and nightly builds, adding this new target is a one step process.

In my case, I already have a nightly job running, I added this ant target to my default target as shown below:

view plaincopy to clipboardprint?

  1. <target name="all" depends="cleanAndDeployForCoverage, javadocs" />  

<target name="all" depends="cleanAndDeployForCoverage, javadocs" />

Next, force a build on the Hudson job, publish the javadocs, and you can see the results on the hudson dashboard.


The Javadoc embedded with UML diagrams displayed from within the Hudson dashboard:


Now that we have UML diagram integrated within our build file, and also our CI job, we can ensure that our code base and the UML diagrams are always in sync.

We saw how to include these ant targets in our commit builds or nightly builds of our CI jobs, and also published these artifacts as part of our post build process.

 
 

Resources:

Monday, August 18, 2008

Choosing between Routing and Orchestration in an ESB

Topics

ESB,

Orchestration

Tags

Routing,

JBI,

Enterprise Integration Patterns

Introduction

Enterprise Service Buses are nowadays indeed useful solutions that combine an array of tools allowing to solve practical problems in the field of application and service integration. However, they present the same mild inconvenience that a toolbox does to its user who knows that the solution to his problem has to be in the box, but for the sake of him can't figure out which one it is!

RelatedVendorContent

The Key to SOA Governance: Understanding the Essence of Business

Introducing application infrastructure virtualization and WebSphere Virtual Enterprise

The Agile Business Analyst: Skills and Techniques needed for Agile

Real World REST & Document-Oriented Distributed Databases Tracks @ QCon SF Nov 19-21

Agile Tool Evaluation Guide

The goal of this article is to help ESB users choose the right answer according to their needs, when confronted with the most complex and diverse of ESB concepts: routing and orchestration. Instead of abstract theorizing we will ground our efforts and reasoning in simple, real-world examples with the OW2 PEtALS JBI compliant ESB [1], in an attempt to fill the void between low-level routing and global, business service orchestration. In other words: We will try to uncover how the different layers of routing and orchestration build up.

From Enterprise Service Bus to the routing problem

ESBs have a lot of fields of application, including implementing information system-wide Service Oriented Architectures (SOAs). But at the lowest level they all aim to ease application and service integration - that is, letting one application or service call another. This very simple and common endeavour has various additional levels of complexity :

  • "routing", when there is not one but many source services where calls originate from or target services to choose between ;
  • "protocol bridges", when services are exposed on another protocol, belong to other servers or even other information systems ;
  • "transformations", when service messages do not have the same data format – which is rule rather than exception.

Those three : routing, protocol, transformation have a range of close siblings, but may nonetheless be considered the main ESB concepts. In this article we will focus on the first one and how it relates to a close sibling of his : orchestration. As a short introduction, let us say that routing is fundamentally low-level, near or in the ESB core, and relies on technical configuration (like service deployment descriptors) to provide technical decisions on where a message has to be sent. Orchestration can be seen as combining service calls to create higher-level, more useful composite services, but also often has a definitive "business-level" ring, and in this case is shorthand for implementing business-level processes combining business-specific services across applications and information systems.

Routing versus orchestration: neither a "one size fits all" nor a "black and white" world

So how are orchestration needs addressed in an ESB? It would seem logical to use an orchestration engine provided with the middleware solution. However, this is far too simple an answer to a complex question. Let us consider the following example.

Displaying a list of items

The "ItemManager" application is designed to manage items through operations like creation, update, deletion. This application is connected to an "ItemManagementListener" service, that publishes notifications when an item is updated.

Another application, the "HammerMonitor" application, is a monitoring tool that displays information on item updates that are specifically about hammers. This application exposes a "HammerMonitor" service with a "display" operation that receives these notifications.

Both services are exposed on an ESB. What we want is to let the HammerMonitor display hammers that are known to the ItemManagement application.

In order to connect the ItemManagementService to the HammerMonitorService, we need to configure the ESB connectors (aka "binding components"). One connector is linked to the ItemManager application, the other one is linked to the HammerMonitor application.

Moreover the connector linked to the HammerMonitor application is configured to expose, inside the ESB, an endpoint whose name can be "hammerMonitorService". Thus, a simple way to achieve our goal is to configure the connector linked to the ItemManager application so that it calls, inside the ESB, the endpoint "hammerMonitorService" whenever it receives a message from the ItemManager application.


However, as often in the real world, let us say both services have different data formats. This is not a barrier to SOA, as SOA defines a loosely coupled architecture (i.e. it is not mandatory for a service consumer to fit to the service provider definition).

The ItemManagement application provides to the ItemManagementListenerService the following message:

<items>
<item type="Hammer" name="hammer1"/>
</item>

And the ItemMonitorService has an operation "display" using the following format:

<hammers>
<hammer hammerName="hammer1"/>
</hammers>

At this point, a mere call does not work anymore to link both services. Data provided by the ItemManagement application needs to be first transformed. This is actually a very simple, local need of orchestration that has nothing to do with the business level.

A first way to address this would be to use a common, well-known orchestration solution like full blown, externally deployed, BPEL-supporting orchestration engine [2]. This would work, but in this case this would be akin to use a hammer (pun intended) to open a nut: either all transformed messages would have to go through a single central, remote orchestration engine, in a manner akin to the obsolete "hub" integration architecture, or there would have to be an orchestration engine deployed on each node – an obviously far too heavy solution for this simple problem.

So it appears a single, global, business-level answer to orchestration needs is not enough : what about the "dirty" work that has to be done between the routing and the business level, when generic routing provided by the bus is not enough and the main concern is not yet to implement business rules or processes by manipulating SOA-managed business services, but merely to combine technical, "behind-the-scene" services so they "get the work done" ?

The bus-level, specific development approach : interceptors

The lowest level answer to technical routing and orchestration needs lies in enhancing the ESB's built-in features.

In the case of our previous example, a direct way to circumvent the problem of data consistency between the application that sends the message and the application that receives it is to add some logic in the connectors (i.e. the binding components of the ESB).

For instance, the binding components provided by the PEtALS ESB can be extended with "interceptors". An interceptor is a piece of Java code that is executed in the "sender" binding component before a message is sent into the bus, or in the "receiver" component, when a message is delivered.

 
 

In our example, this code can call an XSL transformation to adapt the ItemManagement message format to the HammerMonitor format.

 
 


Nevertheless, this approach is very restrictive and not extensive. If the XSL transformation is performed in the "receiver" connector (linked to the HammerMonitor), it assumes that all messages received have the ItemMangement XML structure. If a message comes from another application, it can have a different structure, and in this case the XSL transformation may fail.

The interceptor could check the incoming message structure and choose one XSL transformation or another, depending on the message, but would still remain very coupled to the sender. This approach does not respect the loose coupling concept of SOA. Moreover any other need besides transformation would imply developing another set of specific features within the ESB engine, and that can't be expected from ESB users, nor should it.

The component ("building block") oriented approach: the EIP toolset

ESBs offer integration facilities by providing integration components. These components can do a range of small, useful, flexible operations between a consumer and a service provider. They typically implement several Enterprise Integration Patterns (made well known by Gregor Hohpe [3]) and are the Swiss knife of ESB users.

Independent of the service descriptions (WSDL and others), these EIP Components just perform small things. The most known are:

  • The "pipe" pattern: a single event triggers a sequence of processing steps, each performing a specific function. The EIP Component sequences the calls.
  • The "content based router" pattern: the EIP Component examines the message content and routes the message onto a different channel, based on data contained in the message.
  • The "message dispatcher" pattern: the EIP Component sends the message to a list of service providers (multipoint)
  • The "scatter gather" pattern: the EIP Component routes a request message to a number of service providers. It then aggregates all the responses into a single response message

The knowledge of all EIP Component operations allows the developer to combine business applications (consumers and service providers) with several "integration pattern bricks". The final result is a composite integration. Each brick of the integration is a service.

Of course, in order to design this composite integration, a dedicated graphical IDE is paramount since it brings, in addition to ease of use, a centralized view of the configuration of all the bricks. For instance, the following samples are designed by the PEtALS ESB integration tool.

The pipeline

The pipeline pattern is used to "pipe" an incoming message to several services. The message is sent to the first one, and its response is sent to the second one, whose response is itself sent to the third one, and so on.

Adaptation between a consumer and a service provider

The ItemManagement use-case that we described previously can be designed with this kind of assembly, with a transformation component and a "pipe" brick.


Management of service version evolutions

The same behaviour can be used to manage service version evolution, in the following way. A consumer always sends the same message structure to the "pipe" brick, which is a proxy to the real service. When the service signature changes, the "pipe" brick sends the consumer message first to an XSL transformation (to adapt the consumer's message to the new service format), then it sends it to the new version of the service. And nothing has changed for the consumer.

Content based routing

We've seen how to compose several services into a single one. But the dynamic process aspect is not solved. Here again comes the routing challenge: how to call one service among many?

How to switch a call to one service between many services? Well, the router brick may perform some tests to switch the request to one version or to the other one.

For instance, the ItemManagementListener can send notifications for hammer and saw items to a "content based routing" Component. This component tests the name of the item in the message, and sends it to the correct monitoring services (HammerMonitorService or SawMonitorService). As each service defines a different format, two different transformations have to be performed before sending the message to the correct service. So we compose the "routing" brick with "pipe" and "transformation" bricks.


Dispatcher

Another integration need could be to send a request to several services (multi point communication). For example, when an item order is sent from a front application to the ordering system, an email can also be sent to the customer for confirmation. For example, the message is sent to an ordering service and to an SMTP service.

We can imagine that the ItemManangementListener service, which sends notifications from the ItemManagement application, has to publish the notifications to the HammerMonitor, to the SawMonitor and to a global monitoring tool (which receives all notifications).

A "dispatcher" integration brick can be added to the previous composite integration to send the message to the "routing" brick and to the global monitoring service.


The DSL-based approach : the light orchestrator

Where patterns end, the light orchestrator starts

Enterprise Integration Patterns are great concepts that help architecting routing and orchestration solutions, and the EIP component is a great tool allowing to actually design solutions to those problems. However, in complex integration cases, the composite assembly approach easily leads to too scattered and over-designed configurations. Moreover, like all patterns, EI Patterns are limited in numbers, while the real world is full of unexpected cases that call for a more flexible solution.

The answer is to use a light orchestration-specialized DSL (Domain Specific Language), which is what the "light orchestrator" or "Enterprise Integration Orchestration" component provides in PEtALS.

When is it the right time to use such a component? It depends on a lot of things, including development practices, but here are a few hints:

  • When, as we've just said, it is hard to envision a solution using only straight, "by the book" patterns,
  • When "routing" and multiplexing patterns such as the one previously described become commonplace (this might also hint at using a rules engine component),
  • When there are many layers of embedded "bricks" in an EIP-based system,
  • When an orchestration subsystem is best understood and maintained when being solved in one single place rather than scattered across several, albeit simple, EIP "bricks"
  • When there is a need for rarer EI Patterns that is not supported by the EIP component (fully dynamic routing, Return Address, Content Enricher, Normalizer…)

EIOrchestration use case : complex dynamic routing

In order to showcase the EIOrchestration component, let's focus on our system's extensibility.

We've already seen how to add a saw-specific monitoring feature to a system that was initially only able to handle hammers. We could add other tool-specific abilities the same way. However this would require reconfiguring them again each time we want to add another tool type. So what if we want the people using our bus to be able to add their own tool types and specific monitoring abilities?

Example: Our customer wants to be able to dynamically add a ScrewdriverMonitorService for tools of type Screwdriver, and DrillerMonitorService for Drillers, and so on.

We could tell them to mention within each message the name of the tool-specific monitor service it must be sent to, and add dynamic routing capabilities to our system.

Example: We enhance the ItemManagement application so it provides the following message body to the ItemManagementListenerService:

<items>
<item type="Screwdriver" name="screwdriver1"
customMonitorService="ScrewdriverMonitorService"/>
</item>

where customMonitorService is an additional data field that may be provided by the customer through the ItemManagement application.

In an ESB, routing such a message can be done by dynamically choosing its recipient service according to the "customMonitorService" attribute. For example, this can be done in PEtALS using the EI Orchestration component, using its "get-calls-by-xpath" feature:

 
 

<eip:get-calls-by-xpath base="/items/item" service="@customMonitorService"
operation="'display'"/>

Which, in our example, will call the ScrewdriverMonitorService with the previous message.

A complete EIOrchestration sample for PEtALS

We've said at the beginning that the PEtALS EIOrchestration component allows to handle process complexity well. So here is an example that gathers in a single configuration everything we've seen in this article: piping ("eip:chain" element) and transformations, simple content based routing ("eip:choose" element) and finally dynamic routing ("eip:get-calls-by-xpath" element), while still being quite readable:

<eip:eip>
<eip:chain>
<eip:choose>
<eip:when test="/items/item[0]/@type = 'Hammer'">
<eip:call service="ItemToHammerService" operation="transform"/>
<eip:call service="HammerMonitorService" operation="display"/>
</eip:when>
<eip:when test="/items/item[0]/@type = 'Saw'">
<eip:call service="ItemToSawService" operation="transform"/>
<eip:call service="SawMonitorService" operation="display"/>
</eip:when>
<eip:otherwise>
<eip:get-calls-by-xpath base="/items/item"
service="@customMonitorService" operation="'display'"/>
</eip:otherwise>
</eip:choose>
</eip:chain>
</eip:eip>


Bridging up with Business Process Management concepts

And what about full-fledged, business-level orchestration?

Another way of thinking up integration is the top-down approach, where enterprise business processes are defined. In this approach, business processes drive the definition of business services. Thus, a bridge is needed between what services are offered by existing applications and what the business process wants to orchestrate. Such a bridge is manifested in the set of all managed business-level services within the enterprise information system, i.e. its SOA (Service Oriented Architecture), which acts as a protecting layer both for lower-level, technical services on the bus and for the actual business processes.

The standard way of executing processes in the SOA world is the use of a BPEL engine [2]. It can invoke several services and do some business logic on the flow and on XML documents, while also being able to handle data mapping issues. In this approach, business service definitions are the key of the orchestration: no BPEL orchestration can be done without the definition (WSDL typically) of all services, ensuring cleaner (however costlier) service composition.

An overview of the orchestration setup, when using BPEL in an ESB, is available in the article written by Adrien LOUIS, "build an SOA application from existing services" [4].

Human intervention in business processes : workflows

Now what if in our tool monitoring example we'd need a supervisor's approval before actually displaying information in monitoring applications? It would require a manual intervention from a dedicated operator. This is another face of Business Process Management: workflows, which are business processes allowing the involvement of manual, human operation, either for manual business tasks or manual supervision, through a graphical user interface that may be provided within a business portal, or a more technical administration interface.

A key point is that workflows follow the opposite paradigm of state-based approach rather than a flow-based one like BPEL orchestrators, making them better adapted to long-lived processes, without being restricted from sitting on top of orchestrated services. Hence workflow servers are usefully complemented by "straight" orchestrators, though that means deploying two business process-oriented servers – a constraint addressed by interesting new initiatives like jBoss & Bull's "Process Virtual Machine" and the Eclipse Java Workflow Tooling project [5].

Conclusion

We have seen in this article several ways to connect business services with each other, going from low level ones like customized routing, to high-level ones using business oriented approaches like workflow and orchestration. Most importantly, we've exposed how ESB integrators have very common middle-level needs for composing local, technical services, and how a range of "glue", "Swiss knife"-like features allow them to simply "get the job done".

In summary :

  • For a range of simple integration scenarios like the connection between two heterogeneous applications, customizing routing through ESB-specific features, e.g. adapting message data format by adding an XSL transformation in the connectors linked to the application, is actually the easiest way (the interceptor approach).
  • When a strategy is needed to send the message to the right receiver and when operations on messages have to be chained, we can use assemble simple, pattern-oriented integration bricks typically to perform static routings, chained with transformations (the EIP approach).
  • In order to solve complex routing strategies, comprising dynamic routing or complex imbrications, a light orchestration component can be used to centralize the routing logic (the LightOrchestrator approach).

At a global, business level, well managed, consistently defined, business-oriented services are worth the effort of being composed using orchestration like WSDL-based BPEL, and made interact with people using workflow solutions.

Wednesday, August 13, 2008

Update to Vista SP1 Frequently Asked Questions

This document contains information on issues and solutions related to updating to the Windows Vista Service Pack 1.

This document will be updated frequently as new concerns and information become available. Please check back for the latest information.

Microsoft is the primary source of information on SP1 issues

When updating a computer to the Windows Vista Service Pack 1 (SP1), the Microsoft web site should be your primary source for information on known issues. When solutions to these issues are developed, Microsoft will publish updates and work-around information.

This document contains information on significant issues and solutions that have been reported on HP Pavilion and Compaq Presario computers. You may wish to bookmark this document. HP will update this document as new issues are reported.

Should I download the SP1 update from Microsoft's website or use Windows Update?

HP strongly recommends that customers acquire SP1 using Windows Update . By going through Windows Update, the application will validate whether or not the computer is ready for SP1. If the computer is not currently ready, Microsoft can provide a variety of updates and fixes for drivers and other issues that will ensure that the computer will be ready for SP1 at the end of the process.

Many customers who Installed SP1 manually by bypassing the Windows Update validation and correction process, have encounter problems because the required drivers were not updated.

Beginning in mid-March 2008, SP1 became available for download in Windows Update as an update. Beginning in mid-April, SP1 will automatically download as a critical update on Windows Vista-based computers that have automatic updating enabled. This is the easiest and most convenient way to update a Windows Vista computer.

Why don't I see SP1 in Windows Update?

SP1 is being distributed gradually by Microsoft, and will be available first in English, French, German, and Spanish. Other languages will become available over time. Continue to check back in Windows Update if you require support in other languages.

Before the Windows Update function displays the option to download SP1, it checks for the existence of specific versions of drivers on the computer. If the drivers are older than the specified version, Windows Update prompts you to install updated drivers (especially audio drivers) to meet SP1 requirements. To run Windows Update:

  1. Click Start , right-click Computer , and select Properties .
  2. On the system window, click Windows Update in the left column.
  3. Follow the on-screen instructions to download any updates.
  4. If multiple updates are needed, it may be necessary to install an update, restart the computer, and run the WINDOWS Update again to install the remaining updates.

Only when the Microsoft Windows Update has verified that the required updates are installed and working does it display the SP1 Update option. For more information on why your computer is not displaying SP1 in Windows Update, please refer to the Microsoft web site.

I saw a tip about renaming some files to get Service Pack 1. Is this a good Idea?

There are some documents on the internet suggesting that users change the names of some files on the PC to trick Windows Update into downloading Service Pack 1. Users have wondered if this was a good idea. The answer is no; do not change any file names . The best way - and safest way - to get Windows Vista SP1 is to use Windows Update and look for Service Pack 1 in the list of available updates. When using the Windows Vista Update feature the system checks for certain files on the computer before it displays the option to download SP1.

 

NOTE:

Some users who bypassed Windows Update and manually downloaded SP1 have encountered problems because drivers for their specific computer are not included in the generic download.

HP does not recommend manipulating or renaming or deleting any files just to download SP1. There are some good reasons for not changing files, especially files related to the Windows operating system.

  • First, if the wrong file is accidentally renamed or deleted, the computer could stop working completely, or work with limited functionality.

  • Second, the fixes required by Windows may be for hardware components from a specific manufacturer. If your computer uses components from a different manufacturer, you may lose functionality on that component.
  • Third, Windows Update is checking for multiple conditions, and the act of renaming or deleting one file may not affect the results of the test.
  • Fourth, in addition to checking for the existence of a specific file, the Windows Update may not have the required replacement file available for download.

Where can I find more information before I install SP1?

Important knowledge based (KB) articles available by searching on the www.microsoft.com web site include:

Will SP1 correct all the existing problems with my PC?

SP1 may solve some problems, but it is an enhancement to the Vista operating system and is not designed to solve all the potential problems that users may have with a PC. For the list of enhancement provided by SP 1 please see Notable Changes in Windows Vista Service Pack 1 on the Microsoft web site. The document is technical in nature but provides a detailed list of the updates applied in SP1.

To solve other issues on your machine make sure all drivers and software are up to date, and run the HP Health Check (provide on select models) from the Help and Support .

Do I have to update my BIOS?

It is advisable to update to the latest BIOS and apply all HP and Microsoft updated drivers and programs for your PC before installing SP1. Go to the HP Software & Driver Downloads page and check for updated BIOS and drivers for your model. In some cases, if the BIOS is not updated before installing SP1, the PC may fail to start properly.

I did not update my BIOS and now the PC will not boot. What should I do?

When Vista SP1 was released, there were several issues that required the user to update the BIOS or the drivers AFTER Vista was updated. Most of those issues have been corrected because the Windows Update function performs more checks and dynamically downloads the required files. You may wish to visit the Microsoft and the HP web sites to search for solutions that match the exact startup or no-boot conditions you are experiencing; however, in most cases, running the Windows Update function will detect and resolve the problem.

Example A: After upgrading to Vista SP1 the system may intermittently hang (for 1-2 minutes), and fail to boot to the Windows desktop. The PC may boot to the Microsoft Startup Repair option or the Microsoft System Restore. To successfully boot the system to Windows Vista, cancel the System Restore and allow the system to continue the startup repair. Once Windows Vista is running, go to the HP web site and update the BIOS to avoid this issue for the future.

Example B: After upgrading to Vista SP1 the system may intermittently hang, display the black Vista boot-up screen, and the green activity bar may stop moving. To successfully boot the system to Windows Vista, reset system by turning off the PC, disconnecting the AC power, removing and then replacing the battery. Restart the PC. Once Windows Vista is running, go to the HP web site and update the BIOS to avoid this issue for the future.

After installing SP1, my audio stopped working. What should I do?

Microsoft has reported that certain audio chip sets will fail when SP1 is installed causing the sound features to stop working. Running the Windows Update function, even after installing SP1, may detect and resolve most problems. Additionally, you should run the HP Update and HP Health Check utilities at least once a week to check for all HP updated drivers.

You may wish to visit the Microsoft and the HP web sites to search for solutions that match the exact no audio conditions you are experiencing. See Resolving No Sound or Audio Problems in Vista .

My fingerprint reader stopped working. What should I do?

The Fingerprint reader on HP notebook PCs is a USB connected device, and drivers are only available on the HP website. Updated fingerprint reader drivers are not available on Windows Update.

If your computer has a fingerprint reader, go to the HP Software & Driver Downloads page, type the Product number for your PC, select Vista operating system , and check for the latest AuthenTec fingerprint driver.

Are there any known performance issues with SP1 that require updated drivers?

HP and Microsoft are working to provide updated drivers for Windows Vista Service Pack 1. Users who used the Windows Update function to check the computer for all the required drivers, before upgrading to SP1, have reported very few problems. However, there are known performance issues with the following components if the drivers are not updated.

  • Option 1 : Run the Windows Update to detect the following known issues and attempt to install updated drivers.

Component

Driver Versions That Must be Updated

Conexant HD Audio

Chdart.sys – version 4.32.0.0 or earlier

Chdrt32.sys – version 4.32.0.0 or earlier

AuthenTec Fingerprint Sensor

Atswpdrv.sys – version 7.7.1.7 or earlier

Intel Display  (Intel 965 Express Chipset)

Igdkmd32.sys – versions between and including driver 7.14.10.1322 and 7.14.10.1403

Igdkmd64.sys – versions between and including driver 7.14.10.1322 and 7.14.10.1403

SigmaTel ATI Audio

Stwrt.sys – version 6.10.5511.0 or earlier

Stwrt64.sys – version 6.10.5511.0 or earlier

  • Option 2 : Run the HP Update and HP Health Check utilities to locate updated HP drivers.
  • Option 3 : Manually locate updated drivers. Go to the HP Software & Driver Downloads page, type the Product number for your PC, select Vista operating system , and check for updated drivers.

I already installed a Beta version of SP1. What should I do?

If you had previously installed a Beta version of Windows Service Pack 1, you MUST uninstall the Beta version before installing the released version of Windows Vista Service Pack 1.

Can I uninstall SP1?

You can uninstall the service pack by using the Programs and Features menus in the Control Panel.

  1. Click Start , Control Panel , and then Programs and Features .
  2. Click View installed updates in the left panel.
  3. Right-click Service Pack for Microsoft Windows , and then click Uninstall .

Will all my programs work in SP1?

Microsoft has identified some application that do not operate properly with SP1, and they are working with the program manufacturers about the issues. For detailed information, go to the Microsoft web site and search for the document   KB 935796: Information about programs that are known to experience a loss of functionality when they run on a Windows VISTA Service Pack 1-based computer .

Will HP Update help me get all the important driver updates?

The HP Update utility will check for updated drivers and software, however the older versions of HP Update (v4.000.005.007 or earlier) will not work properly after upgrading to Vista SP1. To install the latest version of HP Update, open the Control Panel and uninstall the older version of HP Update. Then go to the hp.com web site and search for the softpaq SP38202
HP Update and HP Software Update - Critical Security Update (English only).

If I don't like SP1 can I revert to a pre-SP1 condition by selecting an earlier Microsoft Restore Point?

Yes, but it is best to uninstall the service pack instead of just using a restore point! Using a Microsoft System Restore restoration point can potentially revert the PC to a pre-SP1 condition, however installing Service Pack 1 takes at least 3.5 GB of free hard disk space. If the installation program determines that there is a limited amount of space on the hard drive, all restore points will be deleted and a single pre-SP1 restore point will be set. On a small number of PCs, this will mean that there is no restore point available for uninstalling SP1.

I got a message that I have to reactivate my PC. What do I do?

On some retail licensed computers, it may be necessary to reactivate the Windows Vista operating system after installing SP1. If, during the SP1 installation, a device driver is updated that is part of the computer signature, the computer will need to be reactivated. In this instance, you will be prompted to activate your original version of Windows Vista by connecting the PC to the internet and following the on-screen instructions from Microsoft.

 

NOTE:

Read the Windows activation notice carefully. You are being asked to reactivate your original version of Vista using the Product Key printed on the Windows tag on the bottom of your notebook. You are not being asked to purchase a new Product Key.

See also

HP Notebook PCs – Precautions to Take Before Updating to Vista Service Pack 1

HP Notebook PCs - List of HP-Certified Windows Vista Capable PCs

HP Notebook PCs - Windows Vista Upgrade Options

HP Notebook PCs - Upgrading to Windows Vista Using the HP Upgrade Utility

HP Notebook PCs - Obtaining a Recovery CD or DVD set for Windows Vista

HP Notebook PCs - Use Windows Basic Backup and Restore Center to Back Up Files in Vista

HP Notebook PCs - Using Disk Defragmenter in Windows Vista

Saturday, August 2, 2008

Tuesday, June 17, 2008

Triggers

Main Index
o Creating a Trigger
o Modifying a Trigger
o Renaming a Trigger
o Viewing a Trigger
o Deleting a Trigger

A TRIGGER is a special type of stored procedure, which is 'fired' automatically when the data in a specified table is modified. It is invoked when an INSERT, UPDATE, or DELETE action is performed on a table.

TSQL Stored Procedures » Modifying a Stored Procedure

The stored procedure modification is usually done using the ALTER PROCEDURE statement. It can also be done by deleting the existing stored procedure and then creating a new one with the same name. If we are using the ALTER PROCEDURE statement any of the permissions associated with the stored procedure are retained. In the other case, however, the permissions will be lost.

We can alter a stored procedure so that only the parameter definition is changed and not the permissions that are set for the stored procedure. The parameters from the ALTER PROCEDURE statement are the same as the ones for the CREATE PROCEDURE statement.

Code:
CREATE PROCEDURE spGetAvgGrade
AS
SELECT AVG(Std_Grade) FROM Students
GO
EXEC spGetAvgGrade;
Output:
AverageGrade
2
(1 row(s) affected)
Language(s): MS SQL Server
Code:
ALTER PROCEDURE spGetAvgGrade (@Course INTEGER)
AS
SELECT AVG(Std_Grade) as AverageGrade FROM Students
WHERE Std_Course = @Course
GO

EXEC spGetAvgGrade 3;
Output:
AverageGrade
1
(1 row(s) affected)
Explanation:

This example demonstrates how to use the ALTER PROCEDURE command to modify a procedure and then execute it.
Language(s): MS SQL Server

T-SQL -->Stored Procedures --> Using Parameters

Parameters can be passed to the stored procedures. This makes the procedure dynamic.

The following points are to be noted:

* One or more number of parameters can be passed in a procedure.
* The parameter name should proceed with an @ symbol.
* The parameter names will be local to the procedure in which they are defined.

The parameters are used to pass information into a procedure from the line that executes the parameter. The parameters are given just after the name of the procedure on a command line. Commas should separate the list of parameters.

The values can be passed to stored procedures by:

1. By supplying the parameter values exactly in the same order as given in the CREATE PROCEDURE statement.
2. By explicitly naming the parameters and assigning the appropriate value.

Examples
Code:
CREATE PROCEDURE spSelectStudent (@Course INTEGER, @Grade INTEGER)
AS
SELECT * FROM Students
WHERE Std_Course=@Course AND Std_Grade <= @Grade
GO
EXEC spSelectStudent 3, 2;
Output:
Id Name Std_Course Phone Std_Grade

3 Harri Robins 3 78788 1
4 Joe Philip 3 46456 2

(2 row(s) affected)
Explanation:

In the above example, the procedure is defined with two parameters. It should be noted that while executing the procedure the parameters should be passed in the same order of that in the CREATE statement. In this case, the first argument corresponds to Std_Course and second argument to Std_Grade.
Language(s): MS SQL Server

MySQL and oracle

It is not true that SQL Server 2000 is better than Oracle 9i or vice versa. Both products can be used to build stable and efficient system and the stability and effectiveness of your applications and databases depend rather from the experience of the database developers and database administrator than from the database's provider. But SQL Server 2000 has some advantages in comparison with Oracle 9i and vice versa.

The SQL Server 2000 advantages:

* SQL Server 2000 is cheaper to buy than Oracle 9i Database.
* SQL Server 2000 holds the top TPC-C performance and price/performance results.
* SQL Server 2000 is generally accepted as easier to install, use and manage.

The Oracle 9i Database advantages:

* Oracle 9i Database supports all known platforms, not only the Windows-based platforms.
* PL/SQL is more powerful language than T-SQL.
* More fine-tuning to the configuration can be done via start-up parameters.


http://www.devguru.com/home.asp

http://www.devguru.com/technologies/t-sql/home.asp

SQL is a language used to communicate with relational databases. It defines operations for inserting, deleting, retrieving and updating information organized in tables. It is also used for managing databases. Although there are standards for SQL, such as ANSI SQL92 and SQL99, most databases use their own dialect and/or extentions. Microsoft's flavor of SQL used in SQL Server 7 and SQL Server 2000 is called T-SQL.

The following aggregate functions are available:

Aggregate Function Description
AVG Average of values in a column.
COUNT Counts how many rows.
MAX Maximum value in a column.
MIN Minimum value in a column.
STDEV Sample standard deviation of the values in a column.
STDEVP Standard deviation of the values in a column.
SUM Adds the values in a column.
VAR Sample variance of the values in a column.
VARP Variance of the values in a column.

Wednesday, June 11, 2008

Creating an axis webservice

Pre-Requisites
1) Tomcat 5.0
2) Apache axis 1.4
3) jdk 1.4.2

Copy the axis folder (inside D:\axis-1_4\webapps) into Tomcat webapps folder.

1) Create a simple java program
package com.samples.webservice;

class HelloWorld
{
public String displayName(String name) {
return "Hello " + name;
}
}

2) Copy the class file along with the package structure into D:\Tomcat 5.0\webapps\axis\WEB-INF\classes folder.

3) Create a WSDD file - deploy.wsdd







3) Deploy it as a web Service
java -classpath E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\mail.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\
commons-logging-1.0.4.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\
lib\commons-discovery-0.2.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\
lib\saaj.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\activation.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\activation-1.1.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\mailapi_1_3_1.jar org.apache.axis.client.AdminClient deploy.wsdd

4) Access the service by using the url http://localhost:8080/axis/services/HelloWorld

5)Create a client program to access this service
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;

public class HelloWorldClient {
public static void main(String [] args) {
try {
String endpoint =
"http://localhost:8080/axis/services/HelloWorld";

Service service = new Service();
Call call = (Call) service.createCall();

call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName( "displayName" );
call.addParameter( "op1", XMLType.XSD_STRING, ParameterMode.IN );
call.setReturnType( XMLType.XSD_STRING );
String ret = (String) call.invoke( new Object[] { "Srikant !!" } );
System.out.println("Sent 'Srikant !!', got '" + ret + "'");
} catch (Exception e) {
System.err.println(e.toString());
}
}
}

Compile it using -----
javac -classpath E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar HelloWorldClient.java

Run the program using -----
java -cp .;E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\saaj.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\activation.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\mailapi_1_3_1.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar HelloWorldClient

6) To generate Client program using WSDL File
a) java -cp .;E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\saaj.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\activation.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\mailapi_1_3_1.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\endorsed\xercesImpl-2.6.2.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\endorsed\xml-apis-2.6.2.jar org.apache.axis.wsdl.WSDL2Java testsap.wsdl

b) Compile the generated classes.

c) Write a standalone java file to invoke the client as follows

class TestHelloWorld
{
public static void main(String[] args)
{
try
{
System.out.println("Hello World Starts!");
helloworld.HelloWorldService hws = new helloworld.HelloWorldServiceLocator();
helloworld.HelloWorld hw = hws.getHelloWorld();
hw.displayName("Srikant........");
System.out.println("Hello World Ends!");
}
catch (java.rmi.RemoteException rmiEx)
{
System.out.println("RMI Exception is :: " + rmiEx.getMessage());
}
catch (javax.xml.rpc.ServiceException serEx)
{
System.out.println("Service Exception is :: " + serEx.getMessage());
}
}
}

Compile this file :: javac -classpath .;./helloworld;E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar TestHelloWorld.java

d) Run this file
java -cp .;E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\saaj.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\activation.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\mailapi_1_3_1.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar TestHelloWorld


7) To generate WSDL file from a deployed service
java -cp .;E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\axis.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\jaxrpc.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\saaj.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\activation.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\mailapi_1_3_1.jar;
E:\Softwares\servers\apache-tomcat-5.5.25\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar org.apache.axis.wsdl.Java2WSDL -o helloworld.wsdl -l http://localhost:8080/axis/services/HelloWorld -n "urn:helloworld" -p"com.samples.webservice" "urn:helloworld" com.samples.webservice.HelloWorld



********************************************************************************************************
java -classpath D:\Dumps\Software\axis-1_4\lib\axis.jar;
D:\Dumps\Software\axis-1_4\lib\jaxrpc.jar;
D:\Dumps\Software\axis-1_4\lib\commons-logging-1.0.4.jar;
D:\Dumps\Software\axis-1_4\lib\commons-discovery-0.2.jar;
D:\Dumps\Software\axis-1_4\lib\saaj.jar;
D:\Dumps\Software\axis-1_4\lib\activation.jar;
D:\Dumps\Software\axis-1_4\lib\mailapi_1_3_1.jar;
D:\Dumps\Software\axis-1_4\lib\endorsed\xml-apis-2.6.2.jar;
D:\Dumps\Software\axis-1_4\lib\endorsed\xercesImpl-2.6.2.jar org.apache.axis.client.AdminClient deploy.wsdd

D:\Dumps\Software\axis-1_4\lib

java -cp .;D:\Dumps\Software\axis-1_4\lib\axis.jar;
D:\Dumps\Software\axis-1_4\lib\jaxrpc.jar;
D:\Dumps\Software\axis-1_4\lib\commons-logging-1.0.4.jar;
D:\Dumps\Software\axis-1_4\lib\commons-discovery-0.2.jar;
D:\Dumps\Software\axis-1_4\lib\saaj.jar;
D:\Dumps\Software\axis-1_4\lib\activation.jar;
D:\Dumps\Software\axis-1_4\lib\mailapi_1_3_1.jar;
D:\Dumps\Software\axis-1_4\lib\wsdl4j-1.5.1.jar;
D:\Dumps\Software\axis-1_4\lib\endorsed\xml-apis-2.6.2.jar;
D:\Dumps\Software\axis-1_4\lib\endorsed\xercesImpl-2.6.2.jar org.apache.axis.wsdl.Java2WSDL -o cureservice.wsdl -l http://localhost:8080/axis/services/CUREWebService -n "urn:CUREWebService" -p"com.cadence.cure.webservice" "urn:CUREWebService" com.cadence.cure.webservice.CUREWebService


java -cp .;D:\Dumps\Software\axis-1_4\lib\axis.jar;
D:\Dumps\Software\axis-1_4\lib\jaxrpc.jar;
D:\Dumps\Software\axis-1_4\lib\commons-logging-1.0.4.jar;
D:\Dumps\Software\axis-1_4\lib\commons-discovery-0.2.jar;
D:\Dumps\Software\axis-1_4\lib\saaj.jar;
D:\Dumps\Software\axis-1_4\lib\activation.jar;
D:\Dumps\Software\axis-1_4\lib\mailapi_1_3_1.jar;
D:\Dumps\Software\axis-1_4\lib\wsdl4j-1.5.1.jar;
D:\Dumps\Software\axis-1_4\lib\endorsed\xercesImpl-2.6.2.jar;
D:\Dumps\Software\axis-1_4\lib\endorsed\xml-apis-2.6.2.jar org.apache.axis.wsdl.WSDL2Java cureservice.wsdl