Paul Fremantle, CTO of WSO2, talks about how WSO2 Stratos can help you to achieve your business goals with minimum cost. Watch the clip, and register to try out WSO2 Stratos!
Thursday, June 3, 2010
Wednesday, March 17, 2010
Building Axis2/C with Apache Httpd
Building Axis2/C with source release of Apache httpd
(1) Download httpd source from Apache httpd download page and unzip it
(2) Configure with --prefix option and --with-included-apr option, then make it.
(4) Configure with --prefix option and --with-apache2 option. After configuring, make it.
(8) Access the services listing page and verify whether installation is OK.
Building Axis2/C with binary release of Apache httpd
(1) Install following packages
(1) Download httpd source from Apache httpd download page and unzip it
(2) Configure with --prefix option and --with-included-apr option, then make it.
./configure --prefix=/home/shankar/software/apache2/ --with-included-apr; make; make install;(3) Download Axis2/C source from Axis2/C download page and unzip it
(4) Configure with --prefix option and --with-apache2 option. After configuring, make it.
./configure --prefix=/home/shankar/software/axis2/ --with-apache2=/home/shankar/software/apache2/include; make; make install;(5) Copy /home/shankar/software/axis2/lib/libmod_axis2.so to /home/shankar/software/apache2/modules
cp /home/shankar/software/axis2/lib/libmod_axis2.so /home/shankar/software/apache2/modules(6) Edit /home/shankar/software/apache2/conf/httpd.conf and add following
LoadModule axis2_module /home/shankar/software/apache2/modules/libmod_axis2.so
Axis2RepoPath /home/shankar/software/axis2/
Axis2LogFile /tmp/axis2.log
Axis2LogLevel info
Axis2MaxLogFileSize 10
Axis2GlobalPoolSize 10
<location axis2="">
SetHandler axis2_module
</location>(7)If you are running httpd as a normal user, not as a root, have to modify "user" and "group" settings in httpd.conf(8) Access the services listing page and verify whether installation is OK.
http://localhost:8080/axis2/services
Building Axis2/C with binary release of Apache httpd
(1) Install following packages
- httpd
- httpd-devel
- apr
- apr-devel
./configure --prefix=/home/shankar/software/axis2/ --with-apache2 --with-apr(3) Other steps are similar to the way mentioned above.
Wednesday, March 10, 2010
Administration console for Axis2/C WSF/C and WSF/C++
Administration console for Axis2/C, WSF/C and WSF/C++ was released today. Upto now, if you want to configure the services for Axis2/C etc., you have to do using command line. Administration console initiative will allow you to do that using a convenient frontend. You can configure the security policy of services, manage your keystores, get statistics of the services using the console. Still the console is in its infant phase, but will have a huge set of features in near future, including hot deployment of services and graceful restart of backend. You can read the release note from C web services blog and download the admin console from WSF/C project page.
This administration console is based on WSO2 Carbon. From WSO2 Carbon's point of view, this is going to be a success story. This will be a proof of concept, that carbon console can talk to any backend. Backend doesn't need to be written using Carbon or Java, but it can be written in C, C++ or .NET. This success story will help more people to get advantage by using WSO2 Carbon.
Wednesday, March 3, 2010
Unix Haters Handbook
I was reading Unix Haters Handbook. Following is an excerpt from the book:
Working with Axis2/C, I have same experience in *nix environments. Even different flavors of Linux have different ways of doing things. Who said Linux is a friendly operating system? Only people who haven't used Windows!!!
Date: Sun, 13 May 90 16:06 EDT
From: John R. Dunning
To: jnc@allspice.lcs.mit.edu, UNIX-HATERS
Subject: Unix: the last word in incompatibility.
Date: Tue, 8 May 90 14:57:43 EDT
From: Noel Chiappa
[...]
I think Unix and snowflakes are the only two classes of objects
in the universe in which no two instances ever match exactly.
I think that’s right, and it reminded me of another story.
Some years ago, when I was being a consultant for a living, I had a
job at a software outfit that was building a large graphical user-inter-
face sort of application. They were using some kind of Unix on a
PDP-11 for development and planning to sell it with a board to
OEMs. I had the job of evaluating various Unix variants, running on
various multibus-like hardware, to see what would best meet their
needs.
The evaluation process consisted largely of trying to get their test
program, which was an early prototype of the product, to compile
and run on the various *nixes. Piece of cake, sez I. But oops, one
vendor changed all the argument order around on this class of system
functions. And gee, look at that: A bug in the Xenix compiler pre-
vents you from using byte-sized frobs here; you have to fake it out
with structs and unions and things. Well, what do you know, Venix’s
pseudo real-time facilities don’t work at all; you have to roll your
own. Ad nauseam.
I don’t remember the details of which variants had which problems,
but the result was that no two of the five that I tried were compatible
for anything more than trivial programs! I was shocked. I was
appalled. I was impressed that a family of operating systems that
claimed to be compatible would exhibit this class of lossage. But the
thing that really got me was that none of this was surprising to the
other *nix hackers there! Their attitude was something to the effect
of “Well, life’s like that, a few #ifdefs here, a few fake library inter-
face functions there, what’s the big deal?”
I don’t know if there’s a moral to this story, other than one should
never trust anything related to Unix to be compatible with any other
thing related to Unix. And oh yeah, I heard some time later that the
software outfit in question ran two years over their original schedule,
finally threw Unix out completely, and deployed on MS-DOS
machines. The claim was that doing so was the only thing that let
them get the stuff out the door at all!
Working with Axis2/C, I have same experience in *nix environments. Even different flavors of Linux have different ways of doing things. Who said Linux is a friendly operating system? Only people who haven't used Windows!!!
Sunday, November 29, 2009
Friday, October 16, 2009
WSO2 WSF/C++ 2.1.0 Released
WSO2 Web Services Framework for C++ (WSO2 WSF/C++) 2.1.0 Released
=================================================================
WSO2 WSF/C++ team is pleased to announce the release of WSO2 WSF/C++ 2.1.0.
You can download this release from: http://wso2.org/downloads/wsf/cpp
WSO2 Web Services Framework for C++ (WSO2 WSF/C++) is a standards compliant, enterprise
grade, open source, C++ library for providing and consuming Web services in C++, based on the popular,
WSO2 WSF/C library.
Project home page:
-------------
Key Features
=============
1. Client API to consume Web services
* ServiceClient class with one-way and two-way service invocation support
for SOAP 1.1, and SOAP 1.2.
* Options class to facilitate configuring the client for both SOAP and REST options.
2. Service API to provide Web Services
* ServiceSkeleton class to extend from to implement services.
2. Attachments with MTOM
* Binary optimized
* Non-optimized (Base64 binary)
* Attachment Caching Support
3. WS-Addressing
* Version 1.0
* Submission
4. WSPolicy
5. WS-Security
* Username Token
* Timestamp Token
* Signing
* Encryption
* WS-SecurityPolicy based configuration
* Reply detection
* WS-Trust
* WS-Secure Conversation
6. Code generation Tool
* By providing a wsdl and options, generate client stubs and service skeletons
in C++ using the code generation tool.
* A Code generation Eclipse plugin is also available with this release. The code generation tool
has been integrated into an eclipse plugin wizard which allows a user to conveniently
utilise the code generation tool while working within eclipse.
7. SSL enabled transport layer
8. WS-Reliable Messaging
9. Has all the capabilities available from WSF/C library.
--------------------------------
Major Changes Since Last Release
================================
1. Eclipse plugin for code generation tool added.
2. Visual Studio project file generation is added to the code generation tool.
3. Documentation Improved.
4. Many bugs fixed in the code generation tool.
5. Many memory leak fixes.
6. More samples have been added.
7. The Service API has been enhanced to allow users to extend from the generated skeleton classes.
-------------------
Known Issues
-------------------
There could be memory leaks in some scenarios.
-------------------
Reporting Problems
===================
Issues can be reported using the public JIRA available at:
-----------
Contact Us
===========
Mailing Lists
-------------
Please subscribe to our user or developer mailing lists. For details on how
to subscribe please visit: http://wso2.org/mail
Discussion Forums
-----------------
Questions could be raised using the WSF/C++ forum.
Training
========
WSO2 Inc. offers a variety of professional Training Programs which includes training on WSF/C++.
For additional information please refer to http://wso2.com/training/
Support
========
WSO2 Inc. offers a variety of development and production support programs, ranging from Web-based
support up through normal business hours, to premium 24x7 phone support.
For additional support information please refer to http://wso2.com/services/support/
We welcome your early feedback on this implementation.
Thank you for your interest in WSO2 WSF/C++.
-- WSO2 WSF/C++ Team --
Tuesday, September 29, 2009
Improving performance of Guththila
I am doing some improvements to Guththila XML parser these days. Guththila XML parser is the default parser used by Axis2/C. The modifications to the code was very simple, but gave a huge improvement. We got about 3-4 times improvement during this exercise. Compare the performance of revision 812074 Vs 817160 for message size of 64kbytes.
I was using callgrind to profile Axis2/C. Improvements were mainly for big message processing. I used 1M messages to find the bottlenecks.
- Initially, guththila was taking 674 M clock cycles to process 3 messages
- guththila_next_char method is using many pointer references. Removing some of them by keeping variables resulted in guththila taking only 634 M clock cycles
- guththila next char was returning a character by comparing c>=0?c;-1. just returning c without the comparison resulted in 591M clock cycles
- guththila_next_char method was called for each character of the payload. However, only first five lines of the code was executed around 99% of the time. For big messages, method calling overhead was very high. (In our case, it was called 10000000 times). Moving first five lines into a macro and calling the method if the macro cannot satisfy (which is less thank 1% of the time) resulted in 389M clock cycles
- GUTHTHILA_IS_SPACE macro was checking (c == 0x20 || c == 0xD || c == 0xA || c == 0x9) and returning the result. But for majority of the cases, a character is not a space and above operation needed 4 comparisons to get a result. Replacing it with ((c < 0x21) && (c == 0x20 || c == 0xD || c == 0xA || c == 0x9)) made only one comparison for most of the cases, resulting in 289M clock cycles.
- To find next occurrence of a character, guththila_next was going character by character until we find a match. Replacing it with memchr method resulted in 59M clock cycles.
Even though the modifications are very simple, the CPU cycle needed to process three 1M messages were brought down from 674M cycles to just 59M cycles.
Subscribe to:
Posts (Atom)