« December 2009
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
       
Today

Blog::Navigation

Blog::Editing

Bookmarks::Blogroll

Blog::Referers

Today's Page Hits: 0

Site notes

This page validates as XHTML 1.0, and will look much better in a browser that supports web standards, but it is accessible to any browser or Internet device. It was created using techniques detailed at glish.com/css/.

Powered by Roller Weblogger.
Friday May 23, 2008

Pentaho Reports with Liferay on Glassfish

I love to share my recent effort to make Pentaho Reports work with Liferay on Glassfish. The current scope of the work uses iFrameportlet to display Pentaho reports to display in Liferay.

 

About Pentaho/Liferay :

 

Pentaho is a leading industry open source BI product with in built reporting engine and compatible with JSR – 168 Portlet report rendering. Liferay is an open source JSR 168 portlet specification compatible portal framework providing an easy customizing environment for portlet rendering. Liferay-Pentaho integration effort is to show Liferay as a dashboard aggregation for Pentaho & Pentaho Reports based on Liferay User Activity.



 

Objectives

The goal of this project is deploy pentaho portlets that are capable of exposing Pentaho Dashboard functionality in Liferay portal environment. To achieve this objective the following are required resources



> Glassfish latest version

> MySQL 5.X

> Derby database comes bundled with Glassfish server

> Liferay resource files http://wiki.liferay.com/index.php/Liferay_with_GlassFish for Liferay 4.X

http://www.liferay.com/web/guest/downloads/additional for 5.0.1 version

> Pentaho resource files

Pentaho Business Intelligence Suite (1.6.0 Open Source GA) files from here:

J2EE Deployments

http://downloads.sourceforge.net/pentaho/pentaho_j2ee_deployments-1.6.0.GA.863-a.zip





Sample data

http://downloads.sourceforge.net/pentaho/pentaho_sample_data-1.6.0.GA.863.zip

Sample solutions

http://downloads.sourceforge.net/pentaho/pentaho_solutions-1.6.0.GA.863.zip

Setup

The following set up is required to meet the scope of this project.

> Liferay deployment on Glassfish server configured against Derby database

> Pentaho deployment on Glassfish server configured against MySQL database

> Liferay portal customizing to show Pentaho reports using iFrameportlet

 

How to Deploy Liferay on Glassfish

For this scope purpose its recommended to run Liferay & Pentaho on two different Glassfish server instances. Also as pentaho deployment having dependencies to run on Glassfish server port 8080 its recommended to run Pentaho on glassfish server which is running at 8080.



Install Liferay Manually on Glassfish V2

Downloads: 
 

  • Create a directory into which to store and extract the download files (e.g. C:\Liferay).

  • Go to http://www.liferay.com/web/guest/downloads/additional.

  • Download the Liferay Portal 4.X.Y WAR file for Servlet 2.4 to the directory (e.g. C:\Liferay).

  • Download the Liferay Portal 4.X.Y Dependencies file and unzip to the dependencies subdirectory (e.g. C:\Liferay\dependencies).

     

  • Download the Liferay Portal 4.X.Y SQL Scripts file and unzip to the sql subdirectory (e.g. C:\Liferay\sql).

  • Download the Liferay Plugins SDK 4.X.Y file and unzip to the sdk subdirectory (e.g. C:\Liferay\sdk).

  • Download the Liferay Portal 4.X.Y Web Services Client and unzip to the ws-client subdirectory (e.g. C:\Liferay\ws-client).

  • Download the Liferay Portal 4.X.Y JavaDocs and unzip to the doc subdirectory (e.g. C:\Liferay\doc).





Database configuration:

  • Login as the administrator to the database of your choice.

  • Select either the minimal installation (scripts in the sql/create-minimal subdirectory) or the full example installation (scripts in the sql/create subdirectory) and run the script for your database server (e.g. create-mysql.sql). The default database created by the script is called lportal.

    Recommended security: Create a separate Liferay database user and grant it SELECT, INSERT, UPDATE, and DELETE permissions on all tables in the lportal database.

If you have downloaded Liferay 5.0.1 you can see Derby scripts at Liferay\sql\create\create-derby.sql. This is the full sample version of liferay data schema and its data.



For mysql



For mysql the script to be executed : Liferay\sql\create\create-mysql.sql



