Sunday, December 9, 2007

Thursday, December 6, 2007

David Linthicum talks SOA

Just thought I would include some clips of David Linthicum talking SOA:







Thursday, November 1, 2007

SOA and Enterprise Architecture

I really liked Todd Biske's description of Service Oriented Architecture:

SOA doesn’t replace Enterprise Architecture, it’s simply one view of the enterprise. Today, one could argue that most organizations view the IT landscape as a collection of applications. Efforts like application rationalization or application portfolio management reinforce this notion. So, you could also say that today we have application oriented architectures. The unit of composition is the application. This isn’t flexible enough, as it is too coarsely defined. If we break these applications into smaller units, we now get to service oriented architecture, which I feel is a better way of describing things. Is it the only way? Certainly not.




Also, here are some links on the background of Enterprise Architecture that I think could offer some insight:

http://msdn2.microsoft.com/en-us/library/bb466232.aspx
http://www.enterprise-architecture.info/Images/Documents/Comparative_Survey_of_EA_Frameworks.pps
http://www.bptrends.com/publicationfiles/12-03 NL Enterprise Architectures.pdf
http://www.e-cio.org/lea_presentations/11_models_framework_files/frame.htm

Tuesday, October 30, 2007

Dynamically updating CSS Style attributes

Just having a little fun with CSS style attributes and came up with a demo page to demonstrate javascript dynamically changing the attributes of some text on the screen.

Click here to see.

The javascript/CSS that makes this happens is:

var DHTML = (document.getElementById || document.all || document.layers);

if (!DHTML) return;
var x = new getObj('divtext');

document.getElementById('divtext').innerHTML = text;
x.style.fontSize = fontsize;
x.style.color = color;
x.style.fontFamily = fontfamily;
x.style.fontStyle = fontstyle;
x.style.fontWeight = fontweight;
x.style.backgroundColor = backgroundcolor;

}

function getObj(name)
{
if (document.getElementById)
{
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
else if (document.all)
{
this.obj = document.all[name];
this.style = document.all[name].style;
}
else if (document.layers)
{
this.obj = document.layers[name];
this.style = document.layers[name];
}
}




A little break from SOA and EA Frameworks :-)

Sunday, October 28, 2007

Enterprise Architecture Definitions

As there are numerous definitions of SOA, there are also numerous definitions of Enterprise Architecture. Like with SOA, one may derive a definition of EA from reading between some of the definitions provided in many of the popular EA/SOA books


From these definitions, I get the idea that Enterprise Architecture is:

The current definition of an enterprise's business processes and the information technologies that aid in their execution. The Enterprise Architecture is a dynamic form of documentation which is subject to change in the short and long term due to changes in both business and technology. EA is a road map for the Enterprise concerning business process and technology to make IT a strategic asset.

Two of the main EA Frameworks I have looked at deal with it in different ways. The Zachman Framework seeks to classify the Enterprise by mapping Enterprise components into one of 36 classification squares. TOGAF presents an ADM(Architectural Development Cycle) which is an iterative cycle of how to define the Enterprise Architecture.


The definitions below are taken from my research in to SOA and Enterprise Architecture. I do not think it coincidence that so many of the SOA books mention Enterprise Architecture. They do complement one another. Maybe one could say that SOA is a style of architecture to help make Enterprise Architecture better. Or maybe Enterprise Architecture can tell the enterprise what to build with SOA. The two concepts are apparently strongly linked.

On Todd Biske's blog, he mentions a quote from David Linthicum on SOA and EA.

"Five years from now, we won’t be talking about SOA… It will all be folded back into EA." - David Linthicum


Enterprise Architecture Definitions:

“The enterprise architecture is the organizing logic for business processes and IT infrastructure, reflecting the integration and standardization requirements for the company’s operating model. The enterprise architecture provides a long-term view of a company’s processes, systems, and technologies so that individual projects can build capabilities – not just fulfill immediate needs”1

“In simple terms, an Enterprise architecture identifies the main components of the organization and the ways in which these components work together in order to deliver the product and achieve the business objectives at the same time”.2


“You must recognize that the enterprise architecture is not static – it is constantly changing as business needs vary and technologies evolve. The task of the enterprise architecture group is to guide this evolution. To do so requires that the group keep one eye looking toward the future and the other focused on the realities of the present, while continually striving to draw the two together. Managing this evolution requires understanding the current state, articulating a vision for the future, and defining a roadmap for getting from here to there”3


“Enterprise Architecture is basically a discipline of IT architecture where we are concerned with IT in the context of the company as a whole – both IT and business”4

“An architecture description is a formal description of an information system, organized in a way that supports reasoning about the structural properties of the system. It defines the components or building blocks that make up the overall information system, and provides a plan from which products can be procured, and systems developed, that will work together to implement the overall system. It thus enables you to manage your overall IT investment in a way that meets the needs of your business.”5

“An enterprise architecture specification is to an organization what an urban plan is to a city. Therefore, the relationship between an urban plan and the blueprint of a building are comparable to that of enterprise and application architecture specifications.” 6


References:
1.Ross, Weill, Robertson,”Enterprise Architecture As Strategy”, 2006, p. 9
2.Grigoriu, “An Enterprise Architecture Development Framework”, 2006, p.22
3.Brown, “Succeeding with SOA”, 2007, p 115-116
4.Bloomberg,Schmelzer, “Service Orient or Be Doomed!”, p.121
5.The Open Group, TOGAF The Open Group Architecture Framework 2006 Edition
6.Thomas Erl,”Service-Oriented Architecture(Concepts, Technology, and Design)”, 2006, p. 87

My Definition of SOA and others

I have been reading on SOA for just over a year now and am feeling more comfortable with it. I know that SOA is not the same thing as web services although web services is probably the most commonly used technology, although SOA has been implemented in other technologies including CORBA.

My first crack at the definition of Service Oriented Architecture:

An SOA is an architecture consisting of reusable interoperable services to help make the enterprise more agile(reducing time to market) and efficient(increasing component reuse). Services should be discoverable, composable, provide an SLA and adequate security. An SOA is aided greatly by the use of an Enterprise Service Bus(ESB). The ESB acts as an intermediary between the service consumer and service provider. The ESB allows the service consumer and service provider to interact without knowing the location of the other, essentially avoiding any point to point integration problems.

I welcome other viewpoints on the definition of SOA, please comment if you have other ideas or agree more with one of the defintions listed below. Although, I think there is no true correct definition.

Antony Kimber has a posting on the definition of SOA as well at http://soaevolution.blogspot.com/2007/09/definitive-soa.html.

My eventual goal is to look at the benefits of Enterprise Architecture Frameworks in implementing an SOA. In particular, TOGAF and the Zachman Framework.


The following is a list of 9 SOA definitions from recent popular books on the subject or vendor websites:

“SOA is a form of technology architecture that adheres to the principles of service-orientation. When realized through the Web services technology platform, SOA establishes the potential to support and promote these principles throughout the business process and automation domains of an enterprise.” 1

“With an enterprise architecture grounded in Service Orientation, we’re looking for a broad set of rules and practices that govern the design and evolution of organizations that leverage business resources as Services. We call that set of rules and practices Service-Oriented Architecture”2

“SOA is a conceptual business architecture where business functionality, or application logic, is made available to SOA users, or consumers, as shared, reusable services on an IT network. “Services” in an SOA are modules of business or application functionality with exposed interfaces, and are invoked by messages.”3

“SOA is neither a technology nor a technology standard, but instead it represents a technology-independent, high-level concept that provides architectural blueprints, such as the ones outlined in the first part of this book. These architectural blueprints are focusing on the slicing, dicing, and composition of the enterprise application layer in a way that the components that are created and exposed as services in the SOA are not only technically independent but also have a direct relationship to business functionality”4

“SOA is supposed to provide clean, well-defined interfaces between business entitites – between service providers and service consumers”5

“Service-Oriented Architecture (SOA) is an architectural style that supports service orientation. Service orientation is a way of thinking in terms of services and service-based development and the outcomes of services.”6

“Service Oriented Architecture (SOA) is an architectural design pattern that concerns itself with defining loosely-coupled relationships between producers and consumers.
.. There is no widely agreed upon definition of SOA other than its literal translation. It is an architecture that relies on service-orientation as its fundamental design principle. In an SOA environment independent services can be accessed without knowledge of their underlying platform implementation. These concepts can be applied to business, software and other types of producer/consumer systems.
”7

