Monday, August 31, 2009

org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir svn

I had this error when I tried to update my source directory of my project. The reason for this exception is unsuccessful previous commit/update with svn. For example when you close your eclipse when a transaction takes place.

How do I resolve this issue?
  1. Right Click your project and select Team --> Cleanup
  2. Now try to do your update/commit
Try to do it at your project level since even if you try cleanup at source level and if the project has a lock, you will still not be able to do an update/commit.

Thursday, August 27, 2009

James Gosling's Toy show

Best practices for SAAS implementation using an Open Source Portal (JBoss)

JBoss Portal is a very popular open source portal offering from Red Hat. It is JSR-168 compliant and
provides support for deployment in a clustered environment with high-availability. The JBoss Portal framework
provides support for features like customizable UI tier using themes and skins, creating workflows using a
process server and also supports SOA.
In this article we will explore various design approaches to implement a SAAS application using
JBoss as the portal vendor.
Some of the key considerations in implementing a SAAS solution involve:
1) Addressing MultiTenancy
2) Providing a unique user experience
3) Keeping user/tenant data separated and secure
4) Having a SOA based architecture and using Web Services based messaging for the middle-tier
or business layer.
Multi-tenancy refers to the ability to host a software solution that serves multiple client organizations
or tenants. Its scope includes:
1) Application customization
2) Data isolation
3) Security isolation
Portlet design considerations for multitenancy
Application customization:
A portal implementation offers a lot of features which can be leveraged to provide a customized feel for
every tenant. Each portlet can be made configurable for each subscriber. To enable a high level of reuse,
the degree of configurability in the portlets must support subscriber-specific settings in a range from name and-value pair configurations, such as subscriber IDs or subscriber's service endpoints, to subscriberspecific
look-and-feel. JBOSS can provide a clone-and-configure approach to the implementation and
deployment of the portal in multi-tenant applications i.e. the ability to clone a portal and configure it. JBoss
like many other portal vendors supports the concept of a virtual portal which is a logical copy of an existing
portal utilizing the same hardware and software resources.
Security Isolation:
Each virtual portal supports isolation of user populations for each tenant bank through a multi-tenant LDAP
tree structure in a single instance of a directory Server. A sample scenario as outlined by folks at IBM
involve the following steps which can also be recreated in JBoss
1) Create a multitenant user directory structure in LDAP by:
- Create a realm for each tenant i.e. a separate tree hierarchy starting at dn [dc=tenant1, dc=com]
- For each security realm, a new partition and security context entry must be created in the server.xml
configuration file in Apache Directory Server (Apache Directory Server Install Directory / instances /
default /conf /server.xml)
2) Dynamic LDAP routing with Spring security
The basis of dynamic LDAP routing hinges on the possibility of dynamically selecting the LDAP
security context at run time based upon a lookup key. In a multitenant environment, this translates to
authenticating and authorizing against an LDAP source that is derived on the fly based on the tenant's
Providing a unique user experience:
Unique User Experience is providing a different User Interface to different users as per the application
scope. Unique User Experience consists of look and feel , structure and scope for every user role.
Using the model proposed by Jesse Richard Dalton we attempt to show how a Unique User Experience
(UUE) can be provided to tenants using Jboss.
JBoss provides a lot of features which can be utilized to create a distinct look and feel that is also
consistent with the organization branding. Also it provides flexibility to the tenant to customize the look and
feel based on their specific business requirements.
At a high level providing a UUE can be divided into the following 4 S’s:
1. Surface
2. Skeleton
3. Structure
4. Scope
Surface is the client-facing element directly visible to the client. This layer is supported by themes and skins
of the portal application. Themes and skins control the overall look and feel of all the pages in a Portal.
Changes to them are made via updating stylesheet classes provided by JBoss. Themes and skins can be
set at a virtual portal level. They can also be set at a user level based on the user role and access. This can
be done dynamically in the application or can be set by an Admin using the portal’s administrative console.
Skeleton is responsible for ensuring that the page architecture and layout are as per the user needs and
can be customized. A UUE in this context can be achieved through providing different layout options of the
page. By default there are three types of layouts: - right, center and left.
Structure is the next element of UUE. Structure differentiates a site or application as per the organization,
line of business and user needs. A virtual portal provides a quick way to achieve this objective.
Virtual Portals are logical portals that share the same hardware and software installation. Virtual portals can
also specify a default locale through portal’s administrative console to implement internationalization
functionality for organizations that require different languages to cater to their distinct global locations.
Scope includes access control and roles. Portal provides access functionality at the page level accessibility
for user role and user group. For example hiding certain sections or links on a page from anonymous users
or displaying content relevant only to a specific user group. Above that Portal also provides functionality at
the application.
Per the JSR 168 spec, portlet has 4 modes view, edit, config and help. View and help modes can be
available for all registered users or anonymous users. Edit mode can be available to registered users and
configuration mode is available only to administrator. These modes provide another level of customization
at the portlet level.
Separate and Secure Data Tier:
Implementing a Multi-Tenant database:
Key considerations while designing the multi-tenant database are consolidation, scalability and extensibility.
Each tenant can have its own extensions for base tables as per the requirement, forming the separate
logical schema for that tenant. Query transformation can be used to map these single-tenant logical
schemas to one multi-tenant physical schema. Available physical memory can limit the scalability of the
The simplest approach to implement multi-tenancy would be to create private database structure for each
tenant. In this approach the database structure is replicated and customized according to the tenant’s
requirement. Accordingly query transformation becomes very simple but it puts overhead to physical
memory as the number of tables keeps growing when new tenants are added. Hence this approach gets
expensive in terms of memory.
Second approach could be to use Universal tables. Universal table is a very generic structure containing
data for all the tenants. Table schema includes the tenant column and the large number of generic columns
considering requirements of all tenants. Tenant column is used to identify which tenant the row belongs.
Columns from the logical source tables of each tenant are mapped to generic columns in universal table
which allows different tenants to extend same table in different ways. Keeping all values altogether in one
table avoids the reconstruction overhead. The disadvantage of this approach is that rows are unnecessarily
wide containing null values for those generic columns which do not belong to the tenant.
Base-Extension table layout can be the better approach to overcome the above mentioned disadvantages.
Here extensibility can be achieved by splitting the universal table in base and extension table. Base table’s
schema will have minimum required generic columns those used by all tenants. A separate extension table
is created for additional requirements of particular tenant. This extension table can be shared by other
tenants having the same extension requirement, which avoids creating unnecessary tables with the same

