If you lost this presentation during the last JBossWorld 2009 in Chicago, it's your the chance to watch 3 real success histories coming from Brazil.
JBoss Operations Network - JON is the productization of the Jopr project. A JON subscription allows customers to perform enterprise management of not only JBoss Application Server , but also several important components such as the OS, Network traffic, Filesystems, Apache Web and Tomcat Servers, as well as internal services utilized by the JBoss Application Server, including: Hibernate, JMS, and Connection Pools. It allows the JBoss to be recognized as a real "Enterprise Offering" in the market. JON can be thought of as an enterprise level administration console for JBoss. As Chris Morgan, Product Manager at Red Hat states: "You never will buy a car without a dashboard...". JON is the dashboard that you were missing for your car! In this Webinar, you will discover how three different customers increased the return on their JBoss Enterprise Application Platform investment by using JON.
Why coming from Brazil? It is not only because this country is in the media or because it is cool, but because Brazil typically has limited resources for deploying technology, so demonstrating how you can do more with less is critical in such an environment. If it works here, then it can work for you as well!
Recently I had a nice discussion on Twtitter. The topic was opensource. I find it interesting a lot of people still believe that opensource is an ideology, or a development model. It is interesting too there are a lot of people who are trying to create new ways to define opensource, such as "Open source is a business tactic, not a business model"[1], I do not understand the problem in considering opensource a business model. Although I am an engineer, I have studied business administration and I am very comfortable with opensource as a "Business Model". Moreover, I believe that a "tactic" is based on some business model. So, I do not see the difference. As a result I will consider “business tactic” and “business model” as synonyms.
Many of us are used to selling opensource to the "technical departments". But, of times when we are facing a top level management people, for various reasons, we have experience difficult in explaining opensource as a suitable alternative! One of the reasons for this difficulty is we are used to and prepared to explain opensource from technical perspective. But, our technical arguments are not well understood by many management types. Most management types understand business models, business strategies and business tactic, whichever you prefer to call them. That is not a “knock” against management types. They understand their domains just as engineers understand their technical domains. So, you can imagine the difficulty in management understanding the technical reasons for using open source. Likewise, you can imagine the difficulty engineers have in understanding some business models, strategies, tactics, etc.
I think the question really comes down to, “How are CIOs and managers to trust in something, or rely on something, they do not fully understand from a business perspective or a technical perspective?” It is for this reason, I believe if we better positioned the business case and business reasons for using opensource as an alternative rather than using technical reasons, we would have a much better chance in convincing CIOs and managers opensource solutions can indeed reduce their cost and also provide benefits to their customers.
In the study of economics there is a concept called "Marginal Costs"[2], In general terms, marginal cost at each level of production includes any additional costs required to produce the next unit. If producing additional vehicles requires, for example, building a new factory, the marginal cost of those “extra”vehicles includes the cost of the new factory. In practice, the analysis is segregated into short and long-run cases, and over the long run, all costs are marginal. At each level of production and time period being considered, marginal costs include all costs which vary with the level of production, and other costs are considered fixed costs. This is a concept that can by also applied into opensource industry.
For JBoss Enterprise subscriptions, or any other product family, Red Hat has a cost to keep a number of employees contributing, testing, certifying, collaborating, writing documentation, training a support team, consulting team etc. For this reason, the"Opensource Marginal Cost" is really low. That's why Red Hat never charges expensive prices for their products. That is also one of the biggest advantages for any company who follows this kind of business model in order to create a really profitable company offering opensource solutions. Obviously, Red Hat receives many contributions, but any contribution must be certified, and supported by Red Hat. Tor this reason, even for collaborations, there is a cost to test and to provide the security that this contribution will not cause any damage to "Subscription Buyers". However, this cost is still low, compared to "Proprietary Software".
"Opensource Marginal Cost" offers companies to save as much as 80% in the software acquisition.
Industry will accept "opensource" when the advantages are tangible factors, and not only merely words of text. I cannot see any company keeping their doors open creating innovative solutions without a way sell them.
In fact, I saw a huge company trying jump in the opensource market without a good plan, and the result turned out to be catastrophic. This particular company was acquired by another proprietary vendor. Some think this end result is a "proprietary win over the opensource". However, in fact, in my humble opinion this is a "strategic company win over a company with a poor opensource strategy ".
I live into a country where a lot of companies are looking for ways to reduce their costs in software, not only because opensource is "a new trend", but because some of them must trim their “IT” budgets to make them more competitive. I have seen many companies who have reduced their cost of software licencing, and with the saved software licensing costs they offered their employees not only better salaries, but also better environments for employees to work in as well as additional training and incentives for education.
Opensource is not only a way to develop software, it is a way to make employees happier by saving money which can then be invested in what is really relevant for the company, the employees!
There are many others factos that shows how opensource is an alternative for the future, replacing the retrograde proprietary industry software, such as bio alternatives as true substitutes for gasoline and its derivatives. In the end, everything is economics. We must open our minds, and not only think just as engineers, but also begin to think in terms of long term business.
First of all, the main objective of this project is to be a source of new ideas, resources, components and actions for JBoss ESB. Nobody is interested in creating a fork (or anything like that), but we believe that it could be a nice way to contribute to the evolution of this incredible project, as well as to be an accurate information source and filter for candidate components to be integrated into the core JBoss ESB project.
At breakingwoods, anybody will be able to contribute. All contributions are welcome, whether that be a new ESB component, a review of an existing compoenent, ideas, fixes, testing etc... all will be really appreciated The only thing you need is a Gmail/Google account.
Freedom to Contribute
Everybody at the breakingwoods's team believes that JBoss ESB is a very robust solution, but would be even better if we would add more Adapters, Listeners, Gateways (in JBoss ESB it might be the same), as well as new Actions. The same happened with another popular opensource ESB solution: Mule, made by MuleSource. The Mule community has Mule Forge, which is an extension's repository for MuleESB. We hope that breakingwoods can be exactly the same for JBoss ESB, offering lots of components, and showing valuable information about which new ideas are rocking or the most downloaded, rated, commented etc.
Why this project is not hosted under JBoss.ORG?
Firstly we would like to make the project strong in its own right. Once it is hosted at Google, we hope people will feel comfortable enough to contribute with whatever they want, once it is not so close to the crowd and the spotlight. Nevertheless, maybe in the future, we could move from Google Code to JBoss.ORG. This will depend of the success of this initiative. Alternatively, it could be great to have it isolated.
How can I contribute?
There are several ways in which you can help to make this project a success:
To Propose / To Create / To Review/ To test: New Adapters/Gateways/Listeners
To Propose / To Create / To Review/ To test: New ESB Actions
To Propose / To Create / To Review/ To test: New Ideas, Designs, Quickstarts
Already at breakingwoods:
esbgen: A basic CLI tool similar to seam-gen. Helps you create the first esb project.
TwitterAction: Action for publishing an ESB Message in Twitter.
EMailListener: Periodically polls in the configured e-mail account, publishing incoming emails to JBoss ESB as an ESB Message.
Google Spreadsheet Listener: Connects to Spreadsheets hosted by GoogleDocs, publishing new records to JBoss ESB.
Apache DBUtils: Action that executes plain SQLs.
There are new Actions and Listeners in the pipeline. The following are some of the next Listeners we are planning. Maybe you will be able to help:
Apache Camel Listener/ Action
SalesForce Listener / Action
Infinispan Listener/ Action
Terracota Listener / Action
AMQP Listener/Action
Where is yours ? :)
We are working in some of these, so stay tuned, as lots of good things will appear here at this project.
Another good point, is that most of these components will be compatible to JBoss SOA Platform. Obviously Red Hat will not support problems regarding SalesForce, Terracota or anything that is not part of the JBoss SOA-P supported distribution. However, you will still be able to add these components into your solutions, possibly reducing your development time and increasing your productivity.
Recently my brother started a new kind of service in his very small consultancy company, he is offering a kind of Consultancy over the Google Apps focused in small business customers, although I believe that Google Apps is not suitable just for small ones, but for bigger companies/clients as well.
Google Apps offers lots of good functionalities and services, such as: a) E-Mail, b) Site, c) Agenda, d) Documents (An online Office suite). I believe that this is a good strategy, so you might face in a near feature people replacing the older Excel files by new Google Spreadsheets, and than I decide work on it a little bit, creating a new Gateway to interact with this Google Service.
Getting Started with Google APIs
Google offers a good documentation over their APIs[1], in fact, everything that Google does, you are able to interact with just using Java, Python or even JavaScript[2].
You might use Google Spreadsheets for many purposes, since a basic data collecting, or as my friend JP Viragine told me: "Maybe we could use as a "Decision Table on the Clouds", or just a excel replacement. The big advantage, beyond the fact you don't need to install anything in your computer, is the "Collaboration", because you might share the online file with another people that will be able for editing any time and anywhere.
Another big difference when we are handling such kind of technology is the simple fact that we are totally stateless, once the Http allows us connect, and after the processing the http will give an answer, and that's it, is not that easy we use "Observers/Observables" when we are talking about HTTP (by default Stateless protocol), so my strategy was use "Timers" for polling the http service. I had not found a way to receive a notification from the service using Java, maybe it would make my job easier.
New JBoss ESB Listeners
If you create your first JBoss ESB gateway, you will be able to create as much as you need! The only thing that I have to recall when I have to create a new Gateway/Listeners is the wiki section that Tom Fennelly wrote [3]. So everything you will see here in this entry is very well documented there, you must say thanks to Tom, he did a really good job documenting about this subject.
JBoss ESB in Action with GoogleDocs
The first step is declare our listener into Jboss-esb.xml, there we will describe everything we need, such as properties and its values as well as the Listener class itself:
The most important configuration from this listener is the property: gatewayClass, which we are using: org.jboss.soa.jbossesb.gateways.google.GoogleDocsGateway , which is not an ou-of-the-box class from JBoss ESB, it is totally new, and you will see it working pretty soon. Moreover, we defined other properties that will be used by the Listener classes further, this properties are: documentName, feedURL, username, password and so on.
I created a very ugly class GoogleDocsGateway, that for this entry is handling just the spreadsheet, this is a class that extends AbstractThreadedManagedLifecycle, after this the rest is quite easy. When you are extending this class, you must keep in mind that there are certain tasks to think about:
1 -Define what you will do in the doInitialise() method, this is the method called when JBoss ESB invokes this service by the first time.
2- The doRun() is the most important one, this is a method that or will be waiting for an event notification, or you must try get a way to poll the protocol that you are interacting with, in order to don't consume unnecessary resources.
package org.jboss.soa.jbossesb.gateways.google;
import java.util.Timer;
import java.util.TimerTask;
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.Service;
import org.jboss.soa.esb.client.ServiceInvoker;
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.listeners.ListenerTagNames;
import org.jboss.soa.esb.listeners.lifecycle.AbstractThreadedManagedLifecycle;
import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException;
import org.jboss.soa.esb.listeners.message.MessageDeliverException;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.format.MessageFactory;
/**
* Google Gateway Class
*
* @author esilva
*/
public class GoogleDocsGateway extends AbstractThreadedManagedLifecycle {
private ConfigTree listenerConfig;
private Service service;
private ServiceInvoker serviceInvoker;
private GoogleSpreadSheet sheet = new GoogleSpreadSheet();
protected boolean firstExecution = true;
public GoogleDocsGateway(ConfigTree config) throws ConfigurationException {
super(config);
this.listenerConfig = config;
String serviceCategory = listenerConfig
.getRequiredAttribute(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG);
String serviceName = listenerConfig
.getRequiredAttribute(ListenerTagNames.TARGET_SERVICE_NAME_TAG);
service = new Service(serviceCategory, serviceName);
sheet.setService(config.getAttribute("servicename"));
sheet.setUsername(config.getAttribute("username"));
sheet.setPassword(config.getAttribute("password"));
sheet.setFeedurl(config.getAttribute("feedurl"));
sheet.setDocumentName(config.getAttribute("documentname"));
}
@Override
protected void doRun() {
publishMessageToESB();
int delay = 10000;
int period = 5000;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try {
if (sheet.hasChanges()) {
System.out
.println("Changes found, publishing the message again");
publishMessageToESB();
}
else {
System.out.println("No updates found");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, delay, period);
}
private void publishMessageToESB() {
Message esbMessage = MessageFactory.getInstance().getMessage();
try {
esbMessage.getBody().add(sheet.load());
} catch (Exception e) {
e.printStackTrace();
}
try {
serviceInvoker.deliverAsync(esbMessage);
} catch (MessageDeliverException e) {
e.printStackTrace();
}
}
@Override
protected void doInitialise() throws ManagedLifecycleException {
try {
serviceInvoker = new ServiceInvoker(service);
sheet.initialize();
} catch (MessageDeliverException e) {
throw new ManagedLifecycleException(
"Failed to create ServiceInvoker for Service listening Google Service: "
+ service + "'.");
}
catch (Exception e) {
throw new ManagedLifecycleException(e);
}
}
}
I created a new class called: GoogleSpreadSheet, that is an abstraction over the tasks we must to do to interact with the Google Spreadsheets, and through the doRun() method I am using a kind of scheduler to poll the url of my spreadsheet according the property configuration made by the "user" of this gateway.
package org.jboss.soa.jbossesb.gateways.google;
import java.net.URL;
import java.util.List;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.data.spreadsheet.ListFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.gdata.data.spreadsheet.WorksheetEntry;
public class GoogleSpreadSheet implements Job {
protected static SpreadsheetService myService;
protected URL metafeedUrl;
protected SpreadsheetFeed feed;
protected List spreadsheets;
protected SpreadsheetEntry entry = null;
private String service;
private String username;
private String password;
private String feedurl;
private String documentName;
private String lastUpdate;
protected boolean on = false;
public String getService() {
return service;
}
public void setService(String service) {
this.service = service;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFeedurl() {
return feedurl;
}
public void setFeedurl(String feedurl) {
this.feedurl = feedurl;
}
public String getDocumentName() {
return documentName;
}
public void setDocumentName(String documentName) {
this.documentName = documentName;
}
public String getLastUpdate() {
return lastUpdate;
}
public void setLastUpdate(String lastUpdate) {
this.lastUpdate = lastUpdate;
}
public GoogleSpreadSheet() {
}
public void initialize() throws Exception {
myService = new SpreadsheetService(service);
System.out
.println("Initializing Connection between JBoss ESB and Google Docs...");
myService.setUserCredentials(username, password);
metafeedUrl = new URL(feedurl);
feed = myService.getFeed(metafeedUrl, SpreadsheetFeed.class);
spreadsheets = feed.getEntries();
entry = null;
for (int i = 0; i < spreadsheets.size(); i++) {
entry = spreadsheets.get(i);
if (entry.getTitle().getPlainText().equalsIgnoreCase(documentName)) {
setLastUpdate(entry.getUpdated().toString());
}
}
}
public String load() throws Exception {
StringBuilder builderOut = new StringBuilder();
entry = null;
for (int i = 0; i < spreadsheets.size(); i++) {
entry = spreadsheets.get(i);
if (entry.getTitle().getPlainText().equalsIgnoreCase(documentName)) {
List worksheets = entry.getWorksheets();
for (int j = 0; j < worksheets.size(); j++) {
WorksheetEntry worksheet = worksheets.get(j);
URL listFeedUrl = worksheet.getListFeedUrl();
ListFeed listFeed = myService.getFeed(listFeedUrl,
ListFeed.class);
if (listFeed.getEntries().size() > 0) {
StringBuilder header = new StringBuilder();
for (String tag : listFeed.getEntries().get(0)
.getCustomElements().getTags()) {
header.append(tag + ",");
}
builderOut.append(header.toString().substring(0,
header.lastIndexOf(",")));
}
for (ListEntry entrada : listFeed.getEntries()) {
StringBuilder row = new StringBuilder();
for (String tag : entrada.getCustomElements().getTags()) {
row.append(entrada.getCustomElements()
.getValue(tag)
+ ",");
}
builderOut.append(row.toString().substring(0,
row.lastIndexOf(",")));
}
}
}
}
return builderOut.toString();
}
public boolean hasChanges() throws Exception {
SpreadsheetFeed feed = myService.getFeed(metafeedUrl,
SpreadsheetFeed.class);
List spreadsheets = feed.getEntries();
entry = null;
for (int i = 0; i < spreadsheets.size(); i++) {
entry = spreadsheets.get(i);
if (entry.getTitle().getPlainText().equalsIgnoreCase(documentName)) {
if (getLastUpdate().equalsIgnoreCase(
entry.getUpdated().toString())) {
System.out.println(getLastUpdate() + "==========="
+ entry.getUpdated().toString());
return false;
} else {
this.setLastUpdate(entry.getUpdated().toString());
System.out.println("Changes arriving: " + getLastUpdate()
+ "===========" + entry.getUpdated().toString());
return true;
}
}
}
return false;
}
public GoogleSpreadSheet(String service, String username, String password,
String feedurl, String documentName, String lastUpdate) {
}
public String load(String service, String username, String password,
String feedurl, String documentName, String lastUpdate)
throws Exception {
SpreadsheetService myService = new SpreadsheetService(service);
myService.setUserCredentials(username, password);
URL metafeedUrl = new URL(feedurl);
SpreadsheetFeed feed = myService.getFeed(metafeedUrl,
SpreadsheetFeed.class);
List spreadsheets = feed.getEntries();
SpreadsheetEntry entry = null;
StringBuilder builderOut = new StringBuilder();
for (int i = 0; i < spreadsheets.size(); i++) {
entry = spreadsheets.get(i);
if (entry.getTitle().getPlainText().equalsIgnoreCase(documentName)) {
System.out.println("Last Update: " + entry.getUpdated());
List worksheets = entry.getWorksheets();
for (int j = 0; j < worksheets.size(); j++) {
WorksheetEntry worksheet = worksheets.get(j);
URL listFeedUrl = worksheet.getListFeedUrl();
ListFeed listFeed = myService.getFeed(listFeedUrl,
ListFeed.class);
if (listFeed.getEntries().size() > 0) {
StringBuilder header = new StringBuilder();
for (String tag : listFeed.getEntries().get(0)
.getCustomElements().getTags()) {
header.append(tag + ",");
}
System.out.println(header.toString().substring(0,
header.lastIndexOf(",")));
builderOut.append(header.toString().substring(0,
header.lastIndexOf(",")));
}
for (ListEntry entrada : listFeed.getEntries()) {
StringBuilder row = new StringBuilder();
for (String tag : entrada.getCustomElements().getTags()) {
row.append(entrada.getCustomElements()
.getValue(tag)
+ ",");
}
System.out.println(row.toString().substring(0,
row.lastIndexOf(",")));
builderOut.append(row.toString().substring(0,
row.lastIndexOf(",")));
}
}
}
}
return builderOut.toString();
}
@Override
public void execute(JobExecutionContext ctx) throws JobExecutionException {
try {
System.out.println("Has Changes: " + this.hasChanges());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Instead to use lots of confusing images, I will use a screencast:
I hope you liked that idea, and you can feel yourself more comfortable for creating new Listeners/Gateways for JBoss ESB.
The objective of Riftsaw Project is to bring BPEL capabilities for JBoss Application Server. This project is build on top of Apache ODE, basically adding some features for JBoss App Severs as which will allow either JBoss ESB (Community based) and in the future JBoss SOA Platform(Enterprise SLA) to support BPEL out-of-the-box.
Another "Opensource" BPEL alternative
If anybody tell you that BPEL is an easy language to create the processes manually and if you believe, you are ready to believe in any tale! I tell you it because this is a kind of technology that you really need a graphical tool/designer.
The JBoss Community has adopted for many years the Eclipse to deliver JBoss Tools and now this set of plugins made by JBoss Team is already integrated with Eclipse BPEL Designer. This is a cool plugin and you will really need this feature into your Eclipse, otherwise create any simple BPEL process will be a really boring task.
Nevertheless we support BPEL Designer in JBoss Tools. You are able to use the NetBeans BPEL Desginer which is another really cool opensource alternative. I did some personal researching over BPEL support in NetBeans and it was a real good experience. For certain moments I thought that Eclipse could incorporate some ideas from NetBeans designer as well.
I recommend you install the JBoss Tool's 3.1.0.M3 plugins into your Eclipse 3.5 (Galileo). It will add the BPEL support into your Eclipse as well as the capacity to deploy the process besides editing the WSDLs visually. For more information about this see this link: https://www.jboss.org/tools/download/dev.html
Once you are aware that you really need a designer tool, let's try share with you some good information before you dive into BPEL Development; first of all there are certain resources and concepts that would make BPEL easier for every human. These are the following:
WSDL
XPath
XSLT
XML Schema
If you have a good background over those items above, BPEL will be incredibly easier for you, otherwise, I recommend you attend the "Webservices online training", this is one of the training offered in JavaPassion Website. In this training, you will have some good brief introductions about everything you need to be a BPEL Rock Star.
I've been listen many many times companies complaining about SOA Adoption independently of the technology vendor a very common problem is what I call: "The gap between processes and the bussiness components". This is the moment where your company spent thousands of US$ to discovery the company's processes. So many Six Sigma guys came to you company and told you everything that your company is doing wrong and **designed some proposals using BPMN** or any other notation of "How the company could/must work". At this moment you can see a huge interrogation in front of you while you are trying to figure out which glue you will use to put your processes working with your legacy COBOL, Java, .Net and a bunch of WebServices representations of these legacy components, have you think about that before?
BPEL could help you in 30% to 40% to solve these kind of problems. Once BPEL aims you think in "Composite Applications" which in general are many compositions of different services (keep in mind that it can be not only WebServices).
This technology is perfect when you must execute several services according some conditions or even some rules. BPEL allows you think in "Services Orchestration" at the same way you think when you are creating Swing UI using some graphical designer.
The RiftSaw/Apache ODE is an implementation of WS-BPEL 2.0 which is the newest specification definied by OASIS of the standard BPEL4WS (Business Process Execution Language for Web Services) 1.0 and 1.1. Red Hat counts with one contributor for this spec: Alejandro Guízar (JBoss, by Red Hat).
Thinking about Processes
I married about 1 year and I can still remember my wedding process. Several people were involved. A lot of parallel tasks, a lot of dependent tasks, timeouts, authorizations, rules etc! Now try imagining everything into a flow keeping in mind how you would organize your plans to get married and keep in mind that you have a lot of expecations, and everything must be perfect on time, saving costs and allowing everybody to be happy... Well, this is exactly what processes are trying to solve and provide to the companies globally speaking!
A Process is composed by a Sequence of many activities and those different activities can to perform particular actions, but always promoting a collaborating among them. Let's see some examples of this:
Getting Married Process -> Propose the Lady -> Request Parent's Authorization -> Organize the Party -> Invite People -> Organize Honey Moon -> Organize Bachelor Party -> Say Yes!
If everything in the sequence flow is true, congratulations, you will have a good chance to celebrate a nice wedding! Although a process must handle when something that you are not expecting to happen, for instance: "Bachelor Party denied", and than you might try several different actions, flows or even new sequences for it. :)
WS-BPEL 2.0 spec describes a process, the sequence, the activities that are part of , the faults, the exceptions, the alternative paths and everything you need to create a process.
Using JBoss technologies for BPEL
When we are working with BPEL, basically the majority of Tools generates a .bpel file, this is a XML File that describes the process itself. A BPEL Process represents several interations with a bunch of Webservices, then if the BPEL can invoke several WebServices, makes sense if the way to invoke a BPEL process execution would a WebService as well, for this reason each .bpel file, or process, will have a WSDL that will represent the Client invocation, as well as the response that will send after the process flow.
A BPEL Process is a sequence of activities inside some sequence, exactly as I said before, you may represent it graphically(IDEs) or programatically (XML), the following table will show the 2 action's categories :
Basic Activities
Structured Activities
invoke
receive
reply
assign
compensate
compensateScope
empty
exit
throw
rethrow
validate
wait
flow
forEach
if
pick
repeatUntil
scope
while
These activities are represented in the BPEL Palette, as you can see in the following image:
This is a simple blog entry, so it would be impossible describe BPEL in depth here. So I recommend you read some books and deeper BPEL Articles if you need more background on this technology. it will make you understand this entry much better.
Creating your first BPEL Project using JBoss Tools, RiftSaw and JBoss App Server 5.1
First of all you must have in your machine the following software:
The build.xml script in this directory is responsible for deploying the BPEL runtime and deployer to the JBoss AS,and the BPEL/ESB examples to the JBossESB environment.
1) Install JBoss5.1.0.GA and JBossESB4.6.GA, and follow the JBossESB instructions for installing it into JBossAS
2) Update the deployment.properties file to set the path to each of this installations
3) Run "ant deploy" to install the BPEL deployer and engine into the JBossAS
4) Start the JBossAS server
At this point, you can try out the examples in the RiftSaw/samples folder.
Alternatively, if you want to try out the BPEL/ESB examples, then:
6) Run "ant deploy-esb-examples" to copy the ESB/BPEL examples into the JBossESB samples.
7) Follow the $JBossESB/samples/quickstarts/webservice_esb_bpel instructions to run the example
One thing that you may ask yourself:
a) Why the Riftsaw is installed both in AppServer and the ESB Server ? - Hide quoted text -
A: In my point of view you may think into a "process repository" or something like other vendors loves to call : "A process server", so the BPEL processes will be running into an exclusiv (or clustered or load balanced) instance of a JBoss AppServer, which will host the Riftsaw Engine, as well as the WSDLs that represents the processes.
In another hand you have the other part of your SOA solution, in that case in particular I am talking about an ESB! At this moment, JBoss ESB can host services that may put several BPEL processes to work together, for each BPEL Process you will have an 1-1 relation with a WSDL, once you will access a BPEL process of the same way you acess a regular WebService: Through an WSDL.
Depending of what you wanna do in terms of Orchestration you may count just with BPEL, however keep in mind that you will be limited into WSDL boundary, so if you need different protocols collaborating with each other
Now I will save your time! it's time to watch this tutorial to get some basics of BPEL Development using JBoss Tools + Riftsaw, click here to watch!
Why is it useful? It shows how you can edit the WSDL that acts as the endpoint for the BPEL process, and also shows how you can create the Service, Ports, Bind for this WebService.
This September is very special for me, my wife and my dad will be celebrating their birthday this month, and the third motivation for happiness is the fact to be speaking at JBossWorld, and sharing some thoughts and our experiences with everybody there.
This JBossWorld 2009, you will have chance to watch a presentation of some success cases of JBoss Operations Network (JON) in Brazil, and also notice how some customers obtained very valuable benefits from this product.
The presentation title is: The "bossanova-way": JBoss management with JON in Brazil - Real case studies and applications of JBoss Operations Network , you may ask: "wth...does Bossanova mean in this context?". Well, I'm gonna tell you the inspiration behind this title, Bossanova is a brazilian style of music very well known internationally speaking, I have seen many docus on TV saying that bossanova is a very appreciated and recognized as a sophisticated form of entertainment in the US. However, many of my american friends, have no idea that it comes from Brazil... I am not sure if you like Frank Sinatra, but he is one of the persons that fell in love by this music style?
Perhaps you are very used to hearing good stuff about Brazil such as soccer, samba, beaches....and ok...Ladies.... but many people don't realize that Red Hat brought JBoss business to Brazil 3 years ago, and we could make JON a "defacto" solution for majority of the JBoss Enterprise's subscription buyers.
And our secret...our secret was somewhat based on bossanova, as far as we tried to be: "Simple, however sophisticated", helping people understand the value and benefits that JON can bring to the companies that are using JBoss in an enterprise environment.
In this presentation, we will show some testimonial of customers, as well as some technical demos and simulation of the key features that were mandatory for running and support JBoss in a very enterprise level. Yep...We will have deep demos, besides a rare accent.
Well, I hope to see you there, in the end I am sure that you will see the power of JON in very large interesting applications and scenarios in the country where Brazilian Portuguese is spoken :)
I work for JBoss, a division of Red Hat based in São Paulo, Brazil. My main objective nowadays is promote a professional and collaborative opensouce business model based in Java and SOA Solutions. In my spare time, I've been practicing brazilian Jiu-Jitsu since 1990.