“Service orientation is a means for integrating across diverse systems. Each IT resource, whether an application, system, or trading partner, can be accessed as a service.”8

“Service Oriented Architecture (SOA) is a business-centric IT architectural approach that supports integrating your business as linked, repeatable business tasks, or services. SOA helps users build composite applications, which are applications that draw upon functionality from multiple sources within and beyond the enterprise to support horizontal business processes.”9

References:

1. Thomas Erl,”Service-Oriented Architecture(Concepts, Technology, and Design)”, 2006, p. 55
2. Bloomberg, Schmelzer, “ Service Orient or Be Doomed”, 2006, p.126
3. Marks, Bell, “Service-Oriented Architecture – A Planning and Implementation Guide for Business and Technology”, 2006, p.1
4. Krafzig, Banke, Slama “Enterprise SOA – Service Oriented Architecture Best Practices”, 2005, p. 8
5. Brown, “Succeeding with SOA”, 2007, p xxii
6.https://www.opengroup.org/projects/soa/ ,Retrieved October 28, 2007
7.http://en.wikipedia.org/wiki/Service-oriented_architecture, retrieved October 28, 2007
8.http://www.microsoft.com/biztalk/solutions/soa/overview.mspx#EFBRetrieved October 28, 2007
9.http://www-306.ibm.com/software/solutions/soa/ Retrieved October 28, 2007

Wednesday, October 24, 2007

Enterprise Architecture As Strategy




Seeking further knowledge in Enterprise Architecture led me to read "Enterprise Architecture As Strategy" by Jeanne W. Ross, Peter Weill, and David C. Robertson. It seems that just as with SOA, EA lacks consistent definitions but this book provided some interesting business examples of how EA really can help your organizations.

They define enterprise architecture as "the organizing logic for core business processes and IT infrastructure reflecting the standardization and integration of a company's operating model". This boils down to 2 concepts: business process integration and business process standardization.

There are 4 types of operating models defined in regards to classifying companies:

1. Diversification (low standardization, low integration)
2. Coordination (low standardization, high integration)
3. Replication (high standardization, low integration)
4. Unification (high standardization, high integration)

The operating model represents a general vision of how a company will enable and execute strategies. Focusing on the operating model rather than on individual business strategies gives a company better guidance for developing IT and business process capabilities.


There are some real interesting case studies on how some successful companies like Seven Eleven Japan, CEMEX and UPS truly exploited their IT infrastructure to succeed in the marketplace. It is all about digitizing the core business processes.

Four stages of architecture maturity are defined:
1. Business Silos architecture - maximize individual business unit needs
2. Standardized Technology architecture - providing IT efficiencies through technology standardization and, in most cases, increased centralization of technology management
3. Optimized Core architecture - company wide data and process standardization to company model
4. Business Modularity architecture - manage and reuse loosely coupled IT-enabled business process components to preserve global standards while enabling local differences

Four strategic outcomes from enterprise architecture

1. Better operational excellence - low-cost, reliable and predictable operations
2. More customer intimacy - extraordinary customer service, responsiveness based on deep customer knowledge
3. Greater product leadership - first to market with innovative products and services
4. More strategic agility - respond rapidly to competitor initiatives and new market opportunities

They also mention to build the foundation one project at a time which must meet the short-term business goals and at the same time implementing or at least not undermining the company's architecture. (This was a point in Brown's "Succeeding with SOA") The goal is to have the enterprise architecture as a compass, directing the company toward its intended operating model. The IT Architecture should be viewed as an asset and not a cost.

Sunday, October 14, 2007

Succeeding with SOA



I just finished reading Paul C. Brown's "Succeeding with SOA - Realizing Business Value Through Total Architecture". The book describes how to approach SOA from the business side focusing on value and organization rather than technology.

He outlines 4 keys to staying on track with the total architecture approach to SOA:
1. justify each project on its own business merits
2. have an explicit architecture step in every SOA project that precedes the actual development work
3. have an active SOA architecture group
4. have a living SOA project roadmap

I liked the idea that every SOA project must have it's own definite business merits as to continually supporting the SOA movement. The positioning of the Architecture group among the business silos in an effective way is discussed.

As far as SOA Project Leadership goes, there are 3 critical project leadership roles.

1. Project Manager - responsible for ensuring that the combined business process and systems changes actually generate the project's expected business benefits within the cost and schedule guidelines

2. Business Process Architect - determines the structure and organization of the overall business process

3. Systems Architect - determines the structure and organization of the information systems supporting the business processes


Brown really emphasizes the architecture of business processes along with system architecture. This really makes sense as SOA is about mapping services of the enterprise.

The Total Architecture Synthesis(TAS) is an approach to developing business processes and systems together. "When compared with the classic waterfall-style development, this approach significantly reduces project cost, time, and risk. When compared with agile programming, this approach validates architecture suitability before committing to implementation" This process leverages the use of standard UML(Unified Modeling Language) design notations to capture the design of both business processes and systems. The use of UML is a good idea, as I feel that having a well known tool for capturing information is desirable.

All in all, a common sense book and I look forward to the forthcoming book, "SOA in Practice". This accompanying book will be more aimed at SOA Architects, rather than the focus on Enterprise leadership of this book.

Sunday, October 7, 2007

Enterprise Architecture and SOA

I am trying to scour for articles on Enterprise Architecture and SOA. Here is an article explaining how the relationship between EA & SOA.

The April 2007 edition on the IASA's Perspectives of the IASA "Special Issue: Enterprise Architecture - A 20 Year Retrospective"

"Enterprise Architecture and SOA: A Partnership" by Dr. Yan Zhao

There is also an interview with John Zachman, creator of the Zachman Framework.

The link to this article here

Please let me know of your opinions on EA framworks and their application to an SOA implementation. I am trying to focus more on the Zachman and TOGAF EA frameworks.

Thursday, October 4, 2007

Zachman Framework Parts 5 & 6 - The Metaframeworks and Conclusion



I have finally finished reading the Zachman Framework eBook and it is interesting and will take some more time to absorb!

Part 5 – The Metaframework

Chapter 12 - Introduction

Some people may be tempted to skip Part5: Meta and the Framework because it is discussing meta concepts and at the very mention of the word meta some people begin to get dizzy.

The model of any one Cell (the Cell metamodel) would depict the internal structure of all the occurrences of the one columnar variable from the perspective (audience) for which the model was constructed. The basic, simple meta entities for each Cell appear in the Framework graphic at the bottom of each Cell. For example, in Column 1, Row 2.