Glassfish configuration:

  • Stop Glassfish if it is running.

  • Copy the Liferay dependencies to the Glassfish domains/<liferay_domain>/lib subdirectory. (the Jar files from dependencies zip file of Liferay.)

  • Copy the xercesImpl.jar file from the Liferay sdk/lib subdirectory to the Glassfish domains/<liferay_domain>/lib subdirectory.

  • Copy any required bridges (e.g. jsf-portlet.jar) to the Glassfish domains/<liferay_domain>/lib subdirectory. To download jsf-portlet.jar refer https://jsfportletbridge.dev.java.net/public/Download.html

    NOTE: As per liferay instructions keeping jsf-portlet.jar is an important activity. But my finding is that without jsf-portlet.jar also liferay still works and it leverages Glassfish portlet/jsf frameworks to render its portal framework.

  • Keeping jsf-portlet.jar makes Glassfish server Admin console not to be displayed properly and throws the following exception


  • [#|2008-05-15T14:44:10.578-0700|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=20;_ThreadName=httpWorkerThread-4848-1;_RequestID=a82e261d-23cb-4743-a286-3595c2e09e7d;|StandardWrapperValve[FacesServlet]: PWC1406: Servlet.service() for servlet FacesServlet threw exception
    java.lang.ClassCastException: org.apache.catalina.core.ApplicationContextFacade cannot be cast to javax.portlet.PortletContext
     at com.sun.faces.portlet.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:64)
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:239)
     at com.sun.enterprise.tools.admingui.servlet.DelayedInitFacesServlet.service(DelayedInitFacesServlet.java:89)
     at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:240)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
     at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
     at com.sun.enterprise.web.connector.grizzly.WorkerThreadImpl.run(WorkerThreadImpl.java:116)
    |#]

  • If you come across above exception do not use jsf-portlet.jar

 

  • Copy the JDBC driver for your database to the domains/<liferay_domain>/lib directory.

Give the sample for mysql (where to download, file to copy over, etc.)

  • Start Glassfish and login to the Admin Console.



Does not start with the jsf-portlet.jar file. Removed for now.

     

  • Go to Resources/JDBC/Connection Pools and create a connection pool to connect to the lportal database.

Can we be more specific about what to choose. You an example like MySQL. Also, do you just accept default values?



Note: You can accept default values, just focus on Username, Password, DB Name properties only.



  • Go to Resources/JDBC/JDBC Resources, create a JDBC resource with the name jdbc/LiferayPool, and associate it with the connection pool created in the previous step.

Can we be more specific about what to choose. You an example like MySQL.

Note: Its a simple JNDI Name, just create jdbc/LiferayPool

  • Go to Resources/JavaMail Sessions and create a JavaMail resource with the name mail/MailSession.

What do we need to enter for New JavaMail Session values? (I just added random values, which it seem to take)



Note: Just put any random values, Liferay is dependent on this Java mail session resource in order to be deployed without errors. But I haven't come across a portlet which uses Mail session in Liferay or in our SCOPE of work. Kindly create a mail session with any values and deploy it.



  • Deploy the Liferay WAR file to the server with the context root /.



Can we add the steps to do this?

Note: I am assuming the scope of this document is purely on Liferay/Pentaho. The moment I step into Glassfish deployment or any other configuration steps the document looses its flavor. I prefer to leave the document without Glassfish specific steps.



  • If the application server is running locally, set the upload option to false (if using the asadmin command-line tool) or use the Local packaged file or directory that is accessible from the Application Server option in the Admin Console.

  • For faster application load times, precompile the JSPs (this will take several minutes).

  • Do not run the verifier, as the sun-web.xml file does not match its DTD and will cause a deployment failure.

  • Liferay configuration:







Go to the Liferay portal (http://localhost:8080/ if running locally under Glassfish).

Sign in as the administrator (test@liferay.com).

Add the “Plugin Installer” portlet if not present.

Go to the “Configuration” tab of the “Plugin Installer”.

Change the “Deploy Directory” to the deployment directory of your choice.

Press “Save”.

Retrieved from "http://wiki.liferay.com/index.php/Liferay_with_GlassFish"

How to Deploy Pentaho on Glassfish



1. Download the necessary software: Pentaho Business Intelligence Suite, Glassfish, MySQL, and extra libraries.

Pentaho Business Intelligence Suite (1.6.0 Open Source GA) files from here:

J2EE Deployments http://downloads.sourceforge.net/pentaho/pentaho_j2ee_deployments-1.6.0.GA.863-a.zip



Sample data http://downloads.sourceforge.net/pentaho/pentaho_sample_data-1.6.0.GA.863.zip



Sample solutions http://downloads.sourceforge.net/pentaho/pentaho_solutions-1.6.0.GA.863.zip

Unzip these files into $PENTAHO_INSTALL_DIR. You should have three folders in this directory: data, solutions, and J2EE deployments.





MySQL

Download MySQL 5.0 http://dev.mysql.com/downloads/mysql/5.0.html

Windows platform:

http://dev.mysql.com/downloads/mysql/5.0.html#win32 download Windows ZIP/Setup.EXE (x86)

Solaris:

http://dev.mysql.com/downloads/mysql/5.0.html#solaris download the version that matches your OS / hardware environment



Download the following jar files:

dom4j-1.6.1.jar

jaxen-1.1.1.jar

mysql-connector-java-5.1.5-bin.jar





If the Glassfish server is not running, then start the server by entering this command: asadmin start-domain domain1



When the server has started, this message appears: *{{Domain domain1 is ready to receive client requests.Additional services are being started in the background.}}*



Install and configure MySQL for Pentaho.

Follow the installation instructions from the MySQL web site located at http://dev.mysql.com/doc/refman/5.0/en/installing.html

Download and save the database sample for Pentaho, which has sample users and data, from

http://source.pentaho.org/svnroot/pentaho-data/trunk/mysql5/SampleDataDump_MySql.sql

Import the sample data

On Windows:

Open the MySQL Command Line Client from Start->MySQL->MySQL Server 5.0

Enter the root database password when prompted



At the mysql> prompt, type source $<path_to__file>/SampleDataDump_MySql.sql



On Solaris:

At the command line, run mysql -u root -p

Enter the root database password when prompted

At the mysql> prompt, type source $<path_to__file>/SampleDataDump_MySql.sql

Verify that you can login to MySQL as the necessary Pentaho users (hibuser, pentaho_user, and pentaho_admin)

At the command line, type mysql -u <user> -p

Run this command for the three Pentaho users listed above

When prompted for the password, enter password

If you are unable to login (i.e get an Access denied error), then follow these steps to grant privileges and set the password for the Pentaho users:

At the command line, type mysql -u root -p and enter your mysql root password when prompted

At the mysql prompt, type:

use mysql;

grant all privileges on *.* to hibuser;

grant all privileges on *.* to pentaho_user;

grant all privileges on *.* to pentaho_admin;

set password for 'hibuser'@'localhost' = PASSWORD('password');

set password for 'pentaho_user'@'localhost' = PASSWORD('password');

set password for 'pentaho_admin'@'localhost' = PASSWORD('password');

flush privileges;

exit





You should now be able to login as hibuser, pentaho_user, pentaho_admin with the appropriate password using mysql -u <user> -p

If you have problems with the users, try to create the users with:

create user 'pentaho_user'@'localhost';

create user 'pentaho_admin'@localhost;

create user 'hibuser'@localhost;

Build Pentaho for Glassfish

Make the following modifications to $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/build.properties:



Add the following parameters:

rdbms=mysql5

ear.dir=${build.res.dir}/ear

tomcat5.dir=${build.wars.dir}/tomcat/${rdbms}

staging.resources=pentaho-res





Change the following parameters:

data.dir should point to $PENTAHO_INSTALL_DIR/pentaho-data

solutions.dir should point $PENTAHO_INSTALL_DIR/pentaho-solutions

Under $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a, create the directory structure build/pentaho-ears/orion.

The ant build will place the ears in this directory.





Modify $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/pentaho-webapp/WEB-INF/web.xml.



Change the value of "solution-path" to the $PENTAHO-INSTALL-DIR/pentahosolutions Example: C:\pentaho\pentaho-solutions

In $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/pentaho-res/ear/application.xml





Delete all the additional java modules referring *-ds.xml files. The modified application.xml file is here. These modules create datasources in JBoss and hence are needed only for a Jboss compatible ear. For glassfish though, we create connection pools and data resources manually, through the admin console or by using the asadmin command-line tool.



In $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/pentaho-res/orion/data-sources.xml,modify all the data source's connection-driver and url values to indicate mysql, rather than hsql. Below is an example of the Hibernate data source. Replicate it for all the other data sources in the file.



{{<data-sourceclass="com.evermind.sql.DriverManagerDataSource"name="Hibernate"location="jdbc/HibernateDS"

xa-location="jdbc/xa/HibernateDS"ejb-location="jdbc/Hibernate"connection-driver="com.mysql.jdbc.Driver

"username="hibuser"password="password"url="jdbc:mysql://localhost:3306/hibernate"inactivity-timeout="30"/>}}

Verify that connection.username and connection.password params in $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/pentaho-res/hibernate/mysql5/hibernate.cfg.xml reflect the username and password for the database at jdbc:mysql://:3306/hibernate. By default, the values are "hibuser" and "password".

Copy the 3 jar files (dom4j, jaxen, mysql-connector-java), which were downloaded earlier, to $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/pentaho-third-party

Rename the file metadata_mysql5.xmi to metadata.xmi in $PENTAHO_INSTALL_DIR/pentaho-solutions/samples



Build Pentaho



To build Pentaho, you must have ant installed on the system. Ant can be downloaded from http://ant.apache.org/bindownload.cgi. It is also available in the Glassfish lib directory.

From $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a, run ant war-pentaho-







tomcat-mysql.

Make sure that you see "Build Successful" before continuing.

From $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a, run ant build-orion2.0.5-ear.

Make sure that you see "Build Successful" before continuing.

This command will create pentaho.ear in $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/build/pentaho-ears/orion.



Deploy Pentaho on Glassfish



Create JDBC Connection Pools and Resources associated with the database you have created. This can be done either through the Glassfish admin console or via asadmin at the command line.



For this scenario, pools and resources were created for the Sample Database only (i.e. quartz,hibernate, sampledataAdmin, and sampledata).

Run the command $GLASSFISH_HOME/bin/asadmin add-resources glassfish-pentaho-ds.xml.



The glassfish-pentaho-ds.xml used in this scenario is at the bottom of this page.

You should see that the add resources completed successfully.

For naming the resources jdbc/Quartz, jdbc/Hibernate, jdbc/SampleDataAdmin and jdbc/SampleData, the web.xml syntax from above was used.



To verify the connection pools, ping them using the command asadmin pingconnection-pool <connection-pool-name>.

Connection pool names can be retrieved from the glassfish-pentahods.xml file.



Deploy pentaho.war from Glassfish server console from ..>Applications..>Web Applications deployment window





Command-line deployment

Deploy via asadmin using the command asadmin deploy --user=<adminuser> <path to pentaho.war>



You can configure pentaho to run with a “Context Root” as pentaho



To verify, go to http://localhost:8080/pentaho/Home and try out Pentaho

Select one of the valid users in the drop in box and login



Notes:



The above deployment only allows for access to the Pentaho application from a browser that is local to the application server instance.

To enable remote client (browser) access to the application, locate the following parameter in $PENTAHO_INSTALL_DIR/pentaho_j2ee_deployments-1.6.0.GA.863-a/pentahowebapp/WEB-INF/web.xml

<param-name>base-url</param-name>

<param-value>http://localhost:8080/pentaho/</param-value>

and modify the base-url parameter vaue to the actual server name

<param-name>base-url</param-name>

<param-value>http://<servername>:8080/pentaho/</param-value>



Deployment of Style web applications:

Along with pentaho.war / pentaho.ear the following two web applications must be deployed in the same server where Pentaho is deployed

pentaho-style.war

sw-style.war

These two files are required to deploy pentaho and these two web applications provides look & feel for Pentaho web application.





Integration Scenario:

Make sure that you have the following files.

sun-iframe-portlet-5.0.0.1.war - You can download it from

http://sourceforge.net/project/showfiles.php?group_id=49260&package_id=243192&release_id=591109



    pentaho-style.war, pentaho-portal-layout.war, sw-style.war, pentaho-style.war from Pentaho deployment resources. You can see them deployed incase you deploy pentaho.war from “Pentaho\pentaho_j2ee_deployments\build\pentaho-ears” directory or if you have deployed pentaho.war then you can see these from “Pentaho\pentaho_j2ee_deployments\build\pentaho-wars”



Run glassfish instance which has Pentaho deployment and ensure that Pentaho runs on 8080 port like this http://localhost:8080/pentaho



Run glassfish instance which has liferay deployment and ensure that Liferay runs on someother port like this http://localhost:8888\ or if Liferay is also deployed on same server where Pentaho is running then http://localhost:8080 – that means as a default web-application.





Go to Liferay portal URL and log as per the instruction given by Liferay. Go to Liferay portlets welcome Menu option and click “Add Application”. You will see an Application docking window containing collection of portlets.

Under User_Portlets you can see all directly deployed portlets (.war) in the listing. You can drag / drop these portlets on the right hand side of the application window. These portlets should be uploaded into the same instance of glassfish where Liferay is running. If Pentaho is running remotely the only way to show Pentaho screens under liferay portlet window is through Iframeportlet.

 

To display any of the Pentaho xaction based Reports, all you need to do is to configure the iFramePortlet to contain the xaction URL within Liferay and Liferay is all set to display the pentaho xaction reports (html, pie, bar etc)



References

http://en.wikipedia.org/wiki/Liferay

http://wiki.pentaho.org/display/PentahoDoc/Pentaho+Glassfish+Deployment

http://wiki.liferay.com/index.php/Pentaho_Portlets

http://forums.pentaho.org/showthread.php?t=60469

https://jsfportletbridge.dev.java.net/public/Download.html

 

 

Wednesday Oct 03, 2007

SOA Governance & its importance


While most of the enterprises are mastering the art of SOA compliance, and some of the enterprises which are in early stages of adoption realizing the ROI and the way it is impacting their Business bottom line. Well its a positive direction in which enterprise business is growing by leveraging SOA Foundation principles, but to what degree of SOA Governance models are adopted in practice is still a question & its a key factor to measure successful SOA Transformation. Moreover the SOA Tools that these enterprises are using drives the SOA adoption for enterprises. In this blog I would like to discuss "SOA Governance & its importance" which I personally feel as neglected aspect of SOA in most enterprises. Also I would like to define some of the best practices of SOA Governance.


Defined -

Governance: Governance is an act of dealing, observing, controlling a System execution & evolution (with actors/people, process/procedures) by protecting long term strategies to achieve Goals.


SOA Governance – Its a software IT management practice in which various individual governing policies viz., “Architectural governance policies,, Service design, creation, life-cycle governance policies” can be defined and enforced and acts like crux of IT Governance to deliver a better IT management.


Why SOA governance is important

A proper SOA governance facilitates enterprises to create more re-usable business service components across various other individual business units. The major intricacy here is “creation of a software service which is usable across enterprise/organization”. Remember that in typical enterprise business each individual business unit can have several tens of applications running, and for these applications to work with newly created services is not straight forward unless the new Creation happens with certain standards, certain interoperable rules & regulations. The complexity here is not the existing applications which are deployed and making the business to run, but it lies in how new services are getting created and what are the standards that services are offering to be 100% interoperable & reusable.


Once a service is created and comes into existence the next biggest challenge is how to enforce that these services are not duplicated across business organizations. Considering the size of bigger enterprises and the way in which they communicate with each other – unless individual business units works with a governance body which takes care of defining standards, enforces policies for not promoting duplicate redundant services.


The need of SOA governance is limited at a creation level but it can be spanned at several other service management life cycle aspects viz,. Service registry, service delivery, service change management during deployment, service standards interoperability, service compliance at business level. It is highly required for enterprises to enforce governing policies around each and every aspect of service life cycle as mentioned above. The best way of enforcing is by comparing all incumbent services, existing services against a standards checklist at each phase of service life cycle management. Here is a snapshot of where SOA Governance can play a role


> Service Incubation: The process in which a functional requirement can be identified as a “Enterprise level business service” than at an application level service.

> Service Architecture & Design: Principles used to definite the architecture, design to ensure services will fit to run at an enterprise level to be in compliance.

> Service Publishing, Interoperability, Accessibility – The mechanism through which enterprise can publish services for readiness, technology choices to make them interoperable, provide rules of accessibility along with service delivery, security definitions.

Unless enterprises stipulates required regulations around above said areas it is very difficult to bring the predictability of service behavior to be managed at IT teams. An enterprise is successful on SOA foundation only when it creates and deploys more and more reusable software services with minimal requirements to customize, providing maximum benefit from the standards it supports, level of interoperability it offers and business compliances it achieves. Simply making a fragile SOA applications across business functional areas with technology integration compliance is not enough to get the maximum ROI from SOA, in order to get the maximum ROI from SOA enterprises imperatively adopt SOA Governance policies, SOA Govering solutions facilitating policy enforcement and management.



  Best Practices


  • Create SOA Governance dedicated team which can function as a subset of IT Policy management team.

  • Define Governing principles in enterprises SDLC policy, this is very useful for technology teams to understand the bigger expectations of services being developed and deployed.

  • Compose a service with emphasis on separating Operations/functionality of service with manageability,administration by providing Standards based meta-data about services.

  • Understand the need of having a specific function of business to be demarcated as SOA Level reusable service component accessible across other applications. Simply do not demarcate all functions as services just for the sake of it. Unless a business function is well qualified with justification one should not develop and manage functions as SOA services.

  •   Separate Governance policies for Development, Publishing and management of services. This will help to federate governing policies and enforce them with different teams responsible for service development, deployment and using.

Wednesday May 23, 2007

JBI ? SCA

With all respects to the Gurus of technology I would like to putforward my thoughts around "JBI & SCA". If any of my perceptions are wrong kindly send your valuable comments for my further learning....as you know Learning is a Never ending aspect for everyone.

I prefer to see JBI(Java Business Integration) & SCA(Service Component Architecture) as two complementary entities while building Service Oriented Business Integration. I define Service Oriented Business Integration as "Pragmatic Integration Architectural approach,to develop Collaborative, Standards oriented  Business Integration Solutions by leveraging SOA Principles, Applications, Computing Resources & Environments etc"
    
    Some of the industry technology analysts viewed JBI & SCA as competitive to each other, to a certain extent it is & it is not???  Fundamentally it is how you look into the usage. Some of the comments circled around JBI comparing against SCA are
   
   
    JBI falling out like another Hub-and-Spoke (HaS) environment: Truly not. One has to understand traditional HaS Model of EAI and the latest ESB architecture based on SOA Standards and Level of Abstraction it offers. Some how I feel who ever is comparing Traditional HaS models with Modern ESB is as good as comparing "Ape Man Vs Modern Man". Nothing varied much in appearance (hands, legs, head, heart) But lots of Modernization in behavioral aspects.
   
     Hub-and-Spoke(HaS) systems contains centralized hub that is responsible for connectivity, Message transitioning relating to requests/responses, coordination with spoked-in applications. Spoking to Hub from each application happens thru a Connector.
   
    Bus in the ESB - is a central unit which has abilities to keep Delivery channels to Congregation of Service Containers. Most of the latest ESBs provides distributed services infrastructures for development and deployment of services in any of the containers of the choice. ESBs also offers messaging, routing, and data transformation through XML.
   
    The key difference of traditional Bus based HaS integration systems Vs modern day ESB's are abilitty to support SOA mechanism

  •         Service Interface Design
  •         Service Composition / Composite Application Development
  •         Service Delivery
  •         Service Access
  •         Service Control
  •         Service Governance
  •         Service Standards
  •         Service Orchestration / Choreography
  •         Activity monitoring
  •         Deployment monitoring

Point-to-Point Vs Bus approach
     More over mostly an intelligent ESB manages Containers by providing a common place for all service containers to live & perform, making an ESB as a Container of Containers rather than a Congregation point of direct Applications to be managed. Another advantage of ESB all its operational management is truly distributed unless its older look-a-like HaS as Cenrally manageable.
   
    Any environment which provides all these in a well structured distributed environment is definitely a good choice to do Business Integration. With JSR-208 JBI and OpenESB Community all the above said are well taken care proving JBI as an irrefutable environment for Business Integration application development & deployment.
   
    In the same context Service Component Architecture (SCA) initiative brings most of the Architectural principles on how to develop Service Architectures and components. This initiative offers lots of specifications for Service development & implementation. SCA emphasizes the bifurcation of service implementation assembly from the intricacies of Service Runtime Infrastructures. This decoupling of Implementation and Assembly from Runtime environments gives a different perception to develop SOA services - and deployable across many Integration Environments. More over SCA highly encourages to decouple middlewear with Service components business logic development.
   
    But in my view SCA is not meant to replace any of the technologies like EJB, Webservices etc, the model offers a clean way of developing Service Interfaces using your choice of technology, and implementation of each individual component or a service using any of the technologies of our choice depending on the Problem scenario.  SCA also puts standards across how services are WIRED with other services. For wide varieties of data integrations SDO (Service Data Objects) offers the technology to show a Unique model of the data to the services business logic.
   
    With all this said - is SCA Not sounding like a Well Defined Architectural Practices guidelines for SOA Development? Yes it is. Given the fact that one follows SCA Standards at a Developer level - still we can leverage capabilities of JBI to a bigger context to deploy,manage, integrate SCA oriented services in Business Service Integration technologies like OpenESB.
   
      

  •     Coming to the OTHER CRY of industry that "JBI is a pure Java community View of Integration world" - So What! it is offering all the ideologies of an integration environment as mentioned above, and it is not enforcing anyone to write their fundamental/elemental business services only in Java. It is specifying a better way to hook the services to a JBI environment like OpenESB by providing SPI's (Service Provider Interfaces) - I don't think anything wrong in this methodology. If you see that JBI is forcing a service vendor or a developer to write their fundamental/elemental services as JBI, the perception is wrong! It is providing a way to integrate into a larger Integration environments. If this is the case I believe SCA & JBI/OpenESB are complementary to each other rather than competitors on any aspect.

   
      

  • One other issue pointed in general discussions are "JBI is enforcing a J2EE container" to live, like on GlassFish, Sun Application server etc. To a matter of fact every software of this complexity defintiely requires a CORE or a kernel to work- why not a a J2EE container can offer JBI services to the BIG integration challenges. How many are really having issues of hosting a J2EE container as a matter of fact in their big enterprise installation?  I may anticipate JBI to run on its own in the future to avoid J2EE dependency if acceptance and adoption of J2EE containers is a challenge for Business Enterprises.

Wednesday Mar 14, 2007

Is That All (SOA = Webservices?)


    During my recent SUN ISV meetings I faced one frequent question on WebServices & SOA.... Is Webservices = SOA or SOA = Webservices. My answers is an immediate NO, NO - followed up by non-stop few mins talk on the differences. Everytime I answered this question I have covered many different topics to delineate and contextify (dont laugh - you can't find this word in dictionary :-) ) "SOA & Webservices". I feel putting my ideas around this on my BLOG makes more sense for a wider distro when ever I require, and my answer starts like this ....
    
    The essential feature set of SOA is having a bigger context and bigger requirements than the feature set offered by Webservices. Lets quickly review what are those.


   

Most of these features can be achieved through distributed component architectures like Webservices, CORBA, COM/DCOM. Certain essentials of SOA like Governance & Standards, Architecture principles, Process & Practice are more to do with People participating in SOA maintenance and also Enterprise business process. Here Governance is a pure form of People's practice on incubating applications within an enterprise practicing SOA. With this said it looks like we can achieve most important features of SOA through Web-computing Distributed Component architectures like (Webservices, CORBA, DCOM), but the wide acceptance to Webservices happened because of its Open-Standards than CORBA, DCOM.

CORBA, DCOM are tightly coupled with the implementation program that is providing the service is directly associated with the program requesting the service.  This makes the SOA as a proprietary implementation but not OPEN.

Coming back to the topic whether or not SOA = Webservices. It can't be, as Webservices addresses few challenges to achieve SOA with a careful service composition. Standards based Interoperable Service components composition is very easy and highly valuable with Webservices standards but there is no SILVER BULLET ANSWER from Webservices to address Process orchestration, Process definitions, Service Control, Service Accessibility, Service Composition, Business Activity monitoring and Governance, Event Management etc. Webservices suitability in each and every aspect of SOA is a choice given based on requirement. If there is any other component or tool which fits to the context better than Webservices is definitely adoptable. For example a typical EAI Challenge of "High Volume Data Integration" within an Enterprise off-line process. Given this scenario using an ETL Tool (Extract, Transform, Load tool) than a custom built Webservice is a wise adoption.

 Conclusion - Taking all the Enterprise SOA Challenges if we need to put down suitable component architectures, there is a possibility that Webservice component architecture sits on top of all - but definitely not Everywhere. In a N-Tiered architecture SOA systems Elemental business services may or may not exist with Webservices, Once the Composite applications are built on top of Elemental Business services then the possibility of having Webservices in "Composite Tier" is very high for Webservices. Still depending on requirement elemental business services can be composed with EJB, COM, CORBA, etc component architectures.

 


Monday Mar 12, 2007

Shaping Future of the Web with "Web 2.0 & SOA"

 I am trying to put my thoughts around SOA & Web 2.0 where certain boundaries are not crispy yet, mixing them with decent boundaries requires lot of harnessing on complementary features. While SOA embrassing richer architectural principles emphasising on Interoperability, Federation & Discovery, Governance, Reusability of Services etc - Web 2.0 taking a shape as a de-facto standard to change web-based user experiences. As these two well accepted Concepts in the current IT era, I would like to put on my thoughts around how these two are aligned?
 
  Are they complementing each other on any key features?
  Are they addressing any common challenges?

Here is a diagram that can be extended a lot - I tried to capture most minimal things of commanalities and differences.


   
 I feel right usage of Web 2.0 standards and SOA is really matters and makes lifes easy to understand if and only if there is a compelling need to leverage on the comman features that "SoaWeb" can offer. Simply trying to put everything together may or maynot fit 100% well to anyones requirements. But certain definite features of AJAX user experience in SOA based enterprise systems will be of great value as it gives a great face lifting to the current days GUI strategies that are going with enterprise systems.

Friday Mar 09, 2007

Webservices Orchestration Vs Choreography

 


                                                 Orchestration Vs Choreography

While doing service composition in typical SOA-based applications using Webservices standards - Orchestration & Choreography comes into picture very commonly on most of the tutorials, articles etc. Whats the difference between these two words? in the context of Webservices usage in SOA?

 
Webservice's Orchestration -   Leveraging Webservices open-standards & collaborating different webservices functionality to compose an "Executable Business Process is called as Webservices Orchestration". It is easy to define Service Orchestration also in the same lines without using the Web-open-standards.  To tailor made the flow of webservices and to compose a service we need to tie-in all the different webserivces at a Message Level, meaning that at a raw exposed method level by defining the order of execution of the business logic exposed methods. Here Orchestration deals primarily with

 * Message Level business logic exection

* Order of business logic execution - that generally resides at exposed business methods of the webserivce participating in the whole orchestration of the service.

These webservices may or may not run in the same localized environment relating to one enterprise, in some cases these services may be running outside the enterprise network in some other enterprise business / Organization level.

Coming to some of the open standards -

WSDL - of a webservice describes  specific operations allowed on a webserivce component,

BPEL4WS(Business Process Execution Language for WebServices) is an XML based language which describes grammer, process flow of webserivces. BPEL works on top of WSDL on sequencing the operations defined in WSDL and facilitates to define a process flow. Once the Business Process is defined it can be exposed as a webservice again using WSDL. Also BPEL defines exception handling mechanism of operations, transactions on operations. Overall BPEL standard helps to define the webserivces message flow in the Business Process Orchestration.


Webservices Choreography - this typically deals with messaging between various stakeholders of a business process viz., Customers, Suppliers, Retailers, Partners etc. not like Orchstration responsibilities which mainly focuses on Webservices level message flow. Like BPEL(for Orchestration) works on top of WSDL, Choreography standards like WSCI(Webservices Choreography Interface) also works on WSDL but mainly focuses on the public interactions. WSCI also supports Transactions and Exception handling like BPEL. WSCI focuses more on public interaction with the webservices end-point (which is offering a service), and if the end-point uses more and other webservices interaction using private interfaces then BPEL can be used to define that.

 Conclusion - The business level collaboration can be easily found in Choreography / WSCI. The glitch here is BPEL4WS can also be used for external public interaction across all stakeholders, but BPEL4WS was never gained that promotion in the context. It is upto product vendors how they would like to shape their products based on these existing Open-Standards.
 


Thursday Mar 08, 2007

Will SOA Die?

                                                            Will SOA Die

              Its difficult to predict "Will or When is SOA going to die" instead, what makes SOA to die is a better way to arrive at When/How...   Year 2005 is considered to be a year of SOA getting into limelight, almost entire industry realized to take this as a momentum. Depending on Enterprise applications size, complexity, number of applications, number of integration challenges etc are to be considered to determine SOA effort estimation. To provide complete SOA to an enterprise it may take any number of man months/years. Buzz in the industry tells that bigger System Integrators even signed for a 10 year contract with enterprises to unify their applications under the umbrella of SOA.

            In the midst of the architectural concept acceptance to the industry, some product companies started building SOA Development tools mainly to ease Integration challenges( like - software gateways, webservices build tools, ESB etc) and Development Challenges(like - easy way of writing Webservices Description languages, Business Process languages BPEL, BPMN etc). These tools are assisting Integration developers to achieve SOA results in the most fastest way by reducing the custom programming time and cost, de-linking developer from certain low level intricacies of programming to the development platforms.  Considering the strategic acceptance, maturity of industry towards SOA I still feel this concept is just evolved out of Incubation Phase. Enterprises are really doing it now rather than doing Proof Of Concepts which are generally helpful to make a decision on incubating a new methodology or new software.

         Definitely during the current phase of implementation of SOA based systems enterprise IT teams will start realizing the pain points of doing SOA, and much better way of doing SOA, or even a different way of doing SOA. One such methodology which is gaining momentum is EDA - Event Driven Architecture. Is it next generation SOA or SOA Version 2.0? Probably Yes or no. But during this evolution phase definitely improvement areas will be much more visible based on the missing flavours in SOA - that lays out a foundation for New Generation of architectures like EDA etc. This transformation from SOA to some other architectural practice WILL CARRY ALL THE FLAVOURS OF SOA + Enhancements on architectural/development practices - with this I feel SOA will never die, it will be carried with greater momentum, better way of carrying the things. In such a world of IT scenario SOA still be alive in a larger context of doing software architecture..... Long live SOA.

Friday Dec 01, 2006

SOA & Java Composite Application Product Suite

Copyright (C) 2003, Sasikanth Tenneti