Wednesday, August 26, 2009

Developer toolsets for webservices

Taking SOAP and REST architectures into consideration.

What Toolkits are for SOAP
Apache SOAP (see also AXIS) (Apache project) [Full, Java] 2.3.1, 2001/06/10
AXIS (Apache project) [Full, Java] 1.0, 2002/10/07
TRLSOAP [not available] (IBM Research, Tokyo) [Full, Java] 0.72, 2000/11/24
Web Services Toolkit (IBM, alphaWorks) [Full, Java 1.3, LotusScript] 3.2.2, 2002/08/26
WASP for Java [login required] (Systinet) [Full, Java] 4.0, 2002/10/01
GLUE [registration required] (Graham Glass) [Full, Java] 3.2, 2002/10/08
eSOAP [login required] (Rosimildo da Silva) [Client, Java] 1.0, 2001/10/18
Java XML Pack [login required] (Sun) [Full, Java] summer02_01, 2002/07/31
Java Web Services Developer Pack (WSDP) (Sun) [Full, Java] 1.0_01, 2002/07/31
Web Services Kit for Java (Borland) [Full, Java] ?, ?
DevelopMentor SOAP [abandoned] (DevelopMentor) [Full, Java] 0.3, 2000/01/24
XSOAP (aka SoapRMI) (Indiana University) [Full, Java] 1.2, 2001/11/04
jBroker Web [login required] (Novell/SilverStream Software) [Full, Java] 2.0, 2002/06/24
X-Soap Toolkit [not available] ( [Full, Java] 0.9, 2000/09/17
Spheon JSOAP (Florian Muller) [Full, Java] 0.4.1, 2002/06/29
Wingfoot SOAP [registration required] (Wingfoot) [Full, Java/J2ME/J2SE] 1.0, 2002/03/31
ZOAP [not available] ( [Full, Java] ?, ?
CapeConnect (Java Web Services) [registration required] (Cape Clear Software) [Full, Java] 2.0, 2001/05/11
HP Web Services Platform [discontinued] (HP) [Full, Java] 2.0.1, ?
Bubbles Project [folded into the Wingfoot SOAP] (Vivek Chopra) [Client, Java | PDA | KVM-based] ?, ?
kSOAP ( [Client, Java 2 Micro Edition | PDA | KVM-based] 1.2, 2002/06/06
SoapWiz (SOAP toolkit for JBuilder) [login required] (Stephen Schaub) [Client, Java | JBuilder 4 | Win] 1.0, 2001/03/31
Vitiris Web Services Platform [login required] (Killdara/Interbind) [Full, Java] ?, ?
InstantXML [not available] (Tradia) [?, Java] ?, ?
SOAP for BEA WebLogic [no official support] (BEA Systems) [Server?, Java? | BEA WebLogic Server] ?, ?
XMLBus [registration required] (IONA Technologies) [Full, Java | iPortal AppServer, BEA WebLogic] 5.4, 2002/09/16
Business Integration Platform [not available] (Shinka Technologies) [Full, Java, Visual Basic, C++] 1.3, 2001/08/01
Microsoft SOAP toolkit (Microsoft) [Full, VB/C# | WinNT/2K] 2.0 SP2, 2001/06/21
Visual Studio .NET (Microsoft) [Full, .NET | WinNT/2K/98/Me] ?, ?
.NET Framework SDK (Microsoft) [Full, .NET | WinNT/XP/2K/98/Me] 1.1, 2002/10/03
Microsoft Web Services Development Kit (WSDK) (Microsoft) [Full, VB/C# | WinNT/2K] ?, 2002/08/26
4s4c (Simon Fell) [Server, COM | WinNT/2K] 1.3.8, 2002/03/02
pocketSOAP (Simon Fell) [Client, COM? | Win9x/Me/NT/2K/Pocket] 1.3.7, 2002/08/19
White Mesa (Robert Cunnings) [Full, C++ | COM | WinNT/2K] 2.7.2, 2002/07/28
vbSOAP [not available] (Phalanx Systems) [?, VB6.0] 3.0, 2002/03/13
SOAP component in IP*Works (Nsoftware) [Client, .NET/VB/VC++/Delphi/C++Builder | Win9x/NT] ?, ?
WebServer Tool [registration required] (Dart) [Full, VB/VC++/Delphi/C++Builder | COM | WinNT/2K] 1.6.0, ?
SOAP::Lite (Paul Kulchenko) [Full, Perl] 0.55, 2002/04/15
DevelopMentor SOAP [abandoned] (DevelopMentor) [Full, Perl] 0.28, 2000/09/05
PerlEx (ActiveState) [Server, Perl | WinNT/2K] 2.2.1, 2002/05/27
Secret Labs SOAP [abandoned] (Secret Labs) [Full, Python] 0.8, 2000/06/21 (Cayce Ullman) [Full, Python] 0.9.7, 2001/06/27
SOAPy (Adam Elman) [Client, Python] 0.1, 2001/04/26
ZSI: Zolera Soap Infrastructure (Zolera Systems, Rich Salz) [Full, Python] 1.3RC2, 2002/05/14
Web Services for Zope (Zope Corporation, Brian Lloyd) [?, Python] 1.0a, 2001/10/30
Lye -- COM to SOAP (Andrew Dalke) [Client, Python | COM clients] 0.1, 2000/09/14
WASP for C++ [login required] (Systinet) [Full, C++] 4.0, 2002/09/01
SimpleSOAP [not available] (Scott Seely) [Client, Visual C++] ?, 2001/01/13
C++ Library for SOAP Client (SQLData) [Client, C++ | WinNT/2K] 2.0, 2000/12/10
gSOAP (Robert van Engelen) [Full, C/C++] 2.1.10, 2002/10/14
SQLData SOAP Server (SQLData) [Server, C++ | WinNT/2K] 3.01, 2001/01/25
EasySOAP (David Crowley) [Client, C++ | Linux/WinNT/2K/POSIX] 0.6.1, 2002/06/10
eSOAP (Rosimildo da Silva ) [Full, C++ | Linux/Windows/RTEMS/eCos] 1.0, 2001/10/18
SOUP [abandoned?] (Ximian) [Full, C | Linux/Windows] 0.2, 2001/05/22
XMLRPC-EPI (Dan Libby) [Full, C | Linux] 0.50, 2001/09/26
OpenSOAP (OpenSOAP project) [Full, C] 1.0-20030110, 2003/01/10
SOAP to CORBA bridge (LifeLine Networks bv) [Full?, C++ | Linux/WinNT/2K] 2.0.5, 2001/10/15
Web Services for Mac OS (Apple) [Client, AppleScript | Mac OS X] 10.1, ?
SOAP toolkit LITE [registration required] (Lucin) [Full, ? | Windows 95/98/NT/2000] 2.3.0, 2000/09/18
SOAP for Frontier (UserLand) [Full, Frontier] ?, ?
SOAP for Ada (Michael Erdmann) [Full, GNU Ada | Linux SuSe] 0.1.5, 2002/10/03
anyService (Chris Bayes) [Client, JavaScript/XSLT | Win | IE/HTA] 0.3, 2001/05/15
SOAP client for IE 5.0 [not available] (Aaron Skonnard) [Client, JavaScript | Win | IE] ?, 2000/01
WebService Behavior (SOAP client for IE 5 and later) [not supported] (Microsoft) [Client, DHTML | Win | IE | HTC] 2.01, ?
XML Extras with SOAP ( [Client, JavaScript | Win | Mozilla] ?, 2000/12/28
Spray for Dolphin Smalltalk (Steve Waring) [Full, Smalltalk] 0.5, 2001/11/16
SOAP Smalltalk (Camp Smalltalk) [Client, Smalltalk] ?, 2000/10/03
VW Opentalk SOAP (Cincom Systems) [Full, Smalltalk] 1.0, 2002/07/01
SOAP4R (Nakamura Hiroshi) [Full, Ruby] 1.4.7, 2002/09/20
PHPSOAP [not available] (GigaIdeas) [Full, PHP] ?, ?
NuSOAP (SOAPx4) (Dietrich Ayala) [Full, PHP] 0.6.1, 2002/04/29
SOAP server class [not available] (Manuel Lemos) [Server, PHP] ?, 2001/06/09
phpXMLP [abandoned?] ( [Full, PHP] 0.10, 2001/08/19
PHP-SOAP (Brad LaFountain) [Full?, PHP] 0.1.1, 2002/05/02
PEAR-SOAP (PEAR development team) [Full, PHP] 1.0b1, 2002/10/12
eZ soap (eZ systems as ) [Full, PHP] 2.9-1, 2002/05/31
Oracle9i Application Server (Oracle) [Server, ?] R2, ?
Kafka Framework (Christopher Dix) [Server, XSLT] 0.9, 2001/04/05
SOAP for Tcl (Pat Thoyts) [Client, Tcl] 1.6.5, 2002/09/22
NSSOAP for AOLserver [abandoned?] (Lee Teague) [Client, C, Tcl] Not released yet
Web services in ColdFusion (Macromedia) [?, ColdFusion] MX, ?
webMethods Enterprise Web Services [registration required] (webMethods) [Full, - | Linux/Solaris/HP-UX/WindowsNT/2K] 4.6 SP2, 2002/10/16
MOO SOAP (Rob Sanderson) [Full?, MOO] 0.75, 2002/06/13
Virtuoso (Openlink) [Full, ? | Windows/Linux/Solaris] 2.5, ?
Pure SOAP (Pure Software Technology) [Full, Delphi] 0.0.4, 2001/01/28
Delphi 7 Studio (Borland) [Full, Delphi] 7.0, ?
wwSOAP (West Wind Technologies) [Full?, Visual FoxPro] 2.0, 2001/09/08
SoapOpera (SOAP-HTTP ORB) (Masashi Umezawa) [?, SqueakSmalltalk] 0.5beta4, 2002/10/09
SOAP taglib [not available] (Ulrich Mayring) [Client, XSP/taglib | Cocoon?] ?, 2001/04/05
What is a REST Web Service
The acronym REST stands for Representational State Transfer, this basically means that each unique URL is a representation of some object. You can get the contents of that object using an HTTP GET, to delete it, you then might use a POST, PUT, or DELETE to modify the object (in practice most of the services use a POST for this).
What Toolkits are for REST
REST is not a standard. You will not see the W3 putting out a REST specification. You will not see IBM or Microsoft or Sun selling a REST developer's toolkit. Why? Because REST is just an architectural style. You can't bottle up that style. You can only understand it, and design your Web services in that style.
While REST is not a standard, it does prescribe the use of standards:
XML/HTML/GIF/JPEG/etc (Resource Representations)
text/xml, text/html, image/gif, image/jpeg, etc (Resource Types, MIME Types)