A number of standards groups are attempting to define standard metamodels for a number of the Cells, predominantly in Row 5 (whether they are aware that they are defining standard metamodels for Row 5 of the Zachman Framework, including the OMG, the MDC, the OSI, etc, etc.

Actually, I am not too embarrassed to admit that we do not have a standard metamodel of all the Cells in 2002. At least we have a pretty good understanding of what each Row is describing and what each Column is describing and therefore, what the essential contents are for each Cell. That may be all that is needed to get started.

But GOOD NIGHT!! This is the most complex engineering and manufacturing problem known to mankind, ENTERPRISE Engineering and Manufacturing, and this Enterprise Engineering and Manufacturing discipline is only about 50 years old!!

All repositories and some modeling tools have extensible metamodels, that is, they make it easy to extend their database design (or, change their semantic structures, that is, change the meaning of the metadata) to accommodate a specific metamodel for a specific Information Systems Enterprise.

Chapter 13 – Metaframeworks

The Enterprise Engineering and Manufacturing Framework models at Row 2 are meta relative to the Enterprise Framework.

This is exactly the same relationship that the Enterprise Framework has with its Product Framework. Every product has a set of models (a Framework) that are descriptive of the product. That’s where I learned about the Framework to begin with… I was looking at the descriptive representations (design artifacts) for airplanes, buildings, locomotives, computers, automobiles … complex engineering products.

CAUTION: Services of the Enterprise are different from Products in that Service does not exist independently of the Enterprise itself. Services, if they are sufficiently complex, may be considered to have a Framework of their own to help define and specify them, but if this is helpful, the Service Framework must be merged into (that is, integrated with) the Enterprise Framework or you will end up with a dis-integrated, Service stovepipe or a frustrating legacy of Services just like we have a frustrating legacy of applications today.

Chapter 14 – Knowledge Domains
In the discussion of metaframeworks, I have described three domains of knowledge that are increasingly critical to the on-going management of a modern, Information Age Enterprise:
1. Knowledge of the Product of the Enterprise,
2. Knowledge of the Enterprise itself and
3. Knowledge of the Enterprise (i.e. Information Systems et al) that is engineering and manufacturing THE Enterprise (EE&M)


Chapter 15 – Multiple Frameworks in the Same Enterprise
.. you could apply the Framework logic to every single business unit on a stand-alone basis. Enterprise-wide would mena Business Unit-wide and the analysis would likely be more manageable. The Business Unit Frameworks could potentially be integrated into one bigger Enterprise Framework. It is only a matter of how you graphically want to depict them.

You don’t get integration by accident. If you WANT integration, then you have to ENGINEER for integration. That means that you will have to DICTATE to the Business Units that you want such and such slivers of such and such Cells of their Frameworks to all be THE SAME.

In the Information Age, there is significant management advantage to knowing, having coherent visibility into the Enterprise and its environment. Change(maneuverability) is the dominant strategy option. The Enterprise that is optimized, knows sooner and can destabilize the market is the one that wins the game. These are the bnefits of integration. This is the reason why the definition of Enterprise is important to management.

The Framework is inert. It does not know what you are using it to think about. Only the analyst, or engineer determines what the analytical target is. It can be used to classify the descriptive representations of anything.

All of these characteristics of the Framework make it a good thinking tool … a thinking tool that will help thinking about a very complex subject like an Enterprise. Once we establish an analytical target, we can think about one thing (one Cell) at a time without losing sense of its Enterprise (Row and Column ) context. We can isolate a single variable and think about that Cell without getting mired down in the myriad of issues going on in the other 35 Cells. At the same time, we can maintain an awareness of thither related, peer, meta or granular Frameworks. We can think about slivers of Cells, vertical or horizontal slivers, and see the short term and long term implications of implementation strategies.

Part 6 – In Conclusion


Chapter 16 – Cheaper and Faster

How do you cost-justify Architecture?
The obvious answer to the question is, you can’t cost-justify Architecture because cost-justification is an expense-based concept and Architecture is not an expense. Architecture is an ASSET.

An example is given from one of the eastern states in the early 90’s

-The cost per new entity type/RDBMS table was reduced from something greater than $150,000 per table to something less than $10,000 per table (That’s a 15 times improvement … not too shabby.)
- Enterprise data handling labor reduced by 50%
- Reduced development time of 25% through improved communication and conflict resolutions
- Development time and cost reductions for every succeeding implementation of 50% compounded through reuse of database and application components with no modifications.(Actually, the exact quote was, every time we reuse something we get 100% return on our investment.)
- Reduced disk space for data(including history) of 20% - %80 through elimination of redundancy

A better way to ask the question how do you cost-justify architecture? Would be, where do you get the up-front money to do Enterprise Architecture?
Answer: You don’t need up-front money!!! Just go get the money they are already spending or about to spend and instead of dribbling it away writing code and implementing, use it judiciously and do some engineering(Architecture) first, before you start manufacturing(implementing).

Wednesday, October 3, 2007

Zachman Framework Part 4 - Frustration, Segmentation, and Migration

Here is more summary notes from the Zachman eBook. It is pretty interesting.

Chapter 9 – Frustration

In fact, it is a miracle that anything got implemented that had anything to do with what the Owners had in mind when we never defined what they had in mind in the first place. In contrast, the Row 6 implementations are locked in concrete.

The solution to this problem is to begin to see that the models are not simply a convenience for helping to build the systems. No! They are the equivalent to the Product Definition of a complex product, for example, they are like the drawings, functional specs, bills-of-material, etc., etc. for an airplane.

Summarization Column by Column the issue and degree of frustration:

Column 1: Things (the date being surrogates for the Things) – if you have redundancies and discontinuities in the data, you have a Tower of Babel problem. You are unable to communicate effectively or take inventories and analyze the asset consumption and utilization an you will lose control of the business.

Column2. Process – the same process is replicated and not being performed consistently. This is not very efficient but it won’t bring the Enterprise to a screeching halt.

Column 3 – Location – the distribution of the Enterprise as manifest in the hardware/systems software. You could have every kind of hardware/systems software known to mankind. The stability of the network deteriorates and the cost of keeping the network up 24x7 is running somewhere around 50% of the Information Systems budget.

Column 4 – People – the work flow is disintegrated… every user has a plethora of screens customized for every different application they use. This is not very efficient but it won’t bring you to a screeching halt.

Column 5 – Time – there is no coherence in the dynamic aspects of the Enterprise. I know little about this column of models but the more I understand about Industrial Dynamics, the more I suspect this is having a substantial although unrecognized impact on the Enterprise

Column 6 – Motivation – it is from here that the business rules are derived and if the same business rule is imbedded inconsistently or incoherently in multiple system, management is going to be really frustrated.


There are 3 columns of models that will cause substantial management frustration if there are inconsistencies or incoherencies across the scope of the Enterprise. They are Column 1 (the Thing Column as it is manifest in the data), Column 3(the Location Column as it is manifest in the hardware/system software) and Column 6 ( the Motivation Column as it is manifest in the business rules).


The Key is Column 1. If you can figure out how to build out Column 1 , the Thing Column, sliver by sliver, everything else will fall into place for you.

Chapter 10 – Segmentation


Promoting to Enterprise-wide Quality – Some of the Entities in the Enterprise-wide Data Model they left at only “project quality.” That is, they didn’t make any effort to acquire any agreement by any other users as to their structure..

Chapter 11 – Migration
You could build out of the Semantic Model (Column1, Row2) to 200-300 Entities, run the where used application, define the build sequence based on data dependency, pick up some slivers to flesh out in detail, transform the high level of detail Semantic Model(Row 2) to a high level of detail Logical Data Model (Row3) and build out the Logical Data Model(Row3) sliver by sliver at excruciating level of detail in dependency sequence.

Before the Enterprise would be able to perceive any practical value from the Data Model, you would have to transform it to Data Design(Row4), transform that to Data Definition(Row 5) and create the resultant database (Row 6).

Data Warehouse

If you can populate the Architected database with data from the legacy files that has consistent meaning and good quality, you can make a lot of management folks very happy reasonably quickly. The data will look integrated to them.

The Genius of Data Warehouse

- You move the output processing into an architected environment without having to rebuild all of the input processing systems…give management access to integrated appearing data with a limited amount of work, which likely makes them VERY happy(for a change)
- You set up a 3 schema environment and reduce the change liability from a geometric function(m x n) to an arithmetic function(m+n)

Technology Architecture

The same basic concept could be used for migrating out of the legacy Technology environment that is, define the to be, normalized, standard hardware and systems software Column 3, Row 4 Technology Architecture. Then rebuild the applications one at a time, moving them from the legacy environment to the Architected environment. In this fashion, you could leverage the value of the legacy up until you shift the dependency, system by system, to the new environment. This gives you time to stabilize each conversion before embarking of the next.


Process, Work Flow, Business Rules and Dynamics Architectures

Once you begin the migration to the architected environment and begin to diffuse some of the Enterprise’s frustrations relative to the Legacy in Column 1 (Data), Column 3(Technology) and Column 6(Business Rules), it will buy you some time to examine the Enterprise Processes(Column 2) and Work Flow(Column 4) with regard to possible normalization. This would provide marked improvements in efficiency and establish a baseline for facilitating process and work flow change.

In Summary on Part 4 Frustrations

The pain level in if not most Enterprises has become increasingly intense as we continue into the Information Age, and I have suggested that the cause of the pain lies in our historical lack of understanding and employment of architectural concepts in our Enterprises, particularly in Column 1, and Column 3, and Column 6.


Review of Zachman Framework Parts 2 & 3


I have been trying to quickly absorb the Zachman Framework and the following are excerpts from the Zachman eBook.

Chapter 4 – Observations in Physics


The implications of having no Architecture are that once the assumptions start to change, it is extremely difficult, extremely time consuming to attempt to reverse engineer the assumptions (the Enterprise models) out of the existing systems, change them and reconstruct new implementations.

All those models identified by the Framework are always present. It is only a matter of whether you make them explicit or not.

The System is the Enterprise

Vertical Slivers
It is okay to build slivers of Cells, but if you want the slivers to be integrated (reusable, normalized, seamless, interchangeable, interoperable, etc., etc) you have to do something over and above just building a bunch of slivers.
Columns 1(the Data Column) ,3 (the Network Column), and 6(the Motivation Column) are the three columns that the Enterprise finds critical for scope(Enterprise-wide) integration.

In Summary of Enterprise Physics

First, all the models are always present. It’s only a matter of whether you make them explicit or not. If you don’t make them explicit, they are implicit which means you are making assumptions about them.

Second, the system is the Enterprise. Manual systems employ pencils, paper and file cabinets. Automated systems employ stored programming devices and electronic media.

Third, high level of detail descriptions (models) are good for planning, scoping, bounding, segmenting, etc. (High level descriptions are no good for implementation)

Fourth, narrow in scope descriptions (slivers of models) are quick. (Narrow in scope descriptions result in stovepipes)

Note: if you start thinking your Enterprise is exempt from these physical principles, I assure you, you are vulnerable to experiencing pain.

Chapter 5 – End State Vision

Change with minimum time, disruption and cost is dependent upon Architecture.
If you have no Architecture, there is NO WAY you are going to change anything with minimum time, distuption and cost.

The Methodology Message
- Build Models
- Store Models
- Manage (Enforce) Models
- Change Models

I am suggesting that the norm has to become the models and the exception has to be you start writing the code.

First, I am NOT saying, forget about short-term demand!
I am NOT saying: Never take the short-term option! Sometimes, because of the business exigencies, you are going to have to go directly to you start writing code…! There is nothing the matter with short-term options… as long as you recognize they are short-term options.

It should be an Enterprise decision whether to take the short-term option or the long-term option, not an information systems(or, technical) decision.


Part 3 – End State Vision
Chapter 6 – Introduction to Engineering Design Objectives

Design objectives include flexibility, adaptability, alignment, and quality
These only come by engineering… Enterprise Engineering

Reducing Time-to-Market

Make-to-Order
Shifting to an assemble-to-order environment. That is, the culture of the assemble-to-order (mass customization) environment is diametrically opposed to he make-to-order (job shop) environment.

The only way you are going to be able to reduce time-to-market to virtually zero is to Engineer and pre-fabricate the parts in the inventory such that they can be assembled into more than one product, that is, be reused in more than one implementation.
By the way, if you DO NOT have something in inventory before you get the order, you ARE a job shop, that is, in information systems terms, a waterfall.

Any Cell (primitive model) of the Framework is a candidate for engineering for reusability.

Chapter 7 – Additional Engineering Design Objectives

If you REALLY want the implemented Enterprise to align with what the Owners have in mind, you ARE going to take a top, down approach for building it out.

In summary on flexibility, change with minimum time, disruption and cost, there are several basic ideas:
-Separate the independent variables so you can change one variable
-Insert a conceptual schema (intersection) between many-to-many variables to reduce change liability from geometric to arithmetic
- Work with normalized, primitive models so you can change any concept once and it is changed for every employment
- Retain all primitive models to serve as a baseline for managing change (Someday, you are going to wish you had all those models… because I am equally convinced that the primitive models constitute the engineering basics!)

Chapter 8 – The Value Proposition for Architecture


Enterprise Architecture is an asset, not an expense. Architecture is a long term strategy. The basic idea is, you do the engineering before you start manufacturing in order to eliminate, minimize, or at least reduce the scrap and rework costs. You are investing in an inventory of assets that can be used(reused) in more than one implementation.

4 things you are unable to do in the Enterprise unless you invest in Architecture, an inventory of primitives engineered for reuse
- Alignment(quality). To ensure that the Enterprise implementations are consistent with the Owner’s intentions
- Integration(seamlessness, interoperability, standard interchangeable parts). To eliminate redundancy, duplication, discontinuity, incoherence, etc.
- Change (flexibility, adaptability). To change the Enterprise with minimum time, disruption and cost.
- Reduced time-to-market. Architecture coupled with an assemble-to-order strategy to reduce the time it takes to produce implementations to only the time it takes to assemble.


Part 2 – Analyzing the Enterprise

Monday, October 1, 2007

Good to Great

Good to Great

I recently borrowed this book off of one of the executives at work. I am hoping this is the one of the few reads I will do unrelated to my Thesis until it is done. I would like to summarize some of the important points to help reinforce what I read.

Basically, Jim Collins studied numerous companies and tried to distill what 11 companies out of thousands did right which lead to their exceptional growth and value creation.

Level 5 Leaders - Builds enduring greatness through a paradoxical blen of personal humility and professional will.
I liked the comment about the window and the mirror. Look through the window when there is credit to be given and the mirror when blame is to be assigned.

The HedgeHog Concept - Do the simple things and do them well. Take the three circles (What you are deeply passionate about, What you can be the best in the world at, and What drives your economic engine) and your strategy should be within the intersection of these circles.


The Flywheel - Things do not happen in one fell swoop or some rah -rah session. It is a sustainable drive, like pushing on a giant, heavy flywheel, it takes a lot of effort to get the thing moving at all, but with persistent pushing in a consistent direction over a long period of time. (Sam Walton took 7 years before he opened his second store! from which came over 3000 stores and over $150 billion in revenues in 2000).

Read the book for more in depth, but I saw a documentary on it and its application to the public sector as well.

Sunday, September 30, 2007

Introduction to Zachman Framework

Zachman Framework

Well I have everything lined up for my Master's Thesis at the Athabasca University. I am looking at how to apply Enterprise Architecture Frameworks towards an SOA. I have received Zachman's eBook and have read the first 3 chapters. I must admit I am not a big fan of reading at the computer but that is what what I have to do with this.

Chapter 1. Introduction

The Zachman Framework is represented by a 6x6 grid of different cells. The 6 rows are:

Principal Perspectives:

Owner's perspective - the recipient of the end product
Designer's perspective - the engineer/architect between the what is desirable (Row 2) and what is physically possible(Row 4)
Builder's perspective- the one(engineer) who has the technical capacity for producing the end product
Scope Perspective - context that estabishes the universe of discourse, inner and outer limits
Out-of-Context Perspective - detailed description that disassociates the parts of the complex object for manufacturing process
Row 6 represents the physical manifestation of the end product itself, not Architecture

Abstractions of the Framework:
What - what it is made of, material composition of the object
How - it works, the functional specification, the transformations
Where - the components are located relative to one another
Who - does what work
When - do things happen relative to one another - life cycles, timing diagrams
Why - do things happen


Chapter 2 - Three Definitions of Integration

Scope Integration - continuity across the scope of the Enterprise within any or every Cell.

Horizontal Integration - continuity between the different types of models across any or every Row

Vertical Integration - continutity of intent from Cell to Cell down any or every column

Chapter 3 - Rules of the Framework

Rule 1: Do Not Add Rows or Columns to the Framework
Rule 2: Each Column Has a Simple Generic Model
Rule 3: Each Cell Model Specializes Its Column's Generic Model
Rule 3 Corollary: Level of Detail Is a Function of a Cell, Not a Column
Rule 4: No Meta Concept Can Be Classified Into More than One Cell
Rule 5: Do not Create Diagonal Relationships Between Cells
Rule 6: Do Not Change the Names of the Rows or Columns
Rule 7: The Logic is Generic, Recursive

Saturday, September 29, 2007

Greg the Architect

Thanks to Anthony Kimber's blog for pointing out Greg the Architect!

These videos are probably closer to the truth than most of the vendor speak/buzzword on SOA out there!







Tuesday, September 25, 2007

SOA - Principles of Service Design



Just finished Thomas Erl's new SOA book "SOA - Principles of Service Design". Again, it is a quality book, giving real information on SOA and implementation details without the fluff. It is certainly a technical book with very good diagrams and explanations.

There is quite an impressive array of reviews for the book from industry specialists from Google, Oracle, Microsoft, and so on. This book can stand on its own or it can be paired with his "SOA Design Patterns" book. Some patterns are referenced but not the complete set in the Design Pattern book.

There are 3 parts to "SOA - Principles of Service Design": Fundamentals, Design Principles and a Supplemental section.

Firstly, the Fundamental section reviews SOA, Benefits and sets the stage for the Design Principles. "A principle is a generalized, accepted industry practic. In other works, it something others are doing or promoting in association with a common objective..." From the principles, come design patterns.

The second section covers the Design Principles themselves, of which 8 are given:

1. Service Contracts (Standardization and Design)
2. Service Coupling (Intra-Service and Consumer Dependencies)
3. Service Abstraction (Information Hiding and Meta Abstraction Types)
4. Service Reusability (Commercial and Agnostic Design)
5. Service Autonomy (Processing Boundaries and Control)
6. Service Statelessness (State Management Deferral and Stateless Design)
7. Service Discoverability (Interpretability and Communication)
8. Service Composability (Composition Member Design and Complex Composition)

Each principle is profiled and explained. Each provides guidance in shaping your SOA. They work together but there are examples where they conflict and choices must be made. A design paradigm is a composition of the design principles. From the design principles, there are design patterns. So basically, a design paradigm (SOA), is comprised of design principles, which is then made up of the design patterns.

Each design principle is summarized in a Principle Profile, which contains a short definition, long definition, goals, design characteristics, implementation requirements, web service region of influence.

The last section, Supplemental, covers a comparison between SOA and OO, Supporting Practices, and Mapping Service-Orientation Principles to Strategic Goals.

I have to say that reading Erl's books enlighten in a common-sense technical way. He is my favorite SOA author.

Monday, September 3, 2007

Getting started with JSF 1.2 & Tomcat 6

I wanted to start dabbling with JSF and the latest JDK and Tomcat versions. I have an idea for a website that I want to create. To gain skills and knowledge in JSF seems valuable to me.

I had seen that myfaces 1.2 came out and tried to get it working but ran into some JSTL tag issues. Roseindia.net gives a tutorial on how to get Tomcat 6 and jsf 1.2 running together.

Basic downloads to get started
Java JDK 1.6 http://java.sun.com/javase/downloads/index.jsp
Eclipse http://www.eclipse.org
Tomcat 6 http://tomcat.apache.org/download-60.cgi
Sysdeo Pluginhttp://www.eclipsetotale.com/tomcatPlugin.html
This plugin allows you to start and stop tomcat from within Eclipse which is a feature I like.

Proof that you can run jsf 1.2 on Tomcat 6
http://www.roseindia.net/jsf/jsf1.2/jsf-1.2-tomcat-6.shtml



An excellent book that I am starting to go through the examples
is Core JavaServer Faces by Geary & Horstmann.

I successfully got the first example to run properly, something that I was
not able to do with the latest myfaces 1.2 and Tomcat 6.

Example code from the book can be found at
www.corejsf.com


Earlier this year, I built a website using myfaces 1.1 and Tomcat 5. That was nice but jsf 1.2 is the more current version and I want to migrate towards that.

Now that I have it set up, I can start working in JSF 1.2 and all that it
offers.

I did try and set up the Chapter 8 Tiles examples from corejsf.com and ran into some JSTL tag issues.

The following link helped resolve that
http://groups.google.com/group/javaee5/web/setup-enironment-tomcat-6-jsf-1-2-jstl-1-2

Wednesday, August 15, 2007

JSF MyFaces 1.2 Available for Download!

Finally!!!

I have been waiting for the final MyFaces Core 1.2.0 Release for download.

Go to http://myfaces.apache.org/download.html

If you want a JSF 1.2 compliant version that runs on Tomcat this is now possible!

Known to work with the following environments:

1. Java
1. JDK 1.4.x
2. JDK 1.5.x
2. Servlet Container
1. Tomcat 4.x
2. Tomcat 5.x
3. JRun 4 (SP1a)
4. JBoss 3.2.x
5. JBoss 4.0.x
6. BEA Weblogic 8.1
7. Jonas 3.3.6 w/ Tomcat
8. Resin 2.1.x
9. Jetty 4.2.x
10. Jetty 5.1.x
11. Websphere 5.1.2
12. OC4J
3. Custom JSF components
1. ADF Faces of Oracle

Wednesday, July 25, 2007

Getting Java Date in another Timezone

Getting the date in another timezone is not quite as evident. But I did whip up a method to return the Date object if you provide your local Date and the timeZone id of where you want to find out what time it is there.

import java.util.*;

public class Timezone {

public static Date getDateInTimeZone(Date currentDate, String timeZoneId)
{
TimeZone tz = TimeZone.getTimeZone(timeZoneId);
Calendar mbCal = new GregorianCalendar(TimeZone.getTimeZone(timeZoneId));
mbCal.setTimeInMillis(currentDate.getTime());

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, mbCal.get(Calendar.YEAR));
cal.set(Calendar.MONTH, mbCal.get(Calendar.MONTH));
cal.set(Calendar.DAY_OF_MONTH, mbCal.get(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, mbCal.get(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, mbCal.get(Calendar.MINUTE));
cal.set(Calendar.SECOND, mbCal.get(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, mbCal.get(Calendar.MILLISECOND));

return cal.getTime();
}

public static void main(String[] args)
{
Date now = new Date();

System.out.println("Current Time="+now);
Calendar cal = Calendar.getInstance();
System.out.println("Current Timezone="+cal.getTimeZone().getDisplayName());

//Canada/Central
String timeZoneId = "Canada/Central";
System.out.println("Getting Time in the timezone="+timeZoneId);
System.out.println("Current Time there="+getDateInTimeZone(now,timeZoneId));
}

}

Tuesday, July 3, 2007

TOGAF (The Open Group Architecture Framework)

Well, I did receive Open Group's TOGAF 8 2006. Looks like a solid read with little fluff. Maybe a little like when I read the PMBOK but more interesting!

What is TOGAF? (The Open Group Architecture Framework)

TOGAF is an achitecture framework - The Open GROUP Architecture Framework. It enables you to design, evaluate, and build the right architecture for your organization.

The key to TOGAF is the Architecture Development Method (ADM) - a reliable, proven method for developing an IT enterprise architecture that meets the needs of your business.

It mentions that it can be used in conjunction with the Zachman Framework(of which I need to read up on), which has an excellent classification scheme, but lacks an openly available, well-defined methodology.

"The TOGAF ADM defines a recommended sequence for the various phases and steps involved in developing an architecture, but it cannot recommend a scope - this has to be determined by the organization itself, bearing in mind that the recommended sequence of development in the ADM process is an iterative one, with the depth and breadth of scope and deliverables increasing with each iteration." (p. 30, TOGAF 8)






ADM (Architecture Development Method)

Monday, July 2, 2007

The Leader In You


Finishing "The Leader In You" helps reinforce the ideas from the Carnegie Institute.

Written similarly to "How to Win Friends and Influence People" and "How to Stop Worrying and Start Living", it gives lessons through the stories and personal experiences of modern day(up to early 90s) leaders from business, politics and sports.

It was good but I would certainly recommend starting with the 2 books above before reading this one.
Human relationships are important and Carnegie will help you develop them.

A recap of the main principles in this book:
1. The first step toward success is identifying your own leadership strengths.
2.Communication is built on trusting relationships
3.Motivation can never be forced. People have to want to do a good job.
4. There's nothing more effective than rewarding than showing a genuine interest in other people.
5. Step outside yourself to discover what's important to someone else.
6. Nobody is more persuasive than a good listener.
7. Team players are the leaders of tomorrow.
8. Truly respecting others is the bedrock of motivation.
9. People work for money but go the extra mile for recognition, praise, and rewards.
10.Be quick to admit mistakes and slow to criticize. Above all, be constructive.
11.Set goals that are clear, challenging, and obtainable.
12. Leaders never lose their focus. They keep their eyes on the big picture.
13.Consistently high performance comes from a balance between work and pleasure.
14. Gain strength from the positive and don't be sapped by the negative.
15. Tame your worries and energize your life.
16. Never underestimate the power of enthusiasm.

Wednesday, June 27, 2007

SOA - A Planning and Implementation Guide For Business and Technology

I recently finished reading Service-Oriented Architecture - A Planning and Implementation Guide for Business and Technology, written by Eric A. Marks and Michael Bell.

I liked it because it frames SOA with more of a business perspective and how to approach SOA in general. We all know that SOA does not necessarily equal WS-*. Where often SOA books are throwing spec after spec at us.

This book provides advice on how to create an SOA model to enhance the 2 main goals of an SOA:


1. Improved Code Reuse

2. Quicker Time to Market for Software Projects


Chapter 3 - SOA Business Modelling provided an example of SOA Value Analysis with a matrix comparing the various areas of the Business Value Chain against SOA Value Drivers such as "Grow the Business","Reduce Costs", "Asset Reuse", "Business Agility","IT Flexibility","Time to Market","Business Processes","Process Visibility". This analysis can help identify "SOA hot spots" to help prioritize business processes.

I appreciated the "big picture" approach to the book. Where you started off considering things like SLAs (Service Level Agreements) and SOA Governance, without wondering how to patch different specs together. The diagrams were good, it looked like some custom notation however. A good bridging book between technology and business.

A pretty good book, glad I read it. The title makes alot of sense after reading the whole book :

SOA - A Planning And Implementation Guide For Business And Technology

Friday, June 15, 2007

JavaServer Faces!

I have been interested in an open source platform to launch a web site. I had heard the about jsf as a J2EE framework.

One is the lifecycle model better designed to protect the "model" of the MVC architecture.



The current available version is 1.2 which is available from Sun's Glassfish project. I was hoping the the Apache myfaces project would have a version 1.2 out but it seems they are still testing it.

Sun's version does not run on Tomcat, so I hope the MyFaces team can get 1.2 out soon. I have seen some indications that this can be checked out from cvs but not currently available as a release product.

My current set up is Tomcat,Eclipse,MyFaces,MySql along with the Sysdeo debugger.
Security for the app is set up using a Filter.
Basic templating done via Tiles.

I have some basic functionality up and running but I wanted to learn more about the JSF details before so I got a copy of "Core JavaServer Faces" by Geary,Horstmann. It was very good at filling in some gaps and revealing some other ideas I would like to incorporate in my J2EE apps.

It was good in describing the validation process, the JSF lifecycle(as diagrammed above), event handling, some of the Ajax code(Ajax4jsf).

When I get some more time I will revisit my application and incorporate some of this.

JSF is pretty neat!


Some good links:
http://myfaces.apache.org/
http://java.sun.com/javaee/javaserverfaces/
http://en.wikipedia.org/wiki/JavaServer_Faces
http://www.coreservlets.com/JSF-Tutorial/

Saturday, May 19, 2007

Reading RSS feeds with Java

If you were interested in incorporating RSS feeds into your java code you might want to have a look at Project Rome which is an open source java library for handling RSS feeds. Rome is currently in version 0.9 can be found at https://rome.dev.java.net/

I wrote a simple sample program which reads a given RSS feed and display some of the feed entries along with some attributes. It will also display the RSS version, as there are different versions of RSS. http://en.wikipedia.org/wiki/RSS_(file_format)

This simple program is the following:


import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndImageImpl;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import com.sun.syndication.feed.synd.SyndContentImpl;


/*
* 2 Required Jar files
* rome-0.9.jar retrieved from http://rome.dev.java.net/
* jdom.jar retrieved from http://www.jdom.org/
*/

public class RSSReader
{

public static void iterateRSSFeed(String rssFeedUrl)
{
try
{
//open up a connection to the rss feed

URLConnection feedUrl = new URL(rssFeedUrl).openConnection();

//Create Feed Object
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedUrl));

System.out.println("Examining rss feed:"+rssFeedUrl+"\n");

System.out.println("Feed type="+feed.getFeedType());

//Iterate through object to get details
List list = feed.getEntries();

System.out.println("Feed image="+feed.getImage());
if (feed.getImage()!=null)
{
SyndImageImpl image = (SyndImageImpl)feed.getImage();
String imageInfo = "Image url:"+image.getUrl()+"\n";
System.out.println(imageInfo);
}
for (int i=0 ; i < list.size(); i++){

//display entry attributes
SyndEntry entry = (SyndEntry)list.get(i);
String display = "Entry:"+i;
display += "\ntitle:"+entry.getTitle();
display += "\nlink:"+entry.getLink();
display += "\nauthor:"+entry.getAuthor();
display += "\npublished:"+entry.getPublishedDate();
display += "\nupdated:"+entry.getUpdatedDate();
display += "\ndescription:"+entry.getDescription();

display += "\ncontent size:"+entry.getContents().size();
if (entry.getContents().size()==1)
{
SyndContentImpl imp = (SyndContentImpl)entry.getContents().get(0);
display += "\ncontent value:"+imp.getValue();
}
display += "\n";
System.out.println(display);

}

}
catch(Exception e)
{
e.printStackTrace();
}

}


public static void main(String[] args) {

//James Gosling's blog
String rssFeedUrl = "http://blogs.sun.com/jag/feed/entries/rss";

//Mark Cuban's blog
//rssFeedUrl = "http://www.blogmaverick.com/rss.xml";

//rssFeedUrl = "http://techinitiatives.blogspot.com/feeds/posts/default";

//RSS 2.0
//rssFeedUrl = "http://weather.yahooapis.com/forecastrss?p=FRXX0076&u=c";

iterateRSSFeed(rssFeedUrl);


}
}

Wednesday, May 2, 2007

Developing Knowledge-Based Client Relationships

I just finished Ross Dawson's "Developing Knowledge-Based Client Relationships". I found it useful in understanding more of the business side of consulting and client relationships.

The book provides a couple of interesting definitions. "Information is anything that can be digitized, while knowledge is the capacity to act effectively, an attribute unique to people."p.96

Strategy in these types of client relationships is to evolve where the vendor and client integrate/collaborate at a high level to create higher levels of value creation.

A vendor should strive to avoid black box/commodity work and strive for the higher level knowledge based/collaborative solutions.

This was a good book for illuminating how to deal with clients strategically. Similar to "The Trusted Advisor". This was a good read before I dive back into more technical reads. :-)

Sunday, April 8, 2007

Service Oriented Architecture

I finished reading Enterprise SOA - Service-Oriented Architecture Best Practices (Dirk Krafzig, Karl Banke, Dirk Slama).

It seems to be one of the higher rated SOA books on Amazon. That is why I also read Thomas Erl's SOA (Concepts, Technology, and Design) book.

This book seems to show a little more hands on knowledge and things to watch out for rather than web service specifications. Although SOA is most commonly thought of along with WS-* specifications, SOA can be implemented without web services.

The big benefits I see are reusability and interoperability. Reusability in exposing small functional pieces that can be put together for strategic reasons through an orchestration. Interoperability in exposing siloed pieces of functionality of an organization to allow all the information to work together. By exposing different platforms(Java, .NET, mainframe,...), the organization can more easily build enterprise applications to meet short and long term goals.

Definitions of SOA:

A Service-Oriented Architecture(SOA) is a software architecture that is based on the key concepts of an application frontend, service, service repository, and service bus. A service consistes of a contract, one or more interfaces, and an implementation. (Krafzig, p. 57)


SOA is a form of technology architecture that adheres to the principles of service-orientation. When realized through the Web services technology platform, SOA establishes the potential to support and promote these principles throughout the business process and automation domains of an enterprise. (Erl, p.54)


Some videos:





Thursday, April 5, 2007

Missing the coolest job ever!

I joined the French Foreign Legion in 1994 and served 5 years there.

Legionnaire number 185565!

C'est la vie!

I miss those days. The spartan lifestyle, physical activity, living a dream!

Thanks to youtube I can get all pumped up and relive it!

Incredible!

I am so glad I went and did it.

ActiveBPEL Vendor Selector Visio Diagram

They say a picture is worth a thousand words, I thought I would publish a diagram of the Vendor Selector Application that I build using the ActiveBPEL Designer 3.0.


The code can be downloaded from last month.

The cool visio symbols for the web services were taken from Mai-lan's Visio Blog. They look cool and provide a different symbol to signify web services.



Wednesday, April 4, 2007

Scrum has started

Well, I finished writing the final exam for COMP 689 - "Advanced Distributed Systems" last Friday. It was an interesting exam and I will find out in a couple of weeks how it went.

Also had some good news, I won a scholarship for last years marks in my Masters program.

I won a Queen Elizabeth II Scholarship Awards
http://www.athabascau.ca/registrar/studawrds/winners.php
It was nice but there is much still to be done, I have one more course then I am to start my Thesis Essay in the fall.

Back to work topics, we have started to follow a Scrum process. It basically is the Scrum 15 minute daily meeting along with charting progress in the Scrum Backlog.

The backlog is powerful in providing an instance picture of progress in the project. We kept the estimates of individual task items to 2 days most. I am one of the four developers in the project. We are currently above the burn down chart. This is okay as scrum is a learning process.

Today I did not get what I wanted finished but 2 other developers finished 2 days work each that day. So that means that it was a great day for the team. The feedback and tracking is pretty instantaneous and I can see how greater visibility into team progress is given using the burndown chart.

Tuesday, March 13, 2007

ActiveBPEL the "Easy Way"

Well, if I wanted to get people to use ActiveBPEL and get up to speed quickly. I think I should document what I did to get the application up and running.

If I can only make a couple people have an easier time getting a BPEL process going quickly, my task will be done.

I have documented how one can get ActiveBPEL installed and deploy the Vendor Selection application. I would think that it could be done relatively quickly.

The Vendor Selector BPEL process can be found at http://techinitiatives.blogspot.com/2007/03/vendor-selector-activebpel-bpel-process.html

You can download the Vendor Selector User Manual

Please let me know if you have any comments on the "Vendor Selector User Manual"

Monday, March 12, 2007

The Vendor Selector ActiveBPEL BPEL process




















Vendor Selector BPEL process

I finished the ActiveBPEL process I was working on from the ground up. This was part of a project I am working on for COMP 689(Advanced Distributed Systems) at the University of Athabasca. I have one course this summer and then a Thesis to write in the fall to graduate from the Masters of Information Systems program. I would like to do research in the area of SOA. That is why I proposed this idea for this course's project.

It always seems like a fair bit of work to get that first application working in the new environment. It always seems very simple after the fact :-).

My advice is go all the way with the ActiveBPEL Designer. Work through the from the ground up tutorial to build the loan approval example.

Vendor Selector BPEL process:

1 BPEL process (Coordinate the workflow)
2 Vendor Web Services (Provide quotes and allow purchasing of products)

This BPEL process helps facilitate the purchase of up to 3 products and 3 quantities. There are 2 vendors each with 2 methods, one to provide a bid price on the tender and another to actually make the purchase. The BPEL process will query both vendors then select the vendor with the lowest price and then call that vendor to actually make the purchase.

The BPEL and Web Service Clients are included in the Java source under the package
com.smith.client


I will provide 2 versions of the application.
1. With a MySQL 5.0 backend database (Available here)
2. Another which does not require a database (random bid quotes produced along with hard coded security authentication) (Available here)

My preferred setup:
Install ActiveBPEL Designer
Install Ant
Get a Java 1.5 jdk
If installing the database version of the Vendor Selector:
Install MySQL 5.0 (if using the database version)
and the MySQL java db driver

Scrum Presentation and Sample Scrum Backlog

I recently read "Agile Software Development with Scrum" by Schwaber and Beedle. It is an interesting agile methodology. The key to monitoring
progress is through a document called a Sprint backlog.

If you don't have the time to read a book on scrum, I did distill what I thought were the important ideas in a power point presentation.

The Sprint backlog tracks the status of project tasks over the duration of the Sprint (usually 30 days). Progress is shown visually with a "burndown chart" with hours of estimated work along the y axis and work time along the x axis.

Doug Tillman (http://www.dugthawts.com/) has had some interesting experiences implementing scrum.

I was determined to find a sample backlog and figure out how it worked. It is pretty much based on formulas summing columns. The sample can be found here . This is based on a sample I found on the web.

I used it to show how hypothetically I should work to finish a "Distributed Systems" course I am currently taking.

The LOADING tab shows all available resources and time available.
The SPRINT BACKLOG tab shows the work(assignments)
The BURNDOWN chart section shows the current progress
- if you are above the line you are currently behind schedule
- if you are below the line you are ahead of schedule

Also, interestingly, the rate of falling behind or catching up is shown by the burndown graph.
A nice visual tool indeed.

What I find interesting about the burndown chart is that it is a very visual way of seeing how the project is going and what steps might need to be taken.

Wednesday, February 21, 2007

Know-How by Ram Charan

I just finished reading Ram Charan's Know-How (The 8 Skills That Separate People Who Perform From Those Who Don't). I had previously read his books Execution and What the CEO Wants You To Know. He makes points illustrated with good examples from the many contacts he has with many top Fortune companies.

I will simply post his summary at the end of the book. I thought it was a very practical and focused book. Especially about setting goals and focussing on a few key priorities to achieve them.

The Eight Know-Hows

1. Positioning and Repositioning: Finding a central idea for business that meets customer demands and that makes money.
2. Pinpointing External Change: Detecting patterns in a complex world to put the business on the offensive.
3. Leading the Social System: Getting the right people together with the right behaviors and the right information to make better, faster decisions and achieve business results.
4. Judging People: Calibrating people based on their actions, decisions, and behaviors and matching them to the non-negotiables of the job.
5. Molding a Team: Getting highly competent, high-ego leaders to coordinate seamlessly.
6. Setting Goals: Determining the set of goals that balances what the business can become with what it can realistically achieve.
7. Setting Laser-Sharp Priorities: Defining the path and aligning resources, actions, and energy to accomplish the goals.
8. Dealing with Forces Beyond the Market: Anticipating and responding to societal pressures you don't control but that can affect your business.

Personal Traits That Can Help Or Interfere With the Know-Hows

Ambition - to accomplish something noteworthy BUT NOT win at all costs.
Drive and Tenacity - to search, persist, and follow through BUT NOT hold on too long.
Self-confidence - to overcome the fear of failure, fear of response, or the need to be liked and use power judiciously BUT NOT become arrogant and narcissistic.
Psychological Openness - to be receptive to new and different ideas AND NOT shut other people down.
Realism - to see what can actually be accomplished AND NOT gloss over problems or assume the worst.
Appetite for Learning - to continue to grow and improve the know-hows AND NOT repeat the same mistakes.

Saturday, February 17, 2007

Some good sample BPEL examples!

There are some good BPEL examples to work from at
http://www.activebpel.org/samples/samples-3/samples.php

Just a note beforehand, you should read the instructions for each example before trying to run them. I encountered some errors that were frustrating but after reading the instructions I was able to get them running.

I think it is a guy thing that instructions are for wussies. ;-)

The 2 examples that I ran so far

complex_exchange:
For the complex exchange, I had to set the following environment variables.

I set up the following environment variables
AESAMPLES_LIB=D:\Collin\University\COMP689\project\bpel\lib
CLASSPATH=.


1. Make sure that it the complex_exchange.bpr file gets deployed correctly
ant deploy-bpr
2. Then you should be able to run the client correctly
ant client



custom_functions:


This example has instructions where you have to
- edit the aeEngineConfig.xml as noted in the instructions
- copy the aecf-xmlstring.jar to the activeBpel engine's \shared\lib directory
- restart tomcat

1. Make sure that it the complex_exchange.bpr file gets deployed correctly
ant deploy-bpr
2. Then you should be able to run the client correctly
ant client



There is a deployment issue when you try to deploy both applications.
The error can be seen by looking at the deployment log:

http://localhost:8080/BpelAdmin/deployment_log_detail.jsp

Due to a Duplicate service name: complexToBpelPartnerLinkService in both bprs.

Wednesday, February 7, 2007

Implementing a Complex Axis Web Service

Well, I really want to do something more elaborate with ActiveBPEL and that will require the ability to write complex web services. I ordered the electronic version of "Developing Web Services with Apache Axis" by Ka lok 'Kent' Tong. I like it because it is real straightforward with working examples. There are also some chapters on Axis Security and Encryption which will definitely be worth reading when I get some time.

Check out http://www.agileskills2.org/DWSAA/index.html for more information.
The code is downloadable without cost.

I had to rework some of the code but I am glad to say that I got the complex web service up and running in the ActiveBPEL environment.

You can download my project for this. It is not in a super tidy state but should get you going.
Download it from Here
There are 2 ant files that I use:

buildTheStubs.xml - This will build the stub java source files for the complex web service

buildAndDeployWS.xml - This will deploy the compile and deploy the web service to ActiveBPEL

I copied them into build.xml when I want to run them each.

There is a client java class StubClient.java which will be able to talk to the deployed webservice.

The web service implementation BizServiceSOAPImpl.java
exposes a method
public ProductQueryResultResultItem[] query(ProductQueryQueryItem[] queryRequest) throws java.rmi.RemoteException, InvalidQuery {
}

which is quite obviously complex in that it does not have any simple types as parameters or return types.


The client works fine except when I try to look at the wsdl for the webservice
http://localhost:8080/active-bpel/services/BizServiceSOAP?WSDL on my machine

I get the following error message that I will try and have a look into:

AXIS error

Sorry, something seems to have gone wrong... here are the details:Fault - makeTypeElement() was told to create a type "{http://foo.com}>>productQuery>queryItem", with no containing element

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString: makeTypeElement() was told to create a type "{http://foo.com}>>productQuery>queryItem", with no containing element
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:kepi

Thursday, February 1, 2007

Writing a simple Axis Web Service

If I am going to be doing any real BPEL development. I really have to be able to make my own web services. I basically stripped out the BPEL and JSP components of the loan approval example.

I created a simple java class that will be exposed as a web service:

Web Service:

package com.smith.ws;
import java.util.Date;

public class SimpleWebService {

public String simpleCall(String someString)
throws SimpleWebServiceProcessFault
{
String response = null;
try
{
System.out.println("Calling "+this.getClass());
//do some business logic
Date now = new Date();
response = "*"+someString+"*"+now;
}
catch (Exception e)
{
throw new SimpleWebServiceProcessFault("simpleCall", e.toString(),"99");
}
return response;
}
}


You then have to update the service.wsdd file to expose it as a web service:

Service.wsdd

Something like:

< name="SimpleWebService" provider="java:RPC">

< name="className" value="com.smith.ws.SimpleWebService">
< name="allowedMethods" value="*">

<>


The ant build creates a simplewebservices.wsr and copies it to the /bpr directory

Calling the web service:

Service service = new Service();
Call call = (Call)service.createCall();
String urlString = "http://localhost:8080/active-bpel/services/SimpleWebService";
call.setTargetEndpointAddress(new java.net.URL(urlString));
call.setOperationName("simpleCall");
call.addParameter("someString", org.apache.axis.Constants.XSD_STRING,ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);

String result = null;
try
{
result = (String)call.invoke(new Object[] {"My Call"});
}
catch (AxisFault af) {
if (SimpleWebServiceProcessFault.hasMagicFaultErrorCode(af))
result = "99";
else
result = af.toString();
}
catch (Exception e) {
result = "unexpected exception seen: " + e.toString();
}

System.out.println("Client result = " + result);


Basically taking the input argument and returning it dressed up with some asterisks and the current time.

Sample run:
Client result = *My Call*Thu Feb 01 20:13:33 MST 2007


You can download the sample simple web service bundle here:
1simplews.zip

Monday, January 29, 2007

Dynamic Dropdown List using AJAX

I wanted to discover how to use AJAX to populate a dynamic dropdown list based on the input of some controls on the current page.

There are 2 dropdown lists which determine the elements of the third dropdown list.

Please see the live demonstration Here

The sample code (jsp and php) can be downloaded at Sample Code

Basically on the onchange event of the first 2 dropdowns, there will be an ajax call to retrieve values for the third dropdown.

There are 3 files:

1. dropdownPage.jsp(php) - main page which makes backend calls to retrieve the 3rd dropdown values
2. dataPage.jsp(php) - which provides the server data(nested xml) for the third dropdown
3. dropdownResults.jsp(php) - which simply shows which values the user has selected



The heart of the code is in the javascript processing on the dropdownPage.jsp:

AJAX Scripting (JSP Version):

function importXML()
{
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = populateDropDown;
}
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange = function ()
{ if (xmlDoc.readyState == 4)
populateDropDown()
};
}
else
{
alert('Your browser can\'t handle this script');
return;
}

//determine url to get xml
var dd1Param = document.f1.dd1.value;
var dd2Param = document.f1.dd2.value;
var url = 'dataPage.jsp?dd1='+dd1Param+'&dd2='+dd2Param;
//load the xml
xmlDoc.load(url);
}


function populateDropDown()
{

var browser = 'ie';
var nameIndex = 0;
var valueIndex = 1;
if (document.implementation && document.implementation.createDocument)
{
browser = 'firefox';
var nameIndex = 1;
var valueIndex = 3;
}

var dd3 = document.f1.dd3;

//empty control
for (var q=dd3.options.length;q>=0;q--)
{
dd3.options[q]=null;
}

var x = xmlDoc.getElementsByTagName('item');
for (j=0;j < x[0].childNodes.length;j++)
{
if (x[0].childNodes[j].nodeType != 1) continue;
var theData = document.createTextNode(x[0].childNodes[j].nodeName);
}

for (i=0;i < x.length;i++)
{
var name = '';
var value = '';
for (j=0;j < x[i].childNodes.length;j++)
{
if (x[i].childNodes[j].nodeType != 1) continue;
var theData = document.createTextNode(x[i].childNodes[j].firstChild.nodeValue);
if (j==nameIndex) name = theData.nodeValue;
if (j==valueIndex) value = theData.nodeValue;
}

dd3.options[i] = new Option(name, value);
}
}

function submitform()
{
var dd1 = document.f1.dd1;
var dd2 = document.f1.dd2;
var dd3 = document.f1.dd3;
var dd1Value = dd1.options[dd1.selectedIndex].value;
var dd2Value = dd2.options[dd2.selectedIndex].value;
var dd3Value = dd3.options[dd3.selectedIndex].value;

var page = "dropdownResults.jsp?dd1="+dd1Value+"&dd2="+dd2Value+"&dd3="+dd3Value;
window.location = page;
}

One thing I do like about this example is that the data read provides a nested xml structure as follows:

Monday, January 22, 2007

Understanding ActiveBPEL Tutorial Test Client



Going through the BPEL construction process worked well but I also wanted to discover how the rest of the tutorial worked. So I dug in and hopefully this breakdown will help you. It helped me! :-)





The loan approval components A-F:

A. index.jsp:

Form with values such:
FirstName: John
LastName: Smith
Amount: 500
Operation:request
URL: http://localhost:8080/active-bpel/services/LoanService
Assessor Response: high,low,FAULT
Approver Response: yes,no, FAULT

Upon Submission:

- A form that submits to itself in which the jsp will make a call to the BPEL process

Step 1: update the values of "loan_approval_config.xml"
(~\Active Endpoints\ActiveBPEL Designer\Server\ActiveBPEL_Tomcat\temp\loan_approval_config.xml)
is updated with the values from the form via the RuntimeParams.java class using xpath notation.

Step 2:
Get the BPEL result via the following call:

This call grabs the newly updated values form the above loan_approval_config.xml
and essentially makes a call to the web service via code like:

BPELTestClient.java

Service service = new Service();
Call call = (Call)service.createCall();
String urlString = rp.getAttr("/rundata/client", "url");
call.setTargetEndpointAddress(new java.net.URL(urlString));
call.setOperationName(rp.getAttr("/rundata/client", "operation"));
call.addParameter("firstName", org.apache.axis.Constants.XSD_STRING,
ParameterMode.IN);
call.addParameter("name", org.apache.axis.Constants.XSD_STRING,
ParameterMode.IN);
call.addParameter("amount", org.apache.axis.Constants.XSD_INTEGER,
ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);

firstName = rp.getText("/rundata/client/firstName");
lastName = rp.getText("/rundata/client/name");
amount = new BigInteger(rp.getText("/rundata/client/amount"));
result = (String)call.invoke(new Object[] {firstName, lastName, amount});

Note however that the index.jsp updates the values for the Assessor and Approver web services in the loan_approval_config.xml.




B. RuntimeParams.java

Class designed to update the "loan_approval_config.xml" file.
It contains a org.w3c.dom.Document and a java.io.File instance variable so that the xml document can be updated via xpath notation.


C. Constants.java

public interface Constants {
public static final String MAGIC_FAULT_STRING = "FAULT";
public static final String MAGIC_FAULT_ERROR_CODE_STRING = "42";
public static final String UNEXPECTED_ERROR_CODE_STRING = "9999";
}



D. loanProcessFault.java

Special extension of org.apache.axis.AxisFault which is thrown by the 2 Web Services
ApproverWebService.java and the AssessorWebService.java


E. The Web Services

Looking at the 2 web services used in the BPEL:

1. ApproverWebService.java
Simply retrieve a value from the loan_approval_config.xml file
RuntimeParams rp = new RuntimeParams();
response = rp.getText("/rundata/approver/accept");

2. AssessorWebService.java
response = rp.getText("/rundata/assessor/risk-level");


Summary
So basics of this BPEL client is index.jsp which

1. updates a loan_approval_config.xml with form values
2. makes a call the to the BPEL by reading the values from loan_approval_config.xml
3. the two partnerLink webservices(Approver and Assessor) read their values from this xml file
4. the jsp is returned the results from the BPEL call