Wednesday, March 25, 2009

Moving to WordPress

You'll be able to find my blog here and on the TUSC Software Site from here on...

Wednesday, March 4, 2009

The Power of WOA - Woooooooooooooooooooaaaaaaaaaaaaa!

I've been talking about light weight SOA (or Web Oriented Architecture / WOA) for some time now.  I'd like to share a real-world example of how you might use WOA in your environment.

The "end results" are always what I like to show off first.  If you look to the right on this page, you'll notice a map and some links on the map - it's titled "Big Garages."  These are homes with garages over 1000 square feet in Douglas County.  As you can imagine, the power of WOA is the ability to not only publicly display data, but private analysis of your data too!

I've always been a big fan of geo-analysis of my data.  The saying "a picture is worth a 1000 words" is just so true for me.  I'm a huge fan of Yahoo Pipes and Google Mashup (which unfortunately Google decided they needed to charge for - by deprecating it and moving people to Google App Engine by July 2009).  

In this post, I'm going to specifically talk about the ability to take RESTful data and display it in Blogspot, My.Yahoo.Com, www.iGoogle.com, Google Earth, etc. - i.e. in a mashup or otherwise.

Where I started is that I used iPerspective to create some publicly available RESTful services.  I created 2 services to start with. One service (LeadLocations) returns a set of companies, cities and respective states for leads from a conference.  This information is being pulled from a Zoho Cloud database.  The other service (Properties in Douglas) returns detailed data about properties in Douglas County Colorado.

Both of these services will return the data from SOAP and RESTful service calls.  For example, you can see the list of Lead Locations JSON/XML and Properties JSON/XML using these links.  The thing I love about REST is how easy it is to limit my data set that gets returned.  For example, I can look at properties that (you can view the link itself to see how I'm limiting the data):

It's also great because it's so easy to go between XML and JSON...literally, just adding .json to the operation name!  JSON is a bit "thinner" than XML, so I prefer it over XML - since it saves network bandwidth.

I started my journey by creating a Yahoo Pipe that consumes the above RESTful services.  You can check out my Yahoo Pipe right here too.  This will allow you to enter in a where clause and query specific data from database.  You can write a query that will pull back whatever data you 
would like to see geospatially represented.  Column names that you can query off of include, but are not limited to:

  • Acres
  • Condition
  • Finished_Basement_SF
  • Fireplace
  • Garage_SF
  • Garage_Type
  • Occupancy
  • Owner_Name1
  • Owner_Name2
  • Owner_State
  • Property_City
  • Property_Street_Name
  • SF (Square Feet)
  • Taxable_Total_Assessed_Value
  • Total_Actual_Value
  • Walkout
For example, if you want to:

  • Find the homes owned by anyone who's name started with Brad, you could use:
  • owner_name1 like 'BRAD%'
  • Find all of the homes over 10,000 square feet on less than .5 acres, use:
  • sf > 10000 and acres < .5
  • Find all homes with the owner living in Florida, use:
  • owner_state = 'FL'

That's pretty powerful isn't it!

I published my Pipe, so you can click on "Edit Source" which will allow you to see my pipe's steps to graphing this information.  You can clone it and create your own similar (or very different) pipe too! 

 You also notice that you can:

  • Get a badge (for TypePad, Blogspot, WordPress, iGoogle, or an Embedded Link.
  • MyYahoo
  • Google
  • RSS
  • JSON
  • SubBlogLines
  • Netvibes
  • NewsGator
  • MyAOL
  • Results by Email or Phone
  • Get as PHP or KML (Google Earth)
If I click on the "Get as a Badge" option and embed into iGoogle, you can see below, that my current search (i.e. where clause) gets saved for the data that's displayed in the map on my iGoogle page.  Whereas if I click on the iGoogle link, I get the list of properties (rather than a map).


Next I thought I'd show this information in a Google Mashup page.  I copied some of the sample code and played with writing mashup code for a while until I got a mashup page that I like.  The code is found here - you'll notice my code contains the link the to RSS link from Yahoo.  So my Yahoo Pipe is feeding this data to Google Mashup (as an RSS feed).

Let's take a look at the visual version of this page, which you can view here:



Now hopefully you're saying WOAAAAAAAAAAAAAAAAAAAAAAA!  The power of taking your data to a whole new level is here!  Imagine it!

Saturday, February 28, 2009

Forms Migration and Security for ApEx

Well, now the long awaited ApEx in our hands...and it's pretty clear that the primary focus was on Forms migration and security enhancements as you can see on Oracle's Site.

I tried Web Services using a SOAP binding of document literal wrapped and I got the same error as I did in 3.1...so I have an email into the ApEx product manager to see if these enhancements made it into the 3.2 release after all...anxiously awaiting!

Friday, February 27, 2009

Quick Turns with ApEx 3.2

The moment that I've been waiting for months now is finally here! It's an exciting day for the iPerspective team! Why? Because Oracle (finally) released version 3.2 of Oracle Application Express (ApEx). I'm a huge ApEx fan! Why? Because of how quick I can develop a production ready application using ApEx. The ability to consume Web Services that can access virtually any data source, make ApEx a great environment for developing Mashups - quickly!

The faster you can show your customers your product, the sooner you can get feedback and in turn, the faster you can meet the needs of the business. ApEx 3.2 has added support for more SOAP binding types, which is a good thing!

I started by downloading ApEx from the Oracle site - it's about 92Mb. After downloading the new file (I already had 11g of the Oracle DB installed), I extracted the zip file into my existing {oracle home} apex directory. This placed the new apex as a subdirectory in the prior directory - I didn't think overwriting it was a good idea.

I then ran the apexins.sql script after login into the sys schema:
@apexins SYSAUX SYSAUX TEMP /i/

As usual, this script ran and performed my upgrade of ApEx flawlessly. I've had the ApEx installation go "bad" a couple of times, but the solution is simple - drop the new schema and re-run the apexins script...it always worked the 2nd time...and about 99% of the time it's worked on the 1st time.

I did receive the following error in my Web Service app:

ORA-20001: The webservice was unreachable because either the URL you supplied was invalid, your environment requires a valid proxy server address for HTTP requests, or a wallet needs to be configured for HTTPS requests.

The reason is that the ACL is OK for flows_030100, but not the new flows_030200 schema. To fix this issue, you must run this script:

DECLARE
ACL_PATH VARCHAR2(4000);
ACL_ID RAW(16);
BEGIN
-- Look for the ACL currently assigned to '*' and give APEX_030200
-- the "connect" privilege if APEX_030200 does not have the privilege yet.
SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
-- Before checking the privilege, ensure that the ACL is valid
-- (for example, does not contain stale references to dropped users).
-- If it does, the following exception will be raised:
--
-- ORA-44416: Invalid ACL: Unresolved principal 'APEX_030200'
-- ORA-06512: at "XDB.DBMS_XDBZ", line ...
--
SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
FROM XDB.XDB$ACL A, PATH_VIEW P
WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND
EQUALS_PATH(P.RES, ACL_PATH) = 1;
DBMS_XDBZ.ValidateACL(ACL_ID);
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_030200',
'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
'APEX_030200', TRUE, 'connect');
END IF;
EXCEPTION
-- When no ACL has been assigned to '*'.
WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
'ACL that lets power users to connect to everywhere',
'APEX_030200', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;


ApEx 3.2 continues the legacy modernization kick too. ApEx was already great for migrating MS Access applications to ApEx...but what about Oracle Forms? Well...ApEx 3.2 now has an Oracle Forms migration kit! This is huge for the modernization of your Forms applications! Combine this with the Mashup features (of Web Services) and wow! What a powerful solution!

I'm going to keep playing with ApEx 3.2 now...what fun!

Tuesday, February 17, 2009

Mashing Up the Cloud

Creating Cloud Computing Services with iPerspective using Zoho's CloudSQL

This is a demo of how I used iPerspective to create and consume Web Services in a mashup using Oracle's Application Express and Proto. The services use Zoho's CloiudSQL to pull data directly from the Cloud.

Sunday, February 15, 2009

Virtualizing the Cloud

Have you ever thought - is Cloud Computing just another name for SaaS (Software as a Service) or is it something different? I'd content that Cloud Computing is in fact different than SaaS.

Here's how I see each of these concepts:


  • SaaS is simply software that runs on someone else's servers and that you pay for "by the drink." In other words, it's software that's hosted for you. You don't typically have control over software upgrades, outages, etc...they just happen whenever your software provider schedules them. How you pay for the software may vary. In other words, the unit of measure that you're charged for can be very different between different vendors. Many vendors charge per month per named user...and others charge based on the specific services you request. IntelliReal is a good example of a company who provides their software as a service. They provide property valuations through their hosted application. Customers pay by the valuation. Customers can access their valuations (and other information) via a browser, Web Services, etc.

  • Cloud computing on the other hand is an architecture that allows you to use computing power using a variety of access methods - including via a browser, Web Services, RESTful services, etc. You can "spin up" or "take down" virtualized services whenever you want. For example, Amazon's EC2 architecture is a cloud of computers. Spin up and image, run some processing for an hour and spin the servers down. So it's not necessarily the vendor's software you're running, but can be your own software too! Zoho (a takeoff on SOHO - or small office / home office) is a Cloud computing vendor too.


Is SaaS dead? Absolutely not! How about Cloud computing? Absolutely not! They are both VERY alive and well!

Is it easy to move our processing into the Cloud? Is anything worthwhile really ever easy? I always say "if it was easy to {fill in the blank}, everyone would be doing it..." Is it easy to be the best in the world? You might ask "at what?" At anything!

So the answer is no - it's not easy to move to Cloud Computing, but the return on investment is very worthwhile. Many of the SaaS vendors are moving into Cloud Computing - for example SalesForce.com has an entire platform build around Cloud Computing - Force.com!


Let's take a look at how you and why you might integrate a Cloud Vendor's solution into your architecture. Let's use Zoho as an example Cloud Computing use case. Zoho provides a complete hosted "Office" type solution. Their hosted include chat or instant messaging, email, CRM, Database and reporting, documents, spreadsheets, notebook, people tracking / contacts, calendaring, project management, polls and more.

For this use case, we're going to look at their database functionality. Zoho makes it VERY easy for you upload an existing delimited file and turn it into a database table within seconds. You can join table results together into reports. Like any database, you can sort, filter, insert new data, update existing data, delete data, and so forth. Zoho is built on top of a MySQL architecture that's replicated, redundant, provides fail over, is backed up, and so forth. Everything you would expect from a SaaS provider.


Zoho has a number databases and tables that are publicly available. For example, let's say you're interested in looking at all of the statics about the Olympics - they are available online:

























I had a number of database tables that I went ahead and uploaded into Zoho. I was impressed with how easy it was to do this:
























So where does Cloud Computing come in? It comes in with CloudSQL. What is CloudSQL? It provides the ability for you to access your data via JDBC.

























Now let's say that you want to expose your data throughout your organization in a homogeneous way...i.e. via Web Services - an Open Standards API to all of your organization's data. I can consume my Web Services in a mashup, to integrate one application with another application, or as a part of a workflow process. In other words, I create the service once and I can use it everywhere in my organization! That's powerful!

Using iPerspective, I can attach to any JDBC driver, so I loaded up Zoho's drivers into iPerspective, created a JDBC connection string (per the documentation) and within minutes I have data services for each of my Cloud tables! Using ApEx I can quickly create a mashup of my data that's in the Cloud - very cool! That's architectural bliss!

Friday, February 6, 2009

iPerspective = Rapid WebService Generation

Have you been thinking that you need Web Services...now? What about an "architectural upgrade?" How would you like to focus on your business priorities rather than your architecture? How quickly could you "spin up" an open API for a customer, vendor, or internal department? Can you provide a 360 view of data throughout your organization? How quickly can you pull together an XML or JSON representation of data for an AJAX / Web 2.0 application?

iPerspective just keeps getting better and better! In no time at all, you can spin up an entire set of Web Services or RESTful Services that deliver a secured (or not, your choice) open API providing you with any data in a SOAP, XML, or JSON message.

You can focus on the priorities of the business rather than your architecture - we've done that part for you! If you haven't seen a demo lately...and you have any interest in what I'm describing here...send me an email and we'll be happy to give you a demo any time!

Wednesday, February 4, 2009

Agile is Hot - I Can See Why!

Are you an Agile "believer" yet? Maybe you kept hearing about Agile and made the plunge...and maybe you're still sitting on the sidelines waiting to see if it's a fad or where it ends up? That's how I felt about RAD, XP and other project management styles. Most of us have stuck to waterfall management over the years, right? Why? Because it works!

Well, I can tell you that Agile is the real deal. In other words, I'm absolutely a believer. Why? Because it produces results! Better results than waterfall! In fact, when I look back on my own project management style over the years, I used a number of the Agile principles...yet, I sure wish I knew them all 20 years ago.

As you read in my last blog entry, we were successful at delivering the iPerspective product release on time. So let me explain how the iPerspective development team met our goals using Agile.

First, let's discuss some background about our project. We have a global team. We have developers here in the US and also in India. We have a support team and a documentation team here in the US. Our testing team is in India. 12 1/2 hours time zone difference between the teams!

We decided on weekly iterations (or sprints). In other words, every week we would deliver a complete release of our software to the testing team (our customers for now). After we completed our design phase (note, design is not skipped like it is with other methods), we assigned priorities and a developer to each feature, then we estimated the hours to complete each task. Each developer then was able to choose a sprint for each of their tasks - being careful not to overload their schedule in any week. The developers needed to be sure to leave time for bug fixes from the testing team too...oh, and of course, contingency time.

With a global team, initially we had to do 2 scrum meetings a day (I wouldn't recommend it, but it took time to get some policies changed in India) - one in the morning and one at night. At the beginning of every day we knew exactly where every developer stood and each night we knew where the test team stood. The scrum meetings are pretty simple. Each person covers what they worked on yesterday, what they will work on today and what's blocking them.

Each Wednesday night was our build cutoff. The build was completed, tested (to make sure we didn't break the build, the installer, etc.) and then uploaded to our FTP server for the test team. If we broke the build, the installer, or something, we had to scramble to complete/fix the build so the test team could start testing the new sprint release.

The test team documented their findings, bugs, etc. This was reported in the daily scrums, so again, we knew exactly where the test team stood every day. If we ran into any blocks, we would start a gotomeeting session to resolve the issues. Somewhere in the process, we went to one global daily scrum meeting, which makes life easier for everyone. So 8am MST every day we're on the call with our global team - we cover the accomplishments of yesterday, what's going to happen today and any blocks for every person. The daily scrum is critically important to an Agile success!

For this release, we had 5 sprints. Once the development sprints were complete, the documentation team (here in the US) and testing teams could begin their final work. The good news is that every week before the final build these teams were able to see exactly where the product stood, do a lot of testing, write documentation on features that were locked down, etc. The daily scrums continued through the testing and documentation stages and we went to daily builds that were delivered back to the test and documentation teams. We decided that in our next release we're going to work on all of the UI changes in the first sprint (we're in design right now). This approach should help our documentation and testing teams!

What I really appreciate about Agile is that every day you exactly where your efforts stand. In a traditional waterfall project, every day I would wonder where we stood...not knowing 100%. I'm not saying it's not challenging to move to Agile - it's demanding and it's challenging, but it's absolutely worth the investment!

A beautiful "feature" of an Agile project is that your customers can see the results as you go...which makes your end result much more customer centric.

Friday, January 30, 2009

iPerspective - Release 1 - Market Test

Today was an exciting day! We have officially gone from having "technology" to having our first version of the iPerspective product! As I've learned over the last several months, there is a big difference between technology and software. The past quarter has brought about amazing accomplishments across the iPerspective team. From product management to business development, building an SOA Services practice, marketing, development, testing , documenting, conducting Voice of the Customer (VoC) interviews, following Agile (from attending daily to scrum meetings), weekly builds, a global team working around the clock, and so much more...wow, what a quarter! Now it's time to get ready for Release 2, which is due in about a month (1st part of March)!

On top of today's launch, today was my partner Joe's last day at TUSC. We celebrated with quite an event for Joe and his 20 years of dedication. We ended the day racing go-carts. Joe took first place in the first race (I took second, our other partner Rich took third) and I took first place in the second race (Joe took second and Rich took fourth) - oh the joy of competition!

If you know anyone interested in "quick turns" or "Agile SOA," please have them send me an email! iPerspective allows you to QUICKLY build services, try out the services on your customer base (internal or external), revise the services....build new services....you get the idea.

Some might say Agile SOA isn't possible - we've created tools to empower you so that it is possible! Give me a call or send me an email and I'll be happy to schedule a meeting to show you exactly how! Some say SOA is dead...it certainly worked out from a marketing perspective, but nice try! Not convinced? Did you hear the Internet was down yesterday? Right - SOA's as dead as the Internet's a fad.

Congrats and thank you to my team! We've made amazing accomplishments in the last quarter! I'm really looking forward to seeing if we can do the same (i.e. accomplish a ton) this quarter! Exciting!!!

Sunday, January 4, 2009

Surf's Up

Surfing in Hawaii...back to work in a couple more days...
Posted by Picasa

Thursday, January 1, 2009

Take the Vow!

Why not! Peace, harmony and happiness for all in 2009! Happy New Year!

Wednesday, December 24, 2008

Twitter - What are You Doing?

Do you want to keep up with what people are doing? But you want the short answer? If so, check out Twitter. It's a pretty cool social networking site.

Sunday, November 30, 2008

Visualization Google Gadgets

After a bit of experimentation, I was able to figure out how to use the Google Visualization API embedded into my Google Gadgets to produce a graph within my Gadget!



As you can see here, I've placed the "PilesofMoney" visualization onto my page:






















I had to load up my values into a 2 dimensional array and then read the value from the array within the drawChart function, but other than that bit of trickery, you should find the code self explanatory.

This demonstrates tremendous power with Google Gadgets and the Visualization API!

Friday, November 28, 2008

Power of Google Gadgets (with Web Services)

Back in April I talked about Yahoo Pipes and now it's time to take a look at Google Gadgets. Yahoo Pipes abstracts your development so that you can develop code through a visual development tool (i.e. a 4GL). Whereas Google Gadgets are developed by writing JavaScript (i.e. a 3GL).

Using Google Gadgets, you can quickly develop a gadget that can published for others to consume. Google has provided a number of templates or code segments that you can use as your foundation or starting point. A gadget can do most anything you can dream up!

If you want to see some gadgets in action, go to iGoogle, which will perform a quick setup of your iGoogle page. After that, you can click on "Add Stuff" to add gadgets to your page. The iGoogle Developer Home provides some great resource and documentation too.

To get started writing code, you need to go to the Google Gadgets Editor. You'll see templates above the editor. I used the "Fetch XML Content" in the "API Examples" section as my base code for my first gadget which can be found here. You can add this gadget to your page and you can review the code in detail. There is a good blog from Google on the API as well.

My first gadget consumes data from an iPerspective service that reads data from an Oracle database. You'll notice a few things in the code below:

  1. In the ModulePrefs section, you'll notice a lot of meta data about the gadget itself. You must have these components in order to be able to publish your gadget.


  2. UserPrefs allow you to control the user input parameters and default values for those parameters. These controls can be radio buttons, select lists, text input, etc.

  3. In the url parameter (to the Web Service), you'll notice that I'm building the where clause and order by statements dynamically based on the user input.

  4. You'll see that I'm reading the values of a number of fields and simple building an HTML table to display the data. In a future blog entry I'll show you how to visually represent the data using Google's Visualization API, which is exceptionally powerful! SalesForce.com also has documented the visualization features too.
Here's a look at the Google Gadget on my iGoogle page:












Here's a look at those "UserPrefs" when I click on the "Edit Settings" option:










Wednesday, November 12, 2008

State of the SOA Union

TUSC was an early adopter of SOA technology. I've been writing about SOA in one for or another since 2002! TUSC's entry into the world of Web development began in 1994 when I was asked to debate that client server was a proven technology that was here to stay. After doing my research in preparation for the debate, I quickly realized that Web technologies were here to stay. In fact, many companies were publishing data and information to the Web at that time. Most of the content was static, but it was at that time that I started talking about transactional / dynamic Web applications.

It quickly became obvious that companies were going to want to share information using Web technology. It became very clear to me that scraping Web (HTML) pages was not the ideal mechanism for businesses to exchange data...that we needed a standard in order to exchange information between companies. Dynamic data exchange - what a concept! XML was clearly a great way to transfer data between systems. In fact XML solved the age-old comma delimited file issues by providing a schema (or spec) for "well-formed" (i.e. what's required and what's optional) data.

Yet, it also became clear that XML alone wasn't enough - we need another standard in place so that we could ask for the data we needed in a consistent fashion (i.e. that we could provide inputs) and that we could get data back in a consistent fashion (i.e. that we would know what outputs to expect). Along came what's known as SOAP or Simple Object Access Protocol which "wraps up" the messages sent and received. By the time an official SOAP standard was established, vendors had published over 100 different "standards."

In addition to SOAP, a specification was established to define the inputs and outputs that will be passed by the SOAP messages. This specification is known as a WSDL (pronounced wis-del) or Web Service Description Language. As I mentioned, I was talking about these standards back in 2002.

Then, while developing our Periscope product (an Oracle virtualization tool) later in 2002, I ran into a technical issue that could easily be solved by implementing Web Services. Web Services provide a layer of abstraction or virtualization. Web Services can be the beginning of a service-oriented architecture (SOA). This layer of abstraction proved to extremely valuable in solving technical issues. Why? Because a Web Service can be called from any platform, to any platform using XML, SOAP and WSDLs.

After repeated attempts to move our early adaptor customers into an SOA or at least a "light-weight SOA" (i.e. just using Web Services), in late 2005, a friend of mine asked if I would take on the acting CTO role for his company. I accepted the position under one condition...that we could "bet the farm" on Web Services and a light-weight SOA environment. It's now 3 years later and I'm happy to report that an original investment of about $20k is worth over $30M today. Why? Largely due to the virualization capabilities of the architecture that we put into place.

Where does this leave us today? Where are we going with SOA? Where is the technology today? As you can tell, implementing this architecture had its returns, but I can assure that we being an early adaptor had a price as well. We learned about concepts like governance (i.e. best practices) as we ran into different issues. Fortunately today, numerous technologies solve most of the early adaptor issues we ran into. In other words, we're beyond the early adaptor phase and we're into the mainstream at this point. Yet, about 1/2 of the organizations in the world haven't even started an SOA project. It's now time! The technologies are very proven. As you've read in my blog, we've taken our lessons learned and turned them into a technology offering (iPerspective)...and so have others! We also have an excellent understanding of what to come.

Technologies like cloud computing are real and are here to stay. They may be too "early adaptor" if you're not using technologies like Web Services yet. We're focused on taking our lessons learned and providing our customers with best practices based on where they are today. We're very focused on taking what can be quite complex and making it simple. In other words, our mission is to simplify SOA for you and everyone else. It's not easy to do it right the first time...but it's possible!

I'd love to hear about your lessons learned and about where you're going with your SOA-related efforts. Please take a minute to post a comment about what you're up to!

Friday, November 7, 2008

Online Conferencing

I was recently asked to do a presentation on BrightTalk. I was very impressed with their automated presentation delivery platform. It's a true Web 2.0 application for both presenters and attendees. They make it very easy to record a Webinar! They also have some great content.

The webinar that I recorded is called "Building a Low Cost Computing Grid for Scale." If you get a change, check them out!

Wednesday, November 5, 2008

Books on SOA


I've been reading a number of books on SOA lately. There are a number of excellent books that have been written over the past year on the subject. A great many of them were published by PACKT.

For example, "SOA Approach to Integration" is a an excellent book!

Another great book that I read is Service Oriented Architecture with Java. I thought this was an Excellent book and I thought Steve summed up the book quite well:


An absolute pleasure to read…the best SOA book I’ve read for Java and SOA for current technology. A book I would recommend to all of my colleagues; it provides much insight to the topics often overlooked by most books in this genre like Data Services and Service Component Architecture…the XML code is fantastic.”
–Steve Parsons TUSC


Wednesday, October 29, 2008

Feedback on the Consuming Services Webinar

I'm looking for feedback on the Webinar that I'm doing on how to consume Web Services (and how to create them) with Oracle Application Express. If you're interested in participating in our upcoming voice-of-the-customer studies or surveys please send me an email.

You can find the recorded Webinars at:

http://www.tusc.com/iperspective

You can also find more information on our technology at:

http://www.tuscsoftware.com

Thanks!
Brad

Saturday, September 20, 2008

Picture is Worth 1000 Words - n-Tier Architecture


Thursday, September 18, 2008

Scaling Oracle Application Express (ApEx) with a true n-tier Architecture

Do you like the power and flexibility of Oracle Application Express (ApEx)? I sure do! But...are you frustrated by the fact that it chews up DB cycles generating dynamic HTML pages? Do your architects and DBAs go mad thinking about this? I know I sure have! I've developed a number of ApEx applications over the years. I co-authored a book on ApEx too. Many people will say ApEx is an excellent prototyping tool - or that it's a great "departmental" solution. All of the above are true. How about running an ApEx application for thousands of concurrent users? I've done this too, but we had skilled DBAs review every single SQL statement and the application was primarily a "simple insert" application - we weren't typically querying thousands of records. We also had a lot of computing power on the backend database box. This is expensive. In this blog entry, I'll tell you about another way to approach this issue!

Wait - can't I just run ApEx on an App Server and the DB on another box?
Isn't this what an application server is supposed to do for you (i.e. provide scalability)? How about running Apache with the PL/SQL module on another server and leaving the database where it is. If you read the documentation, this is certainly a standard best practice. Why? Primarily because you would put the App Server in the DMZ and keep the DB behind your firewall.

Does this approach help you scale? Somewhat yes, but in reality, not a lot. Your app server box will sit idle a lot. Why? Because not much can actually be done on the app server. Sure, you can store some static HTML pages there and you can store your images there too. But...the reason people build ApEx applications isn't for static information, it's because it does such a great job of building dynamic Web pages!

Wait - what about Caching?
Then you might argue that ApEx has some cool caching features, so what about those? Do you want cached information or dynamic information? How often do you and can you use caching? If caching solves the scaling issue for you, that's great!

What is n-tier scaling?
An n-tier architecture requires the following. First, the app server must serve the pages back to the user - i.e.they must truly be able to paint the Web pages. Also - when I think of app servers, I think of smaller, less expenses boxes, a load balancer in front of them. Second, there really should be middle tier that caches data itself (i.e. uses some sort of Data Access Object (DAO) pattern) and therefore only goes to the DB when it needs the data. I should be able to have as many of these boxes as I want too. Then...finally, comes the database. The database can be scaled with technologies like RAC and Grid, but I really don't want to put a load on the DB!

The above defines what I picture as a true n-tier architecture. Can you get this with ApEx? Not out of the box - no way! All of the requests hit the DB...so sure, you can put an app server in front of the database, but it's still going to hit the database to paint every page.

The Dilemma
Developers love ApEx because they build applications in no time flat. I used to call ApEx the backlog killer. Larry, my co-author called it the "Ankle-biter" killer - a tool that allows you to develop all of those small ankle-biter applications. Oracle initially talked about it as the Access crusher, the departmental tool, etc.

Architects want applications to be able to be developed quickly, but also want an n-tier environment - they want redundancy, they want scalability, etc.

There in lies the dilemma for an organization. Rapid development, but if the application is an external application, requires x users, or x throughput or our database is already taxed...most likely you're opting against ApEx and using something like JDeveloper (i.e. Java).

JDeveloper is great, but wow, what a learning curve it is for SQL and PL/SQL developers. Whereas ApEx's learning curve is 1/10th or less what JDeveloper's is.

OK, so how can I truly scale with ApEx?
First a few facts that are important to know. Oracle provides a free version of the Oracle Database called Oracle Express. It has limitations - like on the number of processors on the box (but app servers are cheap/small boxes) and the size of the database (limited to 4GB - in the iPerspective architecture, the DB won't even get close to this).

Second, if you don't know this already, ApEx is free with any Oracle database - including Oracle Express!

Third, ApEx can query directly from an Oracle database, but it can also query from (or use) Web Services. Most people query directly from the Oracle database. So not only is the DB getting taxed with SQL queries, it's getting taxed with painting HTML pages (i.e. generating dynamic HTML). The important thing to know is that ApEx can consume services - for charts, graphs, reports, most anything!

iPerspective Architecture
Now that you have all of the background, it's time to talk about the iPerspective architecture. I will now describe in general terms what I have done already for a number of clients.

Front-end tier
The clients will stay as they are. They will continuing using the browser of their choice! Chrome? FireFox? IE? Whatever.

Back-end tier
Your database will stay exactly where it is today. However, your database’s load will be lightened significantly!

Presentation-layer tier
As mentioned above, Oracle Express and ApEx are free. You can run as many of these boxes as you would like - all for free (on the software side anyway). We’ve also found that it’s worth paying for larger boxes (less to manage) and paying for Oracle SE One or Oracle SE Licenses. The good news is you have the flexibility to do what you need based on your demand.

Your Oracle Express database is going to store nothing more than metadata about the ApEx application and about the services that you'll be calling. The data will come from your existing back-end tier (i.e. the main database) through Web Services. ApEx consumes services to get the data when it needs the data...and at no other time. The backend will no longer be painting Web pages - rather, the presentation layer will be doing what it's designed to do.

Application Server tier
This is where our iPerspective product fits in. Of course, you could build the services on your own, but why? We make it so easy for you to do this! To do this right requires a LOT of research. We've done the research. We use the latest and great open source technologies and standards in our product. If you're hoping to get data from Web Services, REST, JSON, etc. - our product will do this for you! We follow industry best practices. We allow you to re-use your existing data, your existing business logic and more! Don't re-invent the wheel - believe us, it takes a huge amount of time and effort!

ApEx will make service requests of the App Server tier - and it will communicate with the database when it needs to...just like an app server is designed to do. And you can run as many of these app server boxes as you would like as well! Inexpensive to expensive boxes - you decide.

True n-tier
As I said above, this is a true n-tier architecture! With this architecture, everyone is happy! Developers are happy because they can develop ApEx apps quickly and easily! Architects are happy because they can implement a truly scalable n-tier architecture. DBAs are happy because you're not pounding their database painting HTML pages! CIOs are happy because they aren't spending a fortune on database licenses or hardware licenses for the database server.

Automatic Web Service Registry Publishing to ApEx
Another thing that I'd like to mention is that iPerspective makes this process extra simple for you. How's that? Well...when you create your services with iPerspective, you can publish your services straight into ApEx's Web Service repository! How's that for quick and easy!

3 types of Services
As was mentioned in my prior post, iPerspective creates a flexible service that allow ApEx to get back a 2 dimensional array of data. One dimension contains the rows and the other dimension contains the columns in the rows. Additionally, using iPerspective, you can create "fixed" services with "hardcoded" SQL statements in them. Most DBAs prefer this method of getting data out of the database - pre-defined explain plans! The final service type is a service that allows you to create new services. This type of service might just be applicable if you have other consumers of services (i.e. people outside your department).

Reuse
iPerspective allow you to reuse all of your existing data (i.e. tables), business logic data (i.e. views), and your business logic code (i.e. all of that PL/SQL code - packages, procedures, functions).

OK, so here's the REALLY cool thing about all of this architecture! Not only will you have a scalable, redundant architecture, but all of the services you create can be used by other applications! For example, the following can also consume these services:


  • BPEL/BPM or service-based workflow
  • Portals and Mashup tools
  • Operational BI tools / BAM

In other words, the services that you build, using your existing data and business logic can be used throughout your business! Not only by other departments within your company, but by other companies - if you want to expose these services externally.

Virtually any Data Source
By the way, so far we’ve talked about everything being in Oracle. Here’s another added bonus with iPerspective and the use of Services. iPerspective can pull from most any data source. In fact over 200 data sources – DB2, SQL Server, MySQL, Stratus, Non-stop SQL, Informix, flat files, Access, etc. In other words, you can pull data from just about any data source imaginable. iPerspective also includes an API so that you can write your own method of access your data.


iPerspective can read structured and unstructured data too! Email can be read, PDF documents, XML, other Web Services and so much more.

If you’re hoping to build an ApEx dashboard that pulls from numerous disparate databases – iPerspective will allow you to do this!


Core vs. Context

If you expose these services to your customers and vendors, you will no longer need to develop custom applications for them! They can develop whatever they want, whenever they want to! This allows you to focus on what you're great at and for your customers and vendors to focus on what they are great at - i.e. it will save you considerable development cycles, design cycles, etc. Your customers will get the exact systems they want because they don't have to spec it for you - they can spec it to their own IT department!

Taking Scaling and Redundancy one Step Further

There's one more feature in iPerspective that is worth mentioning here. Our services have the ability to provide load balancing, failover and physical partitioning capability to your database connections. In other words, there is an entirely new level of scaling that you can get above and beyond the architecture mentioned above. Let's look at each of these areas now:

Load Balancing

The connections to the database can be established such that they are "round robined." In other words, if you have 5 mirrors of your database, you can set up 5 connections. Each request is distributed to the next server in the grid. The round robin strategy is intelligent as well. If you want 60% of the load to go to one server and 10% to go to each remaining server, you can easily set this up for each cluster of load balancing servers...without load balancing hardware - this is software load balancing.

One way that we have used this in a production environment is that we wrote a process we call "the partitioner" that extracts data from our production (Oracle) database and places it into a MySQL database - this is an ongoing process based on "last update dates" in key tables. The MySQL database has 10 servers in it's replication pool. The load balancer distributes the load across those 10 servers. Some servers are bigger/faster than other servers, so they receive more of the load.

If any of the machines are down, iPerspective simply moves to the next machine in the pool. That machine is marked as "down" and rechecked every minute to see if it can be placed back in the pool.

Failover

For each grid of load balanced machines, you can also establish priority levels. All of the machines in the top priority level are "hit" with requests based on the load balancing set up. You could have just one machine in the level - i.e. your production database. The next priority level (and optionally an entire additional group of load balanced machines) will only be hit if all of the machines in the top level are unavailable. You can have any number of failover levels.

For example, if you have a bank of MySQL servers that are very current, they might be in level 1 and if you have another bank of machines that are used for reporting purposes, updated nightly and therefore should only be hit if all of the level 1 machines are down - iPerspective can handle this.

Physical Partitioning

To take things to yet another level, physical partitioning can be quite powerful. In early versions of MySQL, we found that it was best to keep our databases small - i.e. less than 10,000 records. MySQL's indexing techniques were not very intelligent, so simple queries often caused full table scans. Each zip code in the country resulted in about 10,000 records (i.e. homes/properties), so this made for perfect physical partitions. We placed all of the records for each zip code into it's own MySQL database/schema.

iPerspective allows you to establish physical partitioning. Physical partitioning by database, schema, table name, or even machine. A partition table tells iPerspective where each record exists physically.

Case Studies in Point
If you have an interest in seeing this architecture in action, we would love to show it off and tell you more about it. Our customers are also quite proud of this configuration!

Like a Demonstration?
If you would like to see this architecture in action, send me an email - I'd be happy to show this to you any time! Gotomeeting makes it quite simple to show this off. Or...if you're going to be at Oracle Open World, stop by the TUSC booth - I'll be there ever day! Booth 1024. Hope to see you there!

Follow Up to Questions
- apart from the ability to select from several sources (including non-Oracle sources) and replicas, what is the benefit of using web services over database links (maybe simpler, less overhead)?

Several things come to mind here. If we're talking just Oracle to Oracle - since you pointed out the other big advantage. First, database links have limitations. You can include CLOBs, LONG, BLOBs, etc. as data types in DB Link objects. You can include those object types in Web Services. I don't know if it's necessarily simpler since DB links are pretty easy to establish. Another distinct advantage in the Web Service world is virtualization. If the backend database moves or changes, your Web Service calls stay the same. I view DB links as fragile components - they always make me nervous.

- you mention using Express Edition, are patches (security patches and others) published for it? (if not, I would feel very unconfortable to base an architecture on it)

I agree with your thoughts here. I'm not recommending you base your architecture on Oracle Express. It's very limiting too. I was just saying that you "can" use Oracle Express servers if you so choose. I would recommend a "paid for" platform - at least SE One.

- from reading the post, I thought about another option for read caching: replicate the data on the local (app server box) database, using Streams (Apply is available in Express Edition) or replication (Basic replication is available)

I'm not sure I understand this question. If you're suggesting that you could replicate data to the app server box, sure, you could. I'm not a big fan of replication. I think it just makes "the problem" worse. I prefer to figure out scaling solutions that tax the DB less and less.

Thursday, September 4, 2008

Flexible, Extensible, Powerful Services

What if you provide your customer with "custom made services?" Actually you can today and in this blog entry I'm going to tell you exactly how to accomplish this.


Flattened Logical Model

Any physical data model can be confusing to your customers, vendors or whoever will be accessing your data. Therefore, the first step is to create a logical data model that will be used for service delivery. Another way to look at this model might be as a domain model. Customers, Orders, Vendors and the like rather than than customer_main, customer_address, etc. In database terms, these are simply views. Business logic around your data!


Customers Can Write Their Own SQL

If a service allows your users to write their own SQL statement to query whatever columns and rows of data that they want to access and to join the views that provide the content they want to use, you're users will have full control over the information that they have access to. For example, in a database that contains all of the properties for the entire country, what if a user could easily query all of the properties that were listed (for sale) in their neighborhood today?

If you give users their own data model and allow them to write their own queries, they will be able to get whatever they want, whenever they want it. Self-service Services! Talk about flexible, extensible services!


Custom Services

Using the above technique, your users would be able to design and develop their own custom services. The services would provide them with the exact data that they want to see whenever they want to see it. Take a minute to think about how powerful that is!


Protection from SQL Injection

SQL Injection is always a consideration when it come to writing SQL statements against a database. Using the security mechanisms below will help you protect against injection attacks. We have our security layer to help with this too, but if you build this on your own - beware of this "feature."


Non-Dynamic Services
If the above described situation raises the hair on your neck, you can always create non-dynamic services (i.e. pre-defined queries) to your users. iPerspective allows you to quickly build a query from any number of databases and to create a service providing that data!

Service to Create or Submit a New Service
If you have an interest in not providing totally dynamic service features to your customers, you can create a service that allows customers to submit a new service request - they would create the proposed service and which would be reviewed by the administrator before it was published as an official service. We offer this option within iPerspective too!

Security Layer
Databases provide excellent security layers for accessing data - all the way down to column and row level security. There's no need to re-invent the wheel. Concepts like virtual private databases help protect your data! Using database authentication can provide you with some powerful security options that are built into your database!

iPerspective
I've mentioned the name a few times in the article...you might be wondering what I'm referring to. I have some exciting news. We renamed Instant SOA to iPerspective! Why? Because our product is about much more than SOA. And just because the SOA term is here today, who knows where it will be tomorrow. SOA is an architecture, not a product. And...can you really get into SOA instantly? We can certainly expose existing database business logic and data as services instantly, but SOA is also much more than Web Services, REST, etc.

As I mentioned, you could build all of this on your own, but why?

Is SOA Only for the BIG Companies?

This question has been bothering me for some time now. So I asked my good friend this question. He runs IT within a company that's not exactly small, in fact, they are a public company. The happened to have an efficient IT group - powerful, small, cohesive, and smart.

He responded and said "SOA is not necessarily for "large" companies. However, I do think it requires having two or more groups of programmers OR two or more complex integrations between systems that are SOA-able, which makes it more suitable for large companies."

He's absolutely right! There's no doubt that once you have 2 or more programming groups, systems to integrate, etc. - the more you need a Service Oriented Architecture.

He went on to say "For example, my company has one small group of programmers and really only one database that could conceivably have services. We do most of our "integration" with a non-relational database which has no tools and is not capable of using or presenting web services." I believe that every company has MANY databases that the don't consider databases. Databases in Outlook - schedules, contacts, etc. Databases in Excel - financial calculations, budgets, etc. Data in unstructured sources - documentation, customer communication, PDFs, etc. Every business has human centric business processes too. In other words, manual processes that just can't be automated - the business logic is in the heads of the people doing the job. Also, any program - in a relational database or not, can be made into a Web Service. Any type of data (structured or unstructured) can be returned by services. In other words, if every system could easily talk to every other system in your business, I think we could automate many currently manual processes.

He also said "we don't really have any outside companies that we need to share information with, yet." I read the key word as "yet" - if it was easy to deliver this data to your employees, customers or vendors or other people or businesses - would it make sense then?

He concluded with "So SOA continues to be something that seems like a "nice-to-have" or "fun to think about it if I ever find the time" for me. It might be my lack of imagination, but SOA doesn't really seem suitable yet for anything I need to do."

My conclusion is that SOA isn't only for "big" companies, but it's absolutely for "big" companies. Maybe I should ask the question the other way around - does SOA make sense (today) for every company? But I knew the answer to that question already - of course not...not yet!

Wednesday, September 3, 2008

Reuse is the Key

Reuse 101
In my first computer class (many many years ago), there was discussion about reuse. Back then we called our reusable chunks of code subroutines...today we call them service components. Reusable chunks of business logic. Back in the day, we talked about structured code, which was never to contain a goto statement. Oh, those were the days weren't they!

Below are nostalgic memories of how the idea of Reuse has evolved over the years and then an explanation of how SOA fits into the evolution of reable computer programming.

Assembler - Painful to write but FAST!
Then came that assembler class - wow, was that painful. But then again, you couldn't write any code that operated faster than assembler did! When I worked at the Chicago Stock Exchange (about 1985), we didn't want to put the "real time" data into our Oracle database - why not? Because writing to the database added an extra layer, which affected performance. Eventually we stopped writing Assembler and started relying more on higher level programming languages and even on the database! What happened to those performance considerations? Did we just throw more hardware at it? Fortunately yes, but also the benefits finally outweighed the performance implications.

Hardware Portability - Reuse 102
Oracle had developed a platform that ran on most any hardware! The fact that we could write our code and store our data on any platform was incredible. I remember writing an Oracle Forms application for a large bank in Chicago in the early 90s. They were running Oracle on a large mainframe...and we did our development on our desktop machines - i.e. 286s! How cool was that? We were able to write the code and deploy it on any platform that the bank wanted to run it on. Those Forms might still be in use today!

You Have to Love PL/SQL - Reuse 201
Oracle came out with their own programming language - PL/SQL to add procedural logic to SQL. PL/SQL procedures and functions brought re-usability to everything we did. All of our business logic was attached to the database - right on the same platform. Reusable units of code.

What Ever Happened to CASE?
Some time ago, Computer Aided Software Engineering (CASE) seemed to be the way of the future. The upper CASE tools were used to design our systems and via the lower CASE tools, our specs were going to write all of our code! For a period of time, those specs did generate a lot of code. I was fortunate enough to have the "opportunity" to try to enhance some of that code. Fortunately that phase disappeared about as quickly as it came. For years programmers feared they would no longer be needed. Fear no more!

Along Came Java - Reuse 202
Today we were talking about Java programming and wondered what we did before Java? A language that runs on all platforms - how cool is that? Write your code, access your database and deploy it on any platform - for free. There is so much "free" code available today, it's absolutely amazing! Again, reusable components at your disposal.

Ah, ha - No More Comma Delimited Files - Reuse 301
Then along came XML. The ability to share / reuse our data inside and outside our company. Re usability was great, but without standards for delivery, reuse was inconsistent. Along came SOAP and Web Services. A protocol to enable the delivery of data (based on XML).

Is it Time to Graduate Yet?
So here we are - in a layered world. Assembler, operating systems, databases, programming languages, XML, SOAP and so much more! What does it all mean? How does this fit into your environment? Do you need reusable components? Of course, we all do!

I Get it. Reuse is the Key!
In IT, we'll continue to layer it on and we'll continue to improve upon what we've developed. We might be nearing our undergraduate degree, but we're far from our graduate work or our doctorate aren't we!

Reusing Everything You've Built Already
What if you could reuse all of that business logic that you've already built? Wait, you can! That's what the service architecture is all about - reuse. Another layer of abstraction has just entered our programming world. The ability to build a service and use it everywhere is here. Not just within Oracle or across Oracle databases (i.e. executing a PL/SQL function across a database link), not just across platforms or programming languages, but across your organization and even across organizations!

It Seems So Complex or Too Good to Be True
When I first read about Web Services (or .NET in the Microsoft world) I thought it sounded too good to be true. How can I execute a program (written in a language that I don't know) on a server (on an unknown platform or one we "don't support?"), get the data back and make a decision based on that information? How would I know the inputs required for that program? How would I interpret the output? Do I just get a simple response in a string? To the contrary - the output can be as complex as you can imagine it might be - nested objects, arrays, etc.

The WSDL
An XML syntax called the Web Service Description Language (WSDL) defines all of the reusable components (by name) and the inputs and outputs for each of these components. Yes, it's that simple. Today, almost every development tool imaginable understands how to read a WSDL. So if you're doing Java development using JDeveloper, Eclipse, NetBeans, or whatever tool - it knows how to read a WSDL. If you're writing your applications with Oracle's Application Express (ApEx), it understands WSDLs. You're using a mashup or portal tool - they know how to read a WSDL.

For Example - The Customer Domain
Let's say that you've already created a PL/SQL package that contains a series of reusable business logic. For my example, let's call the package the "Customer" package. It contains the business logic required to add a customer, update information about a customer such as marking a customer's status and so forth. In addition, you have a view that can be used to pull all of that customer information together (from the underlying storage objects / tables).

The Magic
Let's say that you were able to expose the above package and view as services. The services would each have a WSDL associated with them. The WSDL tells another tool (or developer) the inputs to the available operations (i.e. functions) - such as the customer number or name and the outputs that will be provided by the operation. Imagine that - any program can now access your business logic and business level data. Magic right? How's that for reuse? But wait, nothing is magic, so how do you bridge this gap? From a package in the Oracle database to service that anyone can use?

Insight
It's much easier than you might think! Thinking back to my high school and college math for a minute, I remember that I learned the "long way" to do calculus calculations and then the "short way." In my programming classes, I can remember writing code the long way (i.e. assembler) and the easy way (i.e. not assembler).

When it comes to the creating a service architecture and service components, the same is true. You can use tools like JDeveloper to wrap an existing package into a service. You can put all of your pieces together to deploy your application to your application server. There are many "manual" methods of creating these services.

There is also an "easy" way to accomplish this...and create a registry of services at the same time. Why is the registry important? Everything goes full circle of course - reuse! You don't want to create a service that you already have AND you want to be able to easily locate the services you have! Back in March I first blogged about Instant SOA - our code name for our new service creation product. We've now renamed Instant SOA as Insight.

Insight greatly simplifies the process of exposing your existing business logic as reusable components! Literally within minutes you will be creating (and consuming) your first services.

Sharing with Other Departments
Once you have these reusable services, how can you use them? First off, you might choose to share those services with other departments. So that they can add new customers or so they can look up customer information. Imagine how powerful this reuse will be for your company!

Sharing with External Organizations
Another option is that you could share your data with external organizations. You might allow your customers to maintain their own addresses through the services. Or maybe you want to provide them with access to their orders or other valuable information. You could allow them direct access to add new orders, look up inventory/product availability and the like.

Service-Oriented Workflow
When services go beyond your department, you might need to orchestrate the flow of tasks that occur. For example, when it comes to adding a new employee to your company, several departments (and systems) might be involved in this process. Today's workflow engines know how to read WSDLs! This makes the orchestration or coordination of the workflow a simple diagramming process!

Service-Oriented Integration
Or you might be interested in integrating your systems together. Historically we built point-to-point (or one-time wonders) integration programs. These typically involved FTPing a comma delimited file, which was parsed, loaded, exceptions were handled, etc. Now that all systems have access to other systems, integration becomes much easier than it was previously.

Reuse is the Key
Why reinvent the wheel? Why re-write your code? Why not take advantage of all of that business logic and data that you already have throughout your organization? You can take what you have into the service-based architecture - it's time!

Here's the real kicker - this is even better than being able to reuse everything you have today! Once you build your service components, you'll be able to use those components everywhere - inside your company - outside your company - talk about reusability!

Wednesday, June 4, 2008

SOA is HUGE

For the last month I've been interviewing countless companies on their status of venturing into the world of SOA. Some companies have been doing "SOA" for more than 5 years, but a great many companies haven't even started down the SOA path. We're (TUSC) working with a number of companies to help them put together their SOA road map. I've been talking about Web Services (what I call a light-weight SOA implementation) for more than 5 years now. As I've talked about before, 2 1/2 years ago I bet the farm on SOA at IntelliReal.

I can absolutely understand why the vast majority of companies have not started down the SOA path. There is so much FUD (fear, uncertainty, doubt) out there that it makes it difficult to know where to start. As experienced SOA companies will attest, the scope of SOA is massive. As companies start researching SOA, the concepts get deeper by the minute. Between all of the acronyms, terms and technologies such as buses (ESBs), Message queues (JMS, MQueue), compliance, governance and so many more - people get overwhelmed quickly. Each topic is it's own Pandora's box! The bottom line is SOA is HUGE!

But...it doesn't have to be. You don't have to boil the ocean to venture into SOA. The service-based architecture is based on open standards. So if you "mess up," you can always fix a limitation, bottleneck, closed standard or whatever your issue may be. As I've been pleading with companies - dip your toe into the Ocean and see how that feels first. You don't have to jump off the high platform into ocean to start your journey into SOA...in fact, I wouldn't recommend that approach - it can really hurt!

What's the first step in this process? Service-enabling existing services, using existing technology, and with your existing skills. You can do this one service at a time with tools like Eclipse and JDeveloper (free integrated development environments - IDEs). For example, JDeveloper allows you wrap an existing piece of PL/SQL (for the Oracle world) or Java code and expose it as a service. You'll need to learn about the IDE, about Java, about app servers and plenty more to get going. That's enough of a dip into the ocean to get you going down the SOA path. Once you have services, you'll find countless ways of consuming those services. From data conversion to loosely coupled integration to mashups and portals to so much more - SOA will help you. Most companies start with system integration as their first SOA effort. Low risk, high reward, added value.

Now for my product pitch. I developed Instant SOA to help companies dip their toe into the SOA ocean without having to learn about the IDE, without having to learn about Java, app servers or anything else. All you need to know is which services you want to expose as Web Services. Instant SOA will bundle up the Web Services into a deployment file for an app server and it will even deploy it to the app server(s) for you! You simply go down through your list of services, choose which services are to be exposed in which release and Instant SOA does the rest for you. In a matter of minutes can you go from writing a service (in your native tongue, such as PL/SQL) to exposing (and consuming) the service in your SOA. It doesn't get much easier than that!

You can expose data services (tables and views in your databases) or technical services (packages, procedures, functions in your database) instantly! For you, Instant SOA will demonstrate a quick win! Do you have a data warehouse full of great information that should be shared as Web services? Do you have systems that are integrated using point-to-point integration techniques that would ideally be replaced with loosely coupled integration techniques? Doing so will mean that changes to the structures under each of the systems don't break your integration! Maybe you currently have point-to-point gaps between systems - for example, maybe the H/R system can't talk to your ERP? Do you duplicate data throughout your organization? Would it be better to read that information real-time so it's not stale - and not copied when you might only need it once a month? If so, you'll love having a SOA!

Do you have a number of existing services in your company? Most companies do! With our Instant SOA Repository Manager, you can easily find services, create domains, categorize, and catalog your services. Instant SOA has a built in repository with full documentation capabilities. Instant SOA can also publish your services to an open registry service (i.e. UDDI).

How can you get started in SOA? Instant SOA! In the next week or so we're going to put on another Instant SOA webinar. If you want to see how easy Instant SOA really is, you'll want to attend this session! Watch the TUSC Instant SOA site for more information.

BTW, the Instant SOA user interface (UI) is MUCH better than the demo shown below. We have greatly simplified the UI...as you'll soon see!

Sunday, April 27, 2008

Instant SOA Questions

I've had a number of questions that have been asked about Instant SOA. I thought I'd address those questions here. Thanks for all of the questions and please keep them coming!

FYI, you can view my recorded Instant SOA webinar session on the TUSC site.

Question: As a Corporate Officer – What is value added to me?
Answer: There are a number of value components for different people within your organization. I believe the primary advantage overall is speed to market. In other words, Instant SOA allows you to move your organization into a full-fledged service oriented architecture very rapidly. SOA provides you with an amazing ability to deliver on business requirements. How? Because you're able to use what you've already built - there's no need to re-build anything. The concept that you can now take all of your existing applications, programs, data, etc. and bring it together as if you have one homogeneous application is simply amazing power!

Another potenial future cost savings is that the product will pay for itself. Not only do you get to use everything you've already spent years developing, the fact that you don't have any unintended redunancy (data or code) is a big savings. Redundancy is very expensive for a business. For example - How many versions (definitions) of delivery date do you have in your company? Do you know how many code procedures your company maintains to support delivery date?

Redudancy costs:
  • It causes miscommunication of actual data to a customer.
  • Additional staff is required to support multiple code versions.
  • Additional data storage mutiple versions of the same data.
  • Complexities for recovery and deployment

In other words, this is the first viable tool which allows a business to quickly and easily document and track those reduncies to reduce future duplication, and allow a business to manage current replication of applications and data.

Question: Does the product separate the resulting metadata by deployment type (procedure, table, function, etc…)?
Answer: Within Instant SOA, you can view the metadata by deployment type. This simplifies the exposure of the existing objects. Instant SOA allows you to bundle together any number of components into releases that are deployed to any number of application servers. Instant SOA manages the metadata for you.

Question: How does the product relate the resulting metadata to the place of origin and is that easily visible?
Answer: Instant SOA exposes all of the metadata in the user interface, in the WSDLs that are created, in the database objects that are created and in UDDI. All of the mapping and origin information is very easily visible.

Question: How do I easily manage the resulting voluminous metadata within the product without being overwhelmed?
Answer: Instant SOA manages most of this for you. It groups the information as mentioned above to help you search through the information. As was also mentioned, you can group objects together into any number of release deployments, which would help you manage a large number of objects.

Question: How do I identify and manage redundancy like attribute synonyms, duplicate procedures?
Answer: Instant SOA manages this for you by tying everything back to the owning schema. Therefore, you'll only see a program (e.g. procedure) or data (e.g. table) one time.

Question: Can I assign any type of ownership to each “method” in the product (i.e. this manager owns this and another manager those)?
Answer: The best way that I can think of to manage ownership would be by release.

Question: To what level of detail does the product capture table attributes?
Answer: Instant SOA manages the table attributes and stores this information in its repository.

Question: Does it handle DB TRIGGERS, and then what objects does it not handle?
Answer: Database tables triggers are handled. In other words, if you insert into a table and it has an insert trigger on it, the insert trigger will fire. If you're referring to database level triggers such as when a user logs in or out, those are also managed. Remember that everything that's in place for your database today, remains there. Instant SOA is simply "wrapping" the existing functionality. In terms of what Instant SOA does not handle, it currently manages tables, views, packages, procedures, and functions - no other object types are managed by Instant SOA today. However, if there is a reason we should include additional object types, please let us know - we'll consider adding them.

Question: Can the product be used for migrations (like sql server to Oracle DB)?
Answer: Absolutely! Instant SOA's Periscope functionality can create database objects. Periscope allows you to migrate SQL Server objects in no time. I need to be specific however, it allows you to migrate data, not programs. However, if you want to keep the programs where they are (i.e. in SQL Server), you would be able to execute the SQL Server from Oracle. Any Oracle product would think it was executing a PL/SQL block of code - when in fact, it would be executing a SQL Server block of code.

Question: Are there any existing naming convention limitations within the product like length of a column name?
Answer: Oracle does have limits on column and table names. They cannot be longer than 30 characters. Periscope will automatically manage the names for you. SOA is an open architecture and it does not have any limitations such as the length of a column or table name. Therefore, Instant SOA does not have any issues with naming or other conventions. Instant SOA does migrate names to follow open source standards for method (and Web Service) naming. For example, a procedure called COMMON_PACKAGE in Oracle would be called CommonPackage as the service name.

Question: If I understand the current product flow correctly, then it becomes the front end to a larger corporate flow besides reuse.
Answer: Instant SOA generates objects, which can be used by any SOA-compliant tool. SOA doesn't really contain "front-end" interfaces. Something like Oracle's Application Express (ApEx) is an excellent front end development tool, which can use SOA components. You are correct - all of your existing programs and data can be re-used.

Question: This kind of a tool has been needed for a long time in corporate data to document what is currently out there on the data and process side to capture the “as is model” of a corporation. After this data is captured by the tool, I then want to manage all of this data by relating it to current / future business processes, assign ownership, determine redundancy, assign corporate definitions, plan integration changes, create “to be model” , create “transition model.” So what are your thoughts about packaging this tool into a larger methodology like corporate data?
Answer: You're correct, Instant SOA allows you to use all of your structures and unstructured data as it is today. We're currently working with the CA Erwin team to develop a master data model (MDM) that can generate SOA components. At this point, Erwin can be used to document your MDM. Instant SOA allows you to make use of the entire MDM in SOA. Hopefully in the next 6 months we'll have some exciting new announcements about Instant SOA and Erwin that will allow you to document and generate your MDM for SOA - all in one tool.

Question: I had a small question about data types. When you expose a view/table as a service how do you map the DB types in WSDL? For example if you have stored an image as a blob how do you specify it in WSDL in order to get that image?
Answer: Data types fall into the following categories - string/text, number, date, blob/clob. Blobs are byte arrays in SOA. The other data types are handled natively.

Question: Can I buy the product or is it only available through a TUSC consulting engagement?

Answer: Instant SOA is available either way. If TUSC does the consulting engagement, the cost of Instant SOA is more heavily discounted.

Question: If I can buy the product how is it licensed and what does it cost?

Answer: You pay for each application server that Instant SOA is deployed to. Instant SOA pricing is very similar to Oracle's App Server pricing. $5,000-40,000 per CPU socket.

Question: Is there a required maintenance agreement?

Answer: Not required, but it's strongly recommended. Maintenance and support fees are 25% of the license fees per year.

Question: Is training available?

Answer: Absolutely!

Question: How is product technical support handled and is it 24 x 7?

Answer: Technical support is currently handled through our remote database administration support team as the front line support. We have a special Instant SOA support team for issues that the RDBA team can't address. 24x7 support is not currently available. However, if this is a requirement, we can offer 24x7 support.

Question: How will product enhancement requests be handled?

Answer: We have a standard product enhancement request process. Requests are prioritized into future releases.

Question: How often will new releases of the product be available?

Answer: We're currently on a quarterly release cycle.

Question: Since TUSC is now owned by Rolta what is the possibility of Rolta pulling future support of the product?

Answer: Previously TUSC was a services company. Rolta is very much behind growing TUSC's software business to more than 30% of TUSC's revenue in the next 5 years. The more software revenue the better. In other words, I would say the risk of Rolta moving away from software development and support is very low.

Thursday, April 10, 2008

Yahoo Pipes

Wow, Web technology just keeps blowing me away more every day. If you haven't checked out Yahoo Pipes yet - do! Talk about an easy way to mashup data and deliver it into your application. Point and click your way there, publish it through what's called a pipe...and away you go. The pictures from "Littleton, CO" on my right sidebar are a Yahoo Pipe.

Thursday, March 20, 2008

Instant SOA - The Patent has been Filed!

I have some exciting news to share. Our patent has now been filed for our Instant SOA technology! So I can now share this exciting news with you all! As the name would suggest, this technology will allow you to move everything you have into a Service Oriented Architecture - instantly. I'm certain you're going to love how this technology is going to help you out! We're looking for customers now - hopefully you'll give us a call to help you deploy this proven patent pending technology.


In this blog post I wanted to give you a little flavor for how INNOVATIVE this technology is. We have plenty of business-side presentations about Instant SOA and SOA in general, but this post is on the “technical side”, this is literally how simple it is to move your architecture into a SOA with Instant SOA. There are only 5 steps to success, which include:

  1. After starting up Instant SOA in your browser, you'll choose the database vendor (i.e. Oracle, Sybase, SQL Server, etc. - over 200 choices are available) that contains existing components (i.e. data or program units) that you wish to make into SOA components. I'll choose Oracle, which is one of my choices – Instant SOA supports hundreds of databases:


  2. Next, you'll choose a specific database to connect to – or you'll create a new connection – which is as simple as specifying a host name, database name, TNS port – for Oracle that is. For other platforms, it’s the same basic idea. For this demo I connected to my local Oracle database instance:



  3. At this point, Instant SOA will provide you with an entire list of database components (tables, views, packages, procedures, and function) that you can instantly make into SOA components. Simply choose (check the boxes) the objects to make into SOA components:



  4. The final step is you will choose the app servers (e.g. Oracle IAS, Oracle OC4J, BEA, JBoss, etc.) to deploy your new SOA components to and you'll click on the "virtualize objects" button:


  5. Pretty simple so far isn't it! At that point, you’re done! All of the services that you checked off are now available (to ApEx, BPEL, anything that can read a WSDL file) as SOA components. Through the app server, Instant SOA even provides a browser-based interface to interact with the Web Services manually – including full WSDL support for each service that’s been created:


In the example below, you'll notice that I virtualized a package named Periscope_Common from my Oracle database. All of the procedures and functions are automatically exposed as methods (or you can limit the methods exposed if you desire) in the SOA services – you’ll also notice that we “javaize” the names - PERISCOPE_COMMON is named PeriscopeCommon:




It's important to know that Instant SOA is fully “big system” ready. In other words, if you have a lot of schemas, Instant SOA will show you a list of schemas from which you can choose and limit the results displayed. If you have many objects in a schema, Instant SOA will allow you to filter your lists down to a representative set quickly. These "enterprise" features make it simple to find your objects quickly.

Beyond program units (i.e. packages, procedures and function), tables (and views) can even be made into SOA components. Virtualizing tables or views allows developers to immediately access data (in any database) via the SOA! Those pesky Excel spreadsheets and Access databases can even be made available as SOA components! For example, above you may have noticed the EMPTAPI – this is the EMP table’s API. This service contains a fetchTableSet method, which has one input parameter – the number of records to fetch:




The built in services also allow you to easily limit the data queries (i.e. with a where clause), order the data (i.e. with an order by), group the data (i.e. with a group by), or limit a group by (i.e. with a having statement). Any of these parameters can be specified on the fly. The services are all stateful services, which means that Instant SOA automatically provides full cursor management based on the number of rows you specify to fetch in each call.

Via the Web Service browser interface, developers can quickly test out the Instant SOA services. For example, via the browser, I can query the EMP table using my Instant SOA EMPTAPI fetchTableSet method:




As you can see – Instant SOA holds up to its name! If you're interested in a demo, send me an email or give me a call any time! Instant SOA installs in minutes too! We'll soon be providing a downloadable install on the TUSC site, so you'll be able to download it and try it for yourself in the middle of the night - I know that's when you find time to play with things like this - OK, maybe I'm speaking for myself now...

Oh, but before I forget...do you:

  1. Feel like after you pick objects from the list that you might want to add, change or delete indivdual components at will...no problem, Instant SOA allows you to do this at any time. Once again, all from the click of a few buttons in the browser.

  2. Wonder about your ability to deploy these services to additional servers, cluster servers, load balanced servers, etc? Again, no problem. With one click, you can deploy a service to any app server at any point in time. It's really that easy.

  3. Want to add an authentication layer to your services? Once again, no problem, Instant SOA allows you to seemlessly add an authenication layer to your services. Digest, database, LDAP, Single Sign On or most any authentication is supported.

  4. Have databases that I didn't mention? No problem! Instant SOA supports most any database imaginable. Including hierarctial databases, PICK, and many other "goofy" databases.

  5. Have data in places other than databases? No problem! Instant SOA supports most any flat file system, comma delimited (CSV) files, XML data and more. Instant SOA even support numerous protocols - for example, SMTP! You can virtualize your email and publish it as an authenticated service.

  6. Want to not only query data, but you would like add (insert), change (update) and delete data? Not a problem - Instant SOA fully supports full data manipulation (DML).

  7. Want to package up your services first? In other words, you would like to deploy high level services rather than low level SOA components? No problem at all. Using your native tongue (e.g. PL/SQL in the Oracle world, Transact SQL in the SQL Server world), you can write high level services and then use Instant SOA to publish them as services.

  8. Wonder what's going to happen when you change your unlying database services? Not a problem! Instant SOA simply calls your programs from their native environment. Therefore, if the structure of your tables or program units doesn't change, your services will continue to work just fine.

  9. Now that I have you thinking about this - are you wondering what's going to happen if you change the underlying structure of your database objects? Again, this is no problem. It only takes seconds to automatically re-create your services. There is a command line interface for Instant SOA, so if you do this often, Instant SOA can monitor your objects and automatically refresh SOA objects when the underlying database objects change! How cool is that! In fact, Instant SOA supports full versioning of your releases. You can publish any number of versions concurrently too.

  10. Have a concern about failover, redundancy, scalability? Don't be! Instant SOA simply fills in the middle for you by creating the services. Whatever application server you choose will provide for the failover, redundancy, scalability, etc.

  11. Need to publish a UDDI directory with your services? No problem! Instant SOA can automatically publish to any number of UDDI directories for any and all services that are created with Instant SOA. The comments published come directly from the comments in your database object documentation by default!

OK, are you excited yet? I'll throw in one more bonus for you. The objects that are created in the SOA can also be published in an Oracle database! So program units from MySQL are fully executable from Oracle and tables are fully queriable (and updatable) to Oracle. In fact, any program that's accessing you Oracle database won't know that the data isn't coming from anything other than Oracle itself. This makes development MUCH faster for your Oracle developers because they don't need to learn anything about SOA or these other databases!

By the way - if you're interested in watching a Webinar on this, we have them scheduled for April 9th, April 23rd and May 6th at 9am PST, 10am MST, 11am CST, and 12am EST. Check ou the the TUSC site for more information these Webinars. The title is:

Instant SOA - Automating the enablement of the SOA for all existing database data and programmatic components

The Briefing: What if achieving a service oriented architecture (SOA) were easy? Although the benefits of having a SOA are undeniable, the cost of effort to “get there” is also great…at least it has been until now. TUSC is excited to introduce revolutionary technology, an “Instant SOA” offering, that allows companies to instantly move their existing architectures into SOAs – without effort, without re-writing any code. And we do mean instantly.

Intrigued? We welcome the opportunity to demonstrate this revolutionary new technology. TUSC is hosting a webinar and we would love to have you join us. The webinar will explain how you can instantly achieve the many benefits of SOA, including:

  • Increased business agility – Respond faster, process efficiencies
  • Reduced integration expense – Reduce maintenance and need for highly-skilled employees, and gain the freedom to select platform, technology and location independently
  • Real-time access to data (rather than stale data)
  • Loose coupling - Increase asset reuse
  • Reduced risk – Incremental deployment, quicker payback
  • Platform independence – Based on open standards
  • Low latency, high performance
  • Reliability, redundancy
  • Componentization, encapsulation, separation of interface from implementation

With these benefits within grasp, why wait any longer? For information, or to register for your choice of webinar date, go to www.tusc.com/instantsoa. In the event you miss the webinar, you can listen to it OnDemand by going to http://www.tusc.com/breifing beginning April 11 and listen at your leisure.

Sunday, March 9, 2008

Cool Apex Integration with AJAX, YUI, Google Maps, and more

A few people have asked for information about integrating Apex with YUI, Google, etc. I have not written an article to go along with my presentation yet, but I wrote 2 things that might be of interest to you. First, I wrote a PPT presentation that discusses these topics in detail. Second, I wrote an Apex application that demonstrates each of the topics covered in the presenation. I'm presenting this topic at the Utah Oracle Users Group (see their Apex website) on Friday. You can download the presentation and the application at the TUSC site. You also might be interested in my Advanced Apex Topics presentation, which includes several great examples for Apex...and there is an application to go with that presentation too. I continue to be impressed by the Yahoo User Interface Toolkit (YUI). It's SUPER easy to embed YUI functionality (i.e. Web 2.0 functionality) into your Apex application - it's quite cool! Have fun!

Saturday, March 1, 2008

Apex 3.1 is out!!!

If you're an Apex lover like me, I'm sure you'll be as excited to learn that the next version (i.e. version 3.1) is now available as I was! I upgraded my personal Apex instance tonight. As usual, the installation worked without a hitch. The feature that everyone's been talking about is the interactive report writing feature. It's every bit as cool as it sounds. This new feature includes the ability for users to not only sort their reports, but filter, group (control break), highlight, compute extra values, add or remove columns, display the data in a chart and so much more!

You can download the new version on the Apex.oracle.com site. The beautiful thing about Oracle's Apex product is that Oracle's made it so simple to upgrade to each new version...and this version once again follows suit in this category. This is the only product that I've ever worked with where everyone's who's developing with Apex performs the upgrade typically within days of the release. What an accomplishment for the Apex team!

You're going to want to download and install this new version immediately...

Monday, February 18, 2008

Consuming Web Services

Let's say you want to consume Web Services (whether .NET or Java services doesn't matter) directly from your Oracle Database. If you have version 10g of the database, you can use the UTL_DBWS package. Using this package makes like a lot easier for you the developer. It will read the WSDL file and figure out the inputs, outputs, etc. for the consumption of the service. That's the good news. The bad news is that it seems to read the WSDL file every single time you call it, which makes it perform poorly. This isn't a big deal if you're calling the service once in a while. In our case, we call our services millions of times...so every second counts.

If you're interested in using UTL_DBWS, you'll find a good article about this at:

http://www.oracle-base.com/articles/10g/utl_dbws10g.php

Here's a good article using UTL_HTTP, which is faster, but more difficult and more fragile:

http://technology.amis.nl/blog/?p=358

Here's a good example of one of my processes that uses UTL_HTTP instead. It's faster, but as you can see, we have to encode the XML outselves:

CREATE OR REPLACE PACKAGE BODY Address_Ws_Util AS
FUNCTION get_id_from_address (

p_address IN VARCHAR2,
p_username IN VARCHAR2,
p_password IN VARCHAR2
) RETURN NUMBER
AS
soap_request VARCHAR2(30000);
soap_respond VARCHAR2(30000);
http_req UTL_HTTP.REQ;
http_resp UTL_HTTP.RESP;
resp XMLTYPE;
i INTEGER;
BEGIN
soap_request:= 'http://schemas.xmlsoap.org/soap/envelope/">'
'http://ws.customer.com/IRServices.wsdl">'
''
'' p_username ''
'' p_password ''
'' p_address ''
''
'
' '
';
http_req:= UTL_HTTP.BEGIN_REQUEST

( 'http://ws.customer.com/EJB-IRServices-Model-context-root/IRServicesWSSoapHttpPort'
, 'POST'
, 'HTTP/1.1'
);
UTL_HTTP.SET_HEADER(http_req, 'Content-Type', 'text/xml');
-- since we are dealing with plain text in XML documents
UTL_HTTP.SET_HEADER(http_req, 'Content-Length', LENGTH(soap_request));
UTL_HTTP.SET_HEADER(http_req, 'SOAPAction', '');
-- required to specify this is a SOAP communication
UTL_HTTP.WRITE_TEXT(http_req, soap_request);
http_resp:= UTL_HTTP.GET_RESPONSE(http_req);
UTL_HTTP.READ_TEXT(http_resp, soap_respond);
UTL_HTTP.END_RESPONSE(http_resp);
resp:= XMLTYPE.createXML(soap_respond);
resp:= resp.EXTRACT('/env:Envelope/env:Body/child::node()'
, 'xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"'
);
resp:= resp.EXTRACT('/ns0:getPropertyIdResponseElement/ns0:result/ns0:blsPropId/text()','xmlns:ns0="http://ws.customer.com/IRServices.wsdl" xmlns:ns1="http://ws.customer.com/IRServices.wsdl"');
RETURN TO_NUMBER(resp.getClobVal());
EXCEPTION WHEN OTHERS THEN RETURN -1;

END;
END;


Thursday, December 20, 2007

Web 2.0 (and AJAX) Toolkits with Oracle Apex

Would you like to take your Web applications to a whole new level, but don't want to spend countless hours writing AJAX and Web 2.0 code? Fortunately Google and Yahoo have greatly simplified this for all of us. Over the next couple of weeks, I'm going to demonstrate how you can integrate both of these toolkits into Oracle's Application Express (Apex). Google and Yahoo went down 2 completely different paths as I'll talk about soon enough. I can't find anything about the integration between these libraries and Apex, so I'll take that challenge on next.

Friday, December 14, 2007

SOA Approach to Integration

The SOA topic is a topic we've all heard plenty of times now haven't we? You might wonder - is this an early adopter term or something that's hardened today? Like most technologies, it depends on where you are on the adoption curve. If you're a late adopter, wait another 10 years and SOA will be in the late adoption stage. If you're an early adopter, you are using all of the SOA components aren't you! If you're somewhere in-between these extremes, it's time to study up!

Up until now however, this required a lot of independent research. How many books have you read on the subject already? How many magazine articles? I know my combined total is in the hundreds as I'm sure yours is too. Some sources provide hype without concrete examples, best practices, lessons learned and the like. I finally found a book that gets way beyond the hype and bleeds of "been there, done that." The book is the combined effort of 4 authors and I can see why! It is clear that an amazing amount of research went into documenting lessons learned through the early adoption phases and into less than bleeding edge phases.

SOA and it's components are rock solid technologies...if you choose the right foundational and architectural choices.

The book, as my blog title indicates is titled "SOA Approach to Integration." The authors are Matjaz B. Juric, Ramesh Loganathan, Poornachandra Sarang, and Frank Jennings. The subtitle for the book is XML, Web Services, ESB, and BPEL in real-world SOA projects. I like the authors individual backgrounds as they are similar to my corporate world, consulting world, adjunct professor, author, and open source experiences and passions.

The chapters are:
  1. Integration Architecture, Principals, and Patterns - does a great job of describing how we got to where we are today and explaining the different types of integration, which include data-level, application, business process, presentation and business-to-business integration. The different integration infrastructure layers are explained. These layers include the communication, brokering and routing, transformation, business intelligence, transactions, security, life cycle, naming, scalability, management and rules layers. This chapter also covers the integration technologies (e.g. database access, message-oriented middle ware, remote procedure calls, web services, transaction monitors, object request brokers, application servers and enterprise service buses). The chapter wraps up with an excellent discussion of the integration process including the steps, best practices, prototyping and reuse.
  2. Service- and Process-Oriented Architectures for Integration - this chapter does a great job of digging deeper into the definition of the SOA and why it's part of the integration space. The discussion of islands vs. enterprise IT landscape does an excellent job of demonstrating what most of us have seen occur in the corporate IT world. I really enjoyed the discussion about the paradigm shift from self-contained applications towards "service." This discussion reminded me very much of my "Internal and External Application Integration" post, paper, and presentation. I liked the way that this chapter just kept digging deeper and deeper in the topic of SOA and the details surrounding it all.
  3. Best Practices for Using XML for Integration - it's tough to talk about SOA, Web Services, BPEL and the like and not cover SOA. This is an "old" topic to me.
  4. SOA and Web Services Approach for Integration - this chapter did a great job explaining how to design an SOA, design Web Service, the differences between B2B and EAI Web Services, developing an interoperable WSDL, interoperability challenges with Web Services, and developing interoperable Web Services. I generally haven't experienced interoperability, but maybe it's because I've been fortunate enough to do more development and deployment of web services that I've created than having been a consumer of web services developed by others. I've always used JDeveloper to develop my services. The primary issue I've experienced have to do with providing both SOAP and REST-based Web services - this seems to create issues still today. I don't believe REST was covered (I'm not always good at reading every last detail, so I'm sorry if I missed it). I believe this is going to be the next big Web Service push - RESTful services that is.
  5. BPEL and the Process-Oriented Approach for Integration - BPEL is an extremely important when multiple systems require integration and any sort of workflow is involved. If all of your Web Service integration involves your own applications, BPEL is not required. This is what I commonly refer to as "light weight SOA." This chapter does a great job at covering the BPEL components and details. I was especially excited when I saw the Oracle BPEL Designer covered in this chapter. Oracle has an excellent BPEL infrastructure.
  6. Service- and Process-Oriented Approach to Integration Using Web Services - finally, no SOA discussion would be complete without a discussion of the Enterprise Service Bus (ESB). I personally would like to have seen more of the open source bus offerings discussed in this chapter. This chapter felt more "abstract" than the other chapters. In other word, the open source offerings bus might just be a bit more early adopter. I'm currently in the middle of an open source bus selection process. Once we've selected our solution, I'll be able to better tell you what stage this is in.

Like I said, I really enjoyed this book. Whether you're early or late in your adoption, I'm confident that you'll learn from this book.

Tuesday, December 4, 2007

Is Oracle Designer in JDeveloper?

JDeveloper is Oracle's Integrated Development Environment (IDE). Because of the first letter, J, which stands for Java, people primarily think of JDeveloper as a Java development tool. JDeveloper is FAR more than that!

I thought I'd focus today's post on how JDeveloper does modeling. You can develop use case models using UML modeling. Additionally, JDeveloper does database modeling (i.e. ERDs). This is functionality that used to exist within Oracle Designer. If you have an existing database that you would like to develop an ERD for, you can extract that model using JDeveloper and it will automatically draw the ERD for you!

The JDeveloper team just keep adding to the database modeling functionality. In fact, what sparked this post was that I received an email from Dana Singleterry on Monday. Here's the email:

Dear JDeveloper Users,

The JDeveloper team is looking to gather feedback on the DB Modeling capabilities of JDeveloper. if you have used the DB modeling in JDeveloper will appreciate if you can answer the next few questions for us: I used the DB modeling features in the following versions (Choose many): JDeveloper 11 Technology Preview JDeveloper 10.1.3 JDeveloper 10.1.2 or earlier I used the DB modeler for (choose many): Forward generation of DB objects. Reverse engineering of DB into diagrams. Maintaining DB objects. Overall my impression of the DB Modeling capabilities of JDeveloper are (free text):

Thanks, Dana Singleterry

I responded to Dana's email with the following question:

"Sounds like something I should check out! Did Oracle Case/Designer get "rolled into" JDeveloper?"

And Dana responded today with this answer: "We are constantly adding functionality to JDeveloper to cover the database modeling that was available in Designer. We did a lot of work on this in 11 as well as adding more features." I use JDeveloper nearly every day. If you haven't considered JDeveloper as your new favorite IDE (and note - it's free), I'd recommend that you take a look at it! I think you'll like what you learn.

Sunday, December 2, 2007

New Apex Version

Apex just keeps getting better and better! The next version of Apex is soon to be generally available. If you are an Oracle developer or DBA and you haven't yet gotten started with Apex, I highly recommend you do so right away. The skills needed to do Apex development are the skills that every Oracle developer and DBA already has - SQL and PL/SQL.

With Apex, you can develop browser-based applications and you don't need to know anything about writing HTML, Java, JavaScript, Flash, etc. Apex provides a complete browser-based development environment to you. Apex comes with the Oracle Database license - i.e. if you own Oracle, you own Apex. Apex also comes with Oracle Express, which is Oracle's free (but restricted) version of the Oracle database.

Oracle's Apex site provides great tutorials and other information that will help you better understand Apex. Seriously, if you haven't looked at this technology yet, I highly recommend that you do so!

Sunday, November 25, 2007

The Oracle World Needs More Youth

A couple of weeks ago I attended Oracle Open World in San Fransisco. It was a great week of:

  • networking
  • entertaining customers and prospects
  • working the booth
  • seeing old friends
  • attending the ACE Director sessions
  • speaking about Web Services
  • speaking about Advanced Apex topics at my first unconference
  • getting to go behind the scenes with Larry (Ellison) and all of the founding employees of Oracle after Larry's "30 years behind the scenes of Oracle" presentation - now that was COOL!
  • getting to the Oracle Titan Awards a little late (because Rich and I were hanging with Larry)
  • picking our OOW booth out for next year
  • attending the Fusion Middleware development team dinner with Thomas Kurian and crew
  • learning a lot about BPEL
  • missing my class on Monday night (more below)
  • writing a new presentation to present at RMOUG on Friday
  • missing my hockey game on Tueday
  • learning about some cool new Oracle sites - Wiki, Mix, Blogs

I teach a graduate level class, "New Venture Creation" at the University of Denver. The class is only offered once a year, which works well for my schedule. Students identify 1-3 opportunities that could be businesses. This year we started with nearly 40 ideas, which we narrowed down to the top 15. The students self-selected those top 15 down to 7 presentations to investors. The students and investors too those 7 ideas down to 5 in the first round and down to 2 in the second round. Those top 2 ideas were funded with $5000 (of real money) by the TrueBlood Foundation. Honestly, at least 10 of the ideas could be full blown businesses. My students this year were younger on average then last year.

The final presentation round was on the Wednesday that I returned from OOW. With all of the OOW backlog, class assignments, grading of papers and presentations - the last few weeks have been crazy busy weeks.

One thing really struck me as I attended OOW and RMOUG. Our industry (the Oracle World) needs more youth! Not one of my students this year (or last year for that matter) were technology people...not one! Over the past several years, I have noticed that the average age at Oracle conferences continues to increase. My challenge to you is this - how can we bring more youth into our industry? Why aren't the current generations interested in technology? It used to be cool, but clearly it's not any more. Why aren't high schools teaching programming any more? We aren't in a dying field...are we?

In an interview from EMC's Chairman, President and CEO Joe Tucci, he was asked, "Final question: Here we are, sitting near the Massachusetts Institute of Technology campus. Is this business, the IT business, still a good area for a student to be going into these days?" to which he said: "Absolutely. There is a statistic that more than 50 percent of the engineers are baby boomers and are nearing retirement. This is a great business to be getting into." As I said, we're all getting older, we need some new blood in this industry.

Scheduled Queries

For any database application environment, you may wish to run a query and return the results to a list of people on a scheduled basis. This document describes exactly how you can accomplish this goal through scheduled queries. This process is a universally applicable database application. Each example in this paper is driven by data (i.e. queries) in the database.

Tables
To begin, let’s discuss the two tables that are required for this application. The first is a table that contains the scheduled queries, and the second is a table that contains the users that should receive the query results (via email). The first table is called the scheduled_query table. It is the “master” table that contains each of the queries along with some scheduling information.

The fields in this table include:



  • Query_No – a unique number assigned for each query that will be run on a scheduled basis
  • Subject – the subject of the email message that will be sent every time the query returns data. Note that if a query is run and contains no data, we do not email a blank report.
  • Notes – comments about the report itself
  • Date created – the date the query record was created
  • Date updated – last date the query was updated
  • Check on – contains the date and time that the scheduled query should be run next. To run this query the next time the job scheduler kicks off, set this to a date and time before the current date and time.
  • Next check – the number of days (or fractions thereof) to add to “check on” (or the current time) once the report successfully completes. In other words, how often should this query run? “1” means once a day. “7” means once a week.
  • Query – the SQL query that should be executed at the scheduled interval. The query can be any valid SQL statement.
  • Header – contains the HTML header for each of the columns to be displayed in the query results. You’ll find some good examples below.
  • Pre_plsql – The block of PL/SQL that should be executed before the query is run. This will allow you to kick off a procedure first.
  • Post_plsql - Similar to pre_plsql, except this block of PL/SQL code will run after the query is executed.


SCHEDULED_QUERY Columns

















Column NameData TypeNullableDefaultPrimary Key
QUERY_NO
NUMBER

No

-

1
SUBJECT
VARCHAR2(200)

Yes

-

-
NOTES
VARCHAR2(200)

Yes

-

-
DATE_CREATED
DATE

Yes

SYSDATE

-
DATE_UPDATED
DATE

Yes

-

-
CHECK_ON
DATE

Yes

-

-
NEXT_CHECK
NUMBER

Yes

7

-
QUERY
VARCHAR2(4000)

Yes

-

-
HEADER
VARCHAR2(4000)

Yes

-

-
PRE_PLSQL
VARCHAR2(4000)

Yes

-

-
POST_PLSQL
VARCHAR2(4000)

Yes

-

-




Our second and final table, scheduled_query_emails, simply contains the distribution list for each of our queries. As you will note from the PL/SQL packages below, the users in this example and their respective email addresses are maintained in the com_users table. If you have a similar table, you’ll want to change the code to reflect the name of your table. If you don’t have users in a table, you could optionally place the email addresses directly in this table. The columns in this table simply include the query_no from above and the userid as mentioned previously.

SCHEDULED_QUERY_EMAILS Columns






Column NameData TypeNullableDefaultPrimary Key
QUERY_NO
NUMBER

No

-

1
USERID
NUMBER

No

-

2



As mentioned previously, the table structures for this application are simple. Next we’ll discuss the packages required for this application component.

Packages
The primary package is called scheduled_queries. This package contains our standard debug function and contains one primary function, which is the meat of our functionality. This function can be run to check a specific query, but unless otherwise instructed, it will check all queries to see if they are due to run. The package header is as follows:


create or replace PACKAGE Scheduled_Queries
AS

-- Get a full property record - all of the fields are in here
FUNCTION check_queries
(in_query_no NUMBER DEFAULT NULL, -- Run 1 query?
in_send_email VARCHAR2 DEFAULT 'Y' -- Send an email? Easy to run with N for setup first time through
)
RETURN NUMBER; -- Number of queries generated

PROCEDURE set_debug(p_debug IN BOOLEAN);

END;


The scheduled_queries package body is as follows:


create or replace PACKAGE BODY Scheduled_Queries
AS

i_debug BOOLEAN := NULL;

-- Get a full property record - all of the fields are in here
FUNCTION check_queries
(in_query_no NUMBER DEFAULT NULL, -- Run 1 query?
in_send_email VARCHAR2 DEFAULT 'Y' -- Send an email? Easy to run with N for setup first time through
)
RETURN NUMBER -- Number of queries generated
IS

PRAGMA autonomous_transaction;

-- LOG CURRENT TIME so we can CHECK AT THE END TO see IF we have NEW alerts
START_DATE DATE := SYSDATE;
end_date DATE;
l_alerts NUMBER := 0;
l_status VARCHAR2(1000);
l_message CLOB;

-- Driving QUERY
CURSOR query_cur IS
SELECT query_no, subject, HEADER, QUERY, pre_plsql, post_plsql
FROM SCHEDULED_QUERY sq
WHERE check_on <= SYSDATE AND query_no = NVL(in_query_no, query_no); -- Email addresses, you’ll need to change this to your own table *** CURSOR email_cur (l_query_no NUMBER) IS SELECT firstname' 'lastname full_name, email FROM SCHEDULED_QUERY_EMAILS sqe, COM_USERS cu WHERE query_no = l_query_no AND sqe.userid = cu.userid; BEGIN FOR query_rec IN query_cur LOOP IF query_rec.pre_plsql IS NOT NULL THEN EXECUTE IMMEDIATE query_rec.pre_plsql; COMMIT; END IF; l_message := Benchmark_Util.dump_html_clob(query_rec.QUERY, query_rec.HEADER); IF query_rec.post_plsql IS NOT NULL THEN EXECUTE IMMEDIATE query_rec.post_plsql; COMMIT; END IF; -- Reset the next run dates accordingly UPDATE SCHEDULED_QUERY sq SET sq.CHECK_ON = CASE WHEN sq.check_on + sq.NEXT_CHECK < query_no =" query_rec.query_no;" in_send_email =" 'Y'"> ' l_message);
DEBUG.WRITE('Sending email to> ' email_rec.full_name);
END IF;
l_status := Send_Email_Clob('***your.email.server****',
'info@yourcompany.com', 'Your Company Administrator',
email_rec.email, email_rec.full_name, NULL, NULL, 'Y',
query_rec.subject, NULL, l_message);
END IF;
END LOOP;

END LOOP;

COMMIT;

RETURN l_alerts;

END;

PROCEDURE set_debug(
p_debug IN BOOLEAN)
IS
BEGIN
i_debug := p_debug;
END set_debug;

END;


You may have noticed that this package simply calls the benchmark_util’s dump_html_clob procedure that returns a CLOB with the query results. The benchmark_util package header is as follows:


create or replace PACKAGE Benchmark_Util IS
-------------------------------------------------------------------------------
-- public program units
-------------------------------------------------------------------------------
FUNCTION dump_html_clob(p_query IN VARCHAR2,
p_header IN VARCHAR2 DEFAULT NULL) RETURN CLOB;
END Benchmark_Util;


The benchmark_util package body is as follows:


create or replace PACKAGE BODY Benchmark_Util IS
-------------------------------------------------------------------------------
-- package variables
-------------------------------------------------------------------------------
pg_package_name CONSTANT VARCHAR2(30) := 'benchmark_util';
debug_on CONSTANT BOOLEAN := FALSE;
-------------------------------------------------------------------------------
FUNCTION dump_html_clob(p_query IN VARCHAR2,
p_header IN VARCHAR2 DEFAULT NULL) RETURN CLOB IS
-- variables
v_procedure CONSTANT VARCHAR2(30) := 'dump_html_clob';
v_location INTEGER;

-- Note that we’re setting a style and the logo image for the top of the
-- report. You will want to change this ***
v_output CLOB := ' <style type="text/css"><!-- BODY{font-family: "Humanst521 BT", arial, "lucida console", sans-serif; font-SIZE: 7pt; color:#000000; font-weight:bold;} ' ' TABLE{font-family: "Humanst521 BT", arial, "lucida console", sans-serif; font-SIZE: 7pt; color:#336699; font-weight:normal;} ' ' td{padding-RIGHT: 0; padding-top: 0} --></style><img src="http://clients.intellireal.com/i/head2.gif" />
<p></p><p><table border="1">';
v_theCursor INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
v_columnValue VARCHAR2(2000);
v_status INTEGER;
v_colCnt NUMBER DEFAULT 0;
v_separator VARCHAR2(10) DEFAULT '';
v_cnt NUMBER DEFAULT 0;
v_any_data BOOLEAN := FALSE;
BEGIN
v_location := 1000;
DBMS_SQL.PARSE( v_theCursor, p_query, dbms_sql.native );
v_location := 2000;
FOR i IN 1 .. 255 LOOP
v_location := 3000;
BEGIN
DBMS_SQL.DEFINE_COLUMN( v_theCursor, i, v_columnValue, 2000 );
v_colCnt := i;
EXCEPTION
WHEN OTHERS THEN
IF ( SQLCODE = -1007 ) THEN
EXIT;
ELSE
RAISE;
END IF;
END;
END LOOP;
v_location := 5000;
DBMS_SQL.DEFINE_COLUMN( v_theCursor, 1, v_columnValue, 2000 );
v_status := DBMS_SQL.EXECUTE(v_theCursor);
v_location := 6000;
IF (p_header IS NOT NULL) THEN
v_location := 7000;
v_output := v_output p_header;
END IF;
v_location := 8000;
LOOP
EXIT WHEN ( DBMS_SQL.FETCH_ROWS(v_theCursor) <= 0 ); v_location := 9000; v_separator := ''; -- no separator before first column v_output := v_output ' ';
v_any_data := TRUE;
FOR i IN 1 .. v_colCnt LOOP
v_location := 10000;
DBMS_SQL.COLUMN_VALUE( v_theCursor, i, v_columnValue );
v_location := 10100;
v_output := v_output ' ' v_columnValue '';
v_location := 10200;
v_location := 10300;
END LOOP;
v_output := v_output '';
v_location := 11000;
v_cnt := v_cnt+1;
v_location := 12000;
END LOOP;
v_location := 13000;
DBMS_SQL.CLOSE_CURSOR(v_theCursor);
v_output := v_output '</tbody></table><p></p><p>';
v_location := 14000;
-- Only return the header, etc if there is data
IF v_any_data THEN
RETURN v_output;
ELSE
RETURN NULL;
END IF;
EXCEPTION
WHEN OTHERS THEN
Debug.msg ('***--- PROC:'v_procedure' line:'v_location
CHR(10)' 'SQLERRM);
Debug.msg (p_query);
RAISE;
END dump_html_clob;
END Benchmark_Util;


You also may have noticed that to actually send the email, we call the send_email_clob function. The send_email_clob function is as follows:


create or replace FUNCTION Send_Email_Clob
(in_mail_server VARCHAR2 DEFAULT 'exchange.yoursever.com',
in_sender_email VARCHAR2 DEFAULT 'me@tusc.com',
in_sender_name VARCHAR2 DEFAULT 'My Full Name',
in_recipient_email VARCHAR2 DEFAULT 'defaultuser@tusc.com',
in_recipient_name VARCHAR2 DEFAULT 'Your Full Name',
in_cc_email VARCHAR2 DEFAULT 'me@tusc.com',
in_cc_name VARCHAR2 DEFAULT 'My Full Name',
in_html_flg VARCHAR2 DEFAULT 'N',
in_subject VARCHAR2 DEFAULT 'No Subject was Provided',
in_importance VARCHAR2 DEFAULT 'Normal',
in_body CLOB DEFAULT 'No Body for this Email')
RETURN VARCHAR2
IS
nbt_connection utl_smtp.connection;
nbt_message CLOB;
nbt_err VARCHAR2(100);
nbt_cr VARCHAR2(10);
BEGIN
nbt_connection :=
utl_smtp.open_connection(in_mail_server, 25, 60);
-- dbms_output.put_line('connected');
utl_smtp.helo(nbt_connection, in_mail_server);
utl_smtp.mail(nbt_connection, '<' in_sender_email '>');
utl_smtp.rcpt(nbt_connection, '<' in_recipient_email '>');
IF in_cc_email IS NOT NULL AND LENGTH(in_cc_email) != 0 THEN
utl_smtp.rcpt(nbt_connection, '<' in_cc_email '>');
-- dbms_output.put_line('wrote cc');
END IF;
-- dbms_output.put_line('in cc email> ' in_cc_email);
utl_smtp.open_data(nbt_connection);
IF in_html_flg != 'N' THEN
-- Content-Type: text/html
utl_smtp.write_data(nbt_connection,
'Content-Type: text/html' utl_tcp.CRLF);
END IF;

nbt_message := 'From: ' '"' in_sender_name '" <' in_sender_email '>';
utl_smtp.write_data(nbt_connection, nbt_message utl_tcp.CRLF);
nbt_message := 'To: ' '"' in_recipient_name '" <' in_recipient_email '>';
utl_smtp.write_data(nbt_connection, nbt_message utl_tcp.CRLF);
nbt_message := 'Cc: ' '"' in_cc_name '" <' in_cc_email '>';
utl_smtp.write_data(nbt_connection, nbt_message utl_tcp.CRLF);
nbt_message := 'Subject: ' in_subject;
utl_smtp.write_data(nbt_connection, nbt_message utl_tcp.CRLF);

IF in_importance != 'Normal' THEN -- Normal is the default
nbt_message := 'Importance: ' in_importance;
utl_smtp.write_data(nbt_connection,
nbt_message utl_tcp.CRLF);
END IF;
-- Write the body, but first end the header
IF LENGTH(in_body) <= 1000 OR in_body IS NULL THEN utl_smtp.write_data(nbt_connection, utl_tcp.CRLF in_body); ELSE -- utl_smtp.write_data(nbt_connection, utl_tcp.CRLF); DBMS_OUTPUT.PUT_LINE('in body length> ' LENGTH(in_body));
FOR i IN 1 .. ROUND((LENGTH(in_body)+2500)/5000) LOOP
DBMS_OUTPUT.PUT_LINE('in body loop> ' i);
IF i=1 THEN
nbt_cr := utl_tcp.CRLF;
ELSE
nbt_cr := '';
END IF;
utl_smtp.write_data(nbt_connection,
nbt_cr SUBSTR(in_body, ((i-1)*5000)+1, 5000));
END LOOP;
END IF;

utl_smtp.close_data(nbt_connection);
utl_smtp.quit(nbt_connection);

RETURN 'OK';

EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
utl_smtp.quit(nbt_connection);
nbt_err := SQLCODE;
nbt_message := SQLERRM;
-- INSERT INTO ERROR_LOG (error_msg, create_time) VALUES ('Bad email address in send_name(email) - in_recipient_email> '
-- in_recipient_name '(' in_recipient_email ') in_cc_email> ' in_cc_email ' error> ' nbt_err ' msg> ' nbt_message , SYSDATE);
RETURN 'BAD';
END;


Getting Started

As noted in the code, you’ll want to make a few modifications to the code, but in general, the process is that simple. Create the tables, add some data and away you go.

The last step of the process is to set up a DBMS_JOB that will run the scheduled_queries package’s check_queries, which can be accomplished as follows:


DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'DECLARE l_queries NUMBER;
BEGIN
l_queries := Scheduled_Queries.check_queries;
END;'
,next_date => TO_DATE('30/08/2007 15:21:39','dd/mm/yyyy hh24:mi:ss')
,INTERVAL => 'SYSDATE+60/1440'
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' TO_CHAR(x));
END;


The job will run every hour checking to see if you have new scheduled queries that need to be run. If you have scheduled queries that run more frequently, you’ll want to have this function execute more often. There is minimal overhead in executing this function more frequently since it simply queries to see if any reports need to run. Note that setting this to run once an hour means that all reports will run within an hour of the scheduled time.

Conclusion
Having regularly scheduled queries that are delivered to a distribution list is now a simple and fruitful task that you can accomplish in no time at all.

Tuesday, November 6, 2007

Maps and Embedded Search

Do you have a desire to map your data using Google Maps? How about an embedded search feature? Both can certainly spice up an application quickly!

Below you'll see that I embedded a map into my Blog and below that you'll notice that I embedded a search section. After these sections, I've explained how I added these components. It was a little tricker to embed this functionlity into my blog simply because of the "features" of a browser-based editor. In other words, if you're editing HTML or Perl or JSPs or the like, it should be easier to get it working VERY quickly. In fact, if you haven't embedded Google Maps into any applications, I think you'll be amazed at how simple this integration is. In today's Blog I'll show you how I added random data points and at another time I'll show you how to do this with dynamic data - it's just TOO simple!

Loading map...


The above map from Google was provided using Google's Mapping API. The icons (or flags) that you see above were randomly generated and placed on the map. If you have latitude and longitude data in your database, you can dynamically place this data on a map. The only difference is that your JavaScript code will be dynamically generated. Then again at a later time, I'll show you how to dynamically retreive the data via AJAX. The above map includes traffic information, a search box, and more. Each of these items will be discussed below.

As mentioned, I embedded a local search section. You can see that I did a search on my name along with TUSC to kick it off. Give it a try - it's fully functional search! Again, this will be discussed in technical detail below.

Loading local search...

Now it's time to explain what it takes to put the above sections into your Web 2.0 application. Google Maps requires a unique key, which you can obtain (along with other information about the Google Maps API) at http://www.google.com/apis/maps/. You need to provide your application virtual path to Google. In this case, I used http://bradleydbrown.blogspot.com/. For an Apex application, you would include the /pls/apex/ (or /pls/htmldb) virtual path along with your server name. For example, http://clients.intellireal.com/pls/htmldb/. Google will provide you with a key, that must be used in your URL back to Google:

<script src="'http://maps.google.com/maps?file=" type="'text/javascript'/" v="2.x&key=">
<script>

The above URL is used to include the Google mapping libraries into your Web page. Place these script commands into the <head> section of your page. For Blogspot, I placed these script references into my template in the <head> section. A local search feature isn't required, but it's a nice option to offer. In the above map, you'll notice the "search the map" text box in the bottom section of the map. The following scripts enable this feature - so include these lines if you want to enable local search:

<script src="'http://www.google.com/uds/api?file=" v="1.0'" type="'text/javascript'/">
</script>
<script src="'http://www.google.com/uds/solutions/localsearch/gmlocalsearch.js'" type="'text/javascript'/">
</script>

The final script is my JavaScript function that creates the map that you see above. It links the map_canvas division with the code, creates the traffic, local search overlays, places random points on the map, etc. This JavaScript function is called by the onload statement in the section. I'd recommend viewing the source for this page to see things like the onload statement.

<script type="'text/javascript'">
<!--
function initialize() {
// Make sure the browser will play nicely with Google
var map = new GMap2(document.getElementById("map_canvas"));
var trafficInfo = new GTrafficOverlay();
var searchControl = new GSearchControl();
var localSearch = new GlocalSearch();
var directionsPanel;
var directions;
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
// Add 10 markers to the map at random locations
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
for (var i = 0; i < 10; i++) {
var point = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
map.addOverlay(new GMarker(point));
}
map.addOverlay(trafficInfo);
map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));
directions = new GDirections(map, directionsPanel);
directions.load("New York, NY to Chicago, IL");
searchControl.addSearcher(localSearch);
searchControl.addSearcher(new GwebSearch());
searchControl.addSearcher(new GvideoSearch());
searchControl.addSearcher(new GblogSearch());
searchControl.addSearcher(new GnewsSearch());
searchControl.addSearcher(new GimageSearch());
searchControl.addSearcher(new GbookSearch());
localSearch.setCenterPoint("New York, NY");
searchControl.draw(document.getElementById("searchcontrol"));
searchControl.execute('TUSC, "bradley d. brown"');
}
}
</script>

Wednesday, October 24, 2007

Sample Applications and Timing

As I talked about the other day, Apex provides you with a huge amount of power. Like there is with any tool, Apex has a learning curve, which is outlined below. Apex's learning curve for an Oracle developer (i.e. someone who knows PL/SQL and SQL) is pretty darn quick!



In today's post, I'm going to talk about some Apex applications that were developed by various people and their respective timing.


The first application is the International Oracle Users Group’s Select magazine article review system. This is a collaborative environment that was developed in 2 weeks. It was developed several years ago and is still in use today:






Here's another web collaboration application that was developed in two days:







Roman Inc.’s general purpose customer survey (developed in one day):




Survey Administration screens (developed in two hours):



Building an application from scratch — 5 simple steps

  1. Login with developer privileges

  2. Use the SQL tools to make your tables, constraints, triggers, procedures, etc.

  3. Start a new “application” (use the wizard)

  4. Customize the application (check each change as you make it)

  5. Deploy to the users!

Sales tracking application
The following sales tracking application will help you get a feel for application development using APEX. The objective is to record sales, show daily weather information and compare current sales to last year’s sales. Daily and month-to-date information will be presented graphically, as well as numerically. The application is designed for novice users and access will be gained via the Internet.


APEX’s main menu
It all begins at the APEX main menu. You’ll notice that three primary functions exist:

  1. Application Builder
  2. SQL Workshop
  3. Utilities

Sunday, October 21, 2007

Introduction to Oracle Application Express (APEX)

As I mentioned last week, one of Oracle's best kept secrets is APEX. This week I thought I would cover a variety of APEX topics. Today I thought I'd talk about where you might start in your APEX journey. Next week I should be able to start covering some advanced APEX topics.

You may have heard about Project Marvel or HTML DB, which has been renamed APEX. You might get the feeling this tool is Oracle's scaled-down version of Oracle Portal or the next coming of its predecessor, WebDB.

APEX is a powerful and easy way to quickly develop a database-centric HTML / browser-based Web application. You can install it on your own machines or run in a hosted environment on Oracle's site. All development (construction of pages) is done through the browser interface. You can use SQL Workshop to run SQL statements and add data to your environment. This easy-to-use tool will impress you in no time at all!

What is APEX?
You could say APEX is Oracle’s answer to wizard-based Web Development. It certainly is full of wizards! APEX contains metadata (lots of it) on everything in the tool, too. It produces dynamic HTML and it’s fast! APEX uses the PL/SQL module for Apache (mod_plsql). It doesn’t use any Java code. Anything you can do in SQL or PL/SQL can be done using APEX. APEX provides a nice Web-based team development environment for your organization.

APEX’s origin
If you’re curious about where APEX came from, it originated from developer of the Oracle Calendar, which became Web Forms, then was integrated into Oracle Portal. Oracle’s very own Tom Kyte’s “ASK TOM” site was an early adaptor of APEX. APEX was originally known as Project Marvel. It’s now called APEX because of legal issues. APEX had an interim name of HTML, but since you don’t write in HTML (although it does deliver HTML) and it’s not a database product, the name was changed to APEX. APEX does deliver HTML and it is database driven, so I assume that’s where the interim name came from. I’ve also seen it referred to as Einstein.

APEX components
APEX has a number of components, including:


SQL Workshop
— Interact with your database as with SQL*Plus, but visually
— Data dictionary and object browsing, query by example

• Utilities
— Load and extract data from the database
— Turn a spreadsheet into a table in a few seconds
— Generate DDL
— Object reports
— Monitor the DB and the applications

• Application Builder
— Centerpiece of APEX
— Loaded with wizards
— Created reports, forms and charts
— Connect pages using branches
— 75 predefined widgets
— Basic HTML, popup lists, calendars, etc.
— Full data entry validation

Additional features
APEX supports full session and state management. Each user has his/her own session. A valid username/password is required to access the application’s data. You have complete user interface control. The look-and-feel is separate from application logic through the use of extensive templates.

APEX also supports flexible authentication and authorization schemes, which can use pre-built or built-in methods, or you can develop your own custom authentication scheme.

What about Portal?
One Oracle employee called the release of APEX “Larry’s Darwin theory.” In other words, survival of the fittest products. How does APEX compare to Oracle Portal? Portal is far more comprehensive than APEX, but in many ways the two are similar. At least that was true of Portal 3.0. Portal is not integrated into WebCenter (Oracle’s Java IDE) and follows the open source Portal standards, so the products are clearly on different paths once again.

Installing APEX
If you don’t want to install APEX, you can apply for a free account at http://apex.oracle.com and use it in a free-hosted environment. It works the same in the hosted environment as it does if you install it on your own server. APEX allows you to set up other developers/users for testing — in fact, it’s better at production roll outs than Portal.

APEX installation is very easy. You must be running Oracle 9iAS with mod_plsql and running version 9.2.0.3 of the database. Support can be found via the OTN discussion forum, as well.

If you don't have APEX running currently, then I would recommend creating a workspace at Oracle's hosted site so you can experiment with APEX and how to create an application. This will convince you that it's the best kept secret - quickly!

What can you do with APEX?
Pretty much any Web-based application can be developed using APEX. Because it’s a wizard-based tool, more complex functions are going to be difficult to accomplish. In other words, the easier the application, the better suited to APEX it is.

Like any application, the more you use it, the quicker your development will get. Later this week I'll discuss some applications that were developed with APEX. There was no knowledge of the product prior to the development of the first application. As you'll see that it took the longest time to develop. Subsequent applications were considerably faster.

Thursday, October 18, 2007

Presentation List

I often get asked to present at different conferences, I thought it would make sense to publish my current presentation abstracts here. If you're interested in having me speak at a user's group, please call me (303)985-2213 or email me. Thanks for your consideration! See the link for prior presentations I've given.

Web 2.0



You’ve heard the term Web 2.0 and might be wondering exactly what it means to you and your business. You might be wondering what Web 2.0 includes. On the other hand, you might be right in the middle of it all, but noticing that more and more Oracle products seem to offer Web 2.0 entry points. Or maybe you’re not using Oracle technology for anything but your backend database. You might be wondering which other products should be under consideration? Which should be avoided? What’s a good entry point solution?

Internal and External Application Integration


Oracle Fusion Web Services ventured down the path of a full bore implementation of internal and external application integration in what I perceived as the most efficient and cost effective manner, you'll get the benefit of my hindsight introspections today. Specifically, I implemented a light weight Service Oriented Architecture (i.e. Web Services) wherever it made sense. This presentation will discuss the good, bad and ugly about this approach that was taken. Knowing what I know today, I would in fact take this approach again. In fact, I highly recommend my self-named light-weight SOA.

Using Web Services, your customers (whether internal or external) are able to seamlessly access your core technology as if that technology is running in its own environment. This presentation will include a demonstration of the above mentioned application in action. If you have customers or vendors who have provided you with Web Services that you need to integrate into your existing applications, you'll want to attend this presentation.

Advanced Oracle Application Express Tips and Techniques


Oracle Application Express (Apex) is a powerful and comprehensive tool. Numerous advanced tips and techniques will be covered in this presentation. These topics include: pop-up windows, complex searches, document management, indexing and searching, “tool tip” or hints, email links, page 0, help text, background jobs, “add to my calendar” feature, saving contacts (VCF), sending mass emails, and more.

Mapping Your Data with Google Maps


Do you have data in your Oracle database that you would like to visual map in Google Maps for your end users? This presentation will discuss and demonstrate how you can take a series of latitudes and longitudes and turn them into a visual map containing your data. Numerous implementations will be discussed including 1. using AJAX to pull records from the database based on the current Google map coordinates, 2. driving the map display based on properties on a map, 3. outlining census tracts on a Google Map.

Cleaning up with AJAX in Apex


Years ago I used to discuss performing asyncronous activities with the hidden JavaScript page. With the improvements to JavaScript and our use of XML, Asyncronous JavaScript and XML (AJAX) provides functionality we've been using for years, but it's much easier to implement now. This presentation will cover AJAX in a variety of forms. Oracle Application Express (Apex) provides a little known secret called the "On Demand" feature...which allows for AJAX calls back to the database. Google and other companies provide AJAX functionality that you can use for application integration. In this presentation you'll learn how to write your own AJAX server side code and how to make use of existing server side AJAX code.

Step-by-step Web Service Creation and Integrating or Using an Existing Web Service Tutorial


The Service Oriented Architecture (SOA) provides the foundation for any company's business-to-business process delivery. Using Web Services, your customers (whether internal or external) are able to seemly access your core technology as if that technology is running in their own IT environment. This presentation will include a demonstration of the SOA application in action. This presentation will cover step-by-step Web Service creation and deployment. If you have customers or vendors who have provided you with Web Services that you need to intergrate into your existing applications, you'll be happy that this presentation will also cover how to integrate and use an existing Web Service in a step-by-step manner. In this presentation, you'll learn how Web Services can change how you deliver applications to your customers (and other internal groups).

Building a low cost non-Oracle grid for scale in your Oracle environment


Have you considered using Oracle Express (the free Oracle DB version) to reduce costs? Does the 4GB database size limit cause issues for you? Are you considering greating a low cost non-Oracle grid? Perhaps using MySQL or PostGRES? Do you already have your "master" database in Oracle? In this presentation, you'll learn how IntelliReal stores their "master" database in an Oracle Standard Edition One database instance and uses a MySQL grid to provide a low-cost scalable solution to meet their needs. The Oracle database is about 4TB. The grid effectively stores a materialized view of the key data from the Oracle database, which is roughly 400Gb of data, into a series of physically partitioned MySQL databases. The data is US residential property data. Data is partioned by US counties - about 1000 databases (or schemas in MySQL). The grid started as a 5 wide grid and 2 deep (for load balancing), but is currently 1 wide and 10 deep. This architecture will be discussed in detail.

Case Study - How IntelliReal is using Web Services and SOA to seamlessly integrate companies


IntelliReal (http://www.intellireal.com/) is a real property market intelligence company. IntelliReal utilizes advanced technology and data aggregation to provide significantly enhanced data mining, accuracy, speed and reduced cost delivering valuation solutions. The Service Oriented Architecture (SOA) provides the foundation for IntelliReal's business-to-business delivery. IntelliReal's customers are able to seemly access the IntelliReal core technology as if that technology is running in their own IT environment. This presentation will include a demonstration of the SOA application in action. IntelliReal uses Oracle Application Express (APEX) as the "sales" tool, but typically delivers their solution from business-to-business using the SOA solutions. This presentation will cover the SOA and how it can change how you work to deliver applications to your customers (and other internal groups).

Case Study - How IntelliReal used Oracle Application Express to Rapidly Build their Production Environment


IntelliReal (http://www.intellireal.com/) is a real property market intelligence company. IntelliReal utilizes advanced technology and data aggregation to provide significantly enhanced data mining, accuracy, speed and reduced cost delivering valuation solutions. IntelliReal's user interface was developed using Oracle Application Express (APEX). With most any technical presentation that you’ve attended, you’re likely always thinking about how to relate your environment to what the speaker is discussing and building a real world application using the tool. This presentation covers a specific business problem that was solved using APEX: delivering a rich user interface for "show." IntelliReal's primary customer base are businesses. Most of the customers actually access the IntelliReal systems using SOA. The APEX application uses the SOA components too. This presentation will discuss the functional requirements, how the application continues to be extended, the net results and cost savings. This presentation will include an online demo and discussion of the components.

Application Express 101 - Introduction, Installation and Configuration (1/2 day)


In this session, you'll learn to use Apex from concept to delivery to support. We'll start with the basics of Apex– we’ll talk about installation and configuration options. We’ll use an existing database (i.e. an Excel spreadsheet) and build a real world application from the ground up. The exercises will cover a specific business problem that was solved using HTML-DB: getting people to RSVP to monthly events without having to call them. Sounds simple enough, but you’ll see how far this application was taken to solve this real world problem. This session will discuss and demonstrate the functional requirements, how the application was extended, the net results and cost savings.

Top DBA Scripts using Application Express


Developers and DBAs are always interested in scripts and tools that will help them be more efficient. This presentation will discuss how Apex can be used to manage and execute a library of DBA scripts. A number of helpful scripts will be discussed. The Apex application demonstrated will be available for you to download and install in your environment.

Advanced Oracle Application Express Tips and Techniques


Oracle Application Express (Apex) is a powerful and comprehensive tool. Numerous advanced tips and techniques will be covered in this presentation. These topics include: pop-up windows, complex searches, document management, indexing and searching, “tool tip” or hints, email links, page 0, help text, background jobs, “add to my calendar” feature, saving contacts (VCF), sending mass emails, and more.

Hands-on Application Express Full Day Session (8 hours and hands-on only)


In this full day hands on session, you'll learn to use Apex from concept to delivery to support. We'll start with an existing database (i.e. an Excel spreadsheet) and build a real world application from the ground up. The exercises will covers a specific business problem that was solved using HTML-DB: getting people to RSVP to monthly events without having to call them. Sounds simple enough, but you’ll see how far this application was taken to solve this real world problem. This session will discuss and demonstrate the functional requirements, how the application was extended, the net results and cost savings.

Apex is a declarative web-based application development & deployment environment. It's a powerful and easy way to quickly develop a database-centric Web application. You can install Apex on your own machines or run in a hosted environment on Oracle's site. All development (construction of pages) is done through the browser interface. You can use the SQL Workshop and the Data Workshop to run SQL and add data to your environment. This easy-to-use tool will impress you in no time at all!

This presentation gives the participants a good introduction and great hands on experience with the Apex development environment and a good idea of the power that it contains to create quick powerful Web application in a very short time.

Building a Real-World Application Express Application


With most any technical presentation that you’ve attended, you’re likely always thinking about how to relate your environment to what the speaker is discussing and building a real world application using the tool. This presentation covers a specific business problem that was solved using HTML-DB: getting people to RSVP to monthly events without having to call them. Sounds simple enough, but you’ll see how far this application was taken to solve this real world problem. This presentation will discuss the functional requirements, how the application was extended, the net results and cost savings. This presentation will include an online demo of the application and how to change it.

Changing the World with Oracle Web Services and the Service Oriented Architecture


Web Services are the next logical step in application development. They provide a major step forward in the Internet computing model. There are so many components and continual research going on in this area. This presentation will focus on the things you really need to know and care about with Web Services. This presentation will focus on a practical example of a Web service application of the future.

Building a Virtual Data Warehouse


Real-time data warehousing requires real-time access to operational systems and to a shared repository of dimension data. Users can then use the data warehouse environment for strategic reporting and trending, as well as tactical operational reporting. Some data warehouse implementations attempt to address the need for real-time reporting by introducing an “operational data store” into the architecture — an operational companion to the data warehouse. An operational data store commonly stores data in a format that is close to its format in the operational systems, minimizing the complexity of the transformations performed. The operational data store provides an integrated view of operational data. Operational data stores commonly don’t store much historical data, limiting their potential usefulness. This presentation demonstrates a virtual data warehouse, which will provide you with the best of both worlds.

Building Quick and Powerful Web Applications using Oracle Application Express


You may have heard about Project Marvel, HTML DB or Apex. This tool is a declarative web-based application development & deployment environment. It's a powerful and easy way to quickly develop a database-centric HTML Web application. You can install Apex on your own machines or run in a hosted environment on Oracle's site. All development (construction of pages) is done through the browser interface. You can use the SQL Workshop and the Data Workshop to run SQL and add data to your environment. This easy-to-use tool will impress you in no time at all!

The presentation starts with a definition of Apex; what is it, where did it come from and what are its major features. Next I will address the installation of Apex on a local machine or the ability to have applications hosted on Oracles site. I will move on to the uses for Apex; what type applications are best suited for Apex, examples of applications and their development time frames.

The first major section of the presentation will be a step by step walk through of creating a sample Apex application. During this section I will address in detail some of the features and capabilities of the development environment along with some of the gotchas that might come up. I will go into details on the components of a standard Apex "page"; the common things all pages possess, the way that components are shared between pages and the ability to apply application wide templates. I will demonstrate creating reports and graphs through the use of the built in wizards, standard to Apex. I will also talk about the built in security that Apex offers, both through login and through individual page and item security.

After demonstrating the construction of a simple application I will address more specific details such as the rendering process that happens as the page is created. This allows for the student to understand what happens under the hood and how it influences the pages as they are built. Next I will talk about how to manage and monitor the development environment. The entire Apex development environment is accessed via a web interface. Administration of this environment is also handled through this interface. An administrator can create workspaces, create users and assign privileges. Through this interface you can also view, create and modify almost any database object.

This presentation gives the participants a good introduction to the Apex development environment and a good idea of the power that it contains to create quick powerful Web application in a very short time.

Transforming Oracle Data Into ANY Format Using XML


You've surely heard a lot about XML. Get ready to understand its power with XSU, XSQL and XSLT. Learn how easy it is to extract data and manipulate it into a variety of output formulas. Attending this presentation will spark all kinds of ideas - from extracting XML from your database to receiving XML files from another server or another company. Join us for this session - and feel the power. Oracle 10g AS provides a powerful utility to help you generate XML straight from data in your Oracle database –- the XSQL processor. XML style sheets (a.k.a. XSLT with a file extension of XSL) allow you to manipulate XML into various usable forms. This presentation demonstrates just how easy it is to extract data and manipulate it into a variety of output formats.

Java-based Oracle Web Development (4-8 hours)


This presentation will cover a number of topics including a number of components that you should “study” to round out your development knowledge. JDeveloper 10g (and the ADF) is an amazing development environment. Each new version gets closer to rivaling Oracle Forms. Now with the Oracle Application Developer Framework (ADF), which includes TopLink and Struts, you can quickly and easily develop a GUI/HTML-based Web application using this point-and-click, drag-and-drop development tool. After JDeveloper’s ADF is covered, we’ll talk about Java Server Pages, Java Stored Procedures, and Java Database Connectivity. This presentation will wrap up discussing a number of other tools that you might want to consider for your development efforts.

Life Optimization


Every day that passes is one less that you have in your life. Do you want to get the most out of every day? Have you figured out the secret to life? Do you want to be an overnight success? Are you a success now? Maybe you want to have the most toys with you die? The 8 traits of the world's most successful people will be covered. How many of these traits do you share with them? Brad will share techniques that have helped him through his career and personal life. The goal of this presentation is to provide you with take away value – a few golden nuggets that you can use in your life every day. I want to make a difference for you. Life’s too short not to enjoy every day. Great satisfaction comes from achieving on and off the job. This presentation will also include an exercise to get you started.

IT Optimization


This presentation will address IT Optimization and how it effects your organization. How can you provide real data that is relevant to business needs? Technologies like Oracle RAC, Grid computing, Linux all will play into your future. Rapid application development is also a key to your future success. Gartner Inc.'s list of top 10 resolutions for CIOs in 2005 includes at number six, "Get hands-on experience on new key technologies. " This presentation will talk about tools such as JDeveloper and Apex which bring rapid application development to a whole new level.

Resolving Conflict with the Arrow of Truth


Have you ever run into a conflict at work or at home, but you had difficulty resolving the problem? By using the methods described in this presentation (the arrow of truth), you will be able to work through issues that otherwise may appear irresolvable. This method works not just at work, but at home too.
Funny idea for a presentation - show a video on top of someone's face. Kind of like a ventriliquist, but with a video projector. Got the idea from seeing Dave Maney stand in front of YPO group with projected video shining on his face - looked like lips on his forehead. Could line people up (1-n) with x's. Could record it and play it back for everyone too.

Developing New and Using Existing Web Services


We'll find some existing Web Services and make use of them in our application, then we'll develop some Web Services for others to use. This full day session will cover Web Services end-to-end.

Web Services are the next logical step in application development. They provide a major step forward in the Internet computing model. There are so many components and continual research going on in this area. This presentation will focus on the things you really need to know and care about with Web Services. This presentation will focus on a practical example of a Web service application of the future.

Having ventured down the path of a full bore implementation of internal and external application integration in what I perceived as the most efficient and cost effective manner, you'll get the benefit of my hindsight introspections today. Specifically, I implemented a light weight Service Oriented Architecture (i.e. Web Services) wherever it made sense. This presentation will discuss the good, bad and ugly about this approach that was taken. Knowing what I know today, I would in fact take this approach again. In fact, I highly recommend my self-named light-weight SOA.

Using Web Services, your customers (whether internal or external) are able to seamlessly access your core technology as if that technology is running in its own environment. This presentation will include a demonstration of the above mentioned application in action. If you have customers or vendors who have provided you with Web Services that you need to integrate into your existing applications, you'll want to attend this presentation.

Wednesday, October 17, 2007

Oracle's Best Kept Secret

According to Oracle, "Oracle Application Express (Oracle APEX) is a rapid web application development tool for the Oracle database. Using only a web browser and limited programming experience, you can develop and deploy professional applications that are both fast and secure."

What the Apex site doesn't say is that it's also Oracle's best kept secret. Developers who "get" Apex (i.e. anyone who uses it for a few weeks) absolutely love the power of the development environment. Several people have formed their entire company around development using solely this product. Did you ever see a "(Oracle) Forms only" shop? Or an (Oracle) RPT shop?

Apex is a rapid development environment...very rapid. If you're an Oracle developer at heart (which means you know SQL and PL/SQL really well), Apex takes the mystery out of Web development. Write a query and view it in a browser! The data can be viewed as an HTML table (i.e. a report) or an Adobe Flash graph. Data can easily be edited in forms. A page can be made up of any number of components (i.e. charts, reports, forms, etc.). If you would like to execute a PL/SQL procedure or function before or after your page displays - fear not, Apex can easily handle this task with its processes.

Where and how do you get started? Your mission for today is to simply go to the Oracle Apex site and surf around to learn some more about Apex. In the upcoming weeks, I'll cover a number of Apex tips here on my blog.

By the way, I love the Apex pricing model. First off, if you already have an Oracle Database, then you've already paid for an Apex license (i.e. it's included with the DB license). Or...if you don't have any Oracle licenses, Oracle offers a free Oracle database license, called Oracle Express. Express has limitations (i.e. 4Gb of storage, 1 dual core machine, etc.) associated with it, but it is a free Oracle license. Oracle Express comes with Oracle Application Express. In other words, you can develop and deploy an entire Web application for free!

Tuesday, October 16, 2007

Thinking in Web 2.0

When it comes to application development, if you're "thinking in Web 2.0" it will help you take all of your application design to a whole new level. IntelliReal provides real estate intelligence to their customers. The application itself (the UI) is built with Oracle Application Express (Apex). Users have the ability to view information about a property. For example, MLS information, county assessor data, maps, and more can be viewed about a subject property. IntelliReal determines a value for every possible property in their database (about 80 million properties in the US). Considerable data is also available to support the property value (i.e. what someone might expect to pay for the home). For example, comparable properties (and their respective information), recent area sales data, neighborhood comparisons, numerous graphs and more are provided to support a valuation.

One of the Web 2.0 features is the concept of authorship or blogging. The concept is pretty simple. Your application should allow users to write a document and attach it to something useful in the application. If you can tie the document to a "record" you'll see true benefits.

IntelliReal's users can be independent, but they can part of a company or even a sister company (i.e. they support parent companies). Based on the concept of authorship, I added functionality to our application, that allows a user to author notes about any property. Notes can be private (i.e. for the person's eye's only), shared with everyone in their company or publicly available. The user decides who their notes will be available for.

The next Web 2.0 concept that I intend to implement in this application is tagging. I plan on allowing users to specify tags for any property. For example, a user might determine that they want to tag a property as an investment opportunity or as a friend's home or my home, etc. Then when viewing properties that I've requested information for, the user will be able categorize the properties (i.e. group by) the tags created by the user.

If you're a developer or designer, take a minute and think about how you can "think in Web 2.0." And if you're an application user, take a minute and provide some feedback to your development team helping them "think in Web 2.0."

Thursday, October 11, 2007

Web 2.0 Development Environments

We're down to the last section of the Web 2.0 article and here it is. In this section, I discuss the Oracle development environments that you might want to consider:

Development Environments
Web 2.0 includes a number of development environments. In this paper, we’ll discuss:

  • Oracle Application Express
  • WebCenter Suite
  • Ruby on Rails
  • Grails on Groovy
  • .NET
  • PHP
  • Flash and Flex

The development environment you select will depend on numerous factors including your core competencies. If you’re an Oracle shop, Oracle Application Express is the most logical place to start.


Oracle’s Application Express (Apex)
Apex provides an excellent entry point (and long-term) solution to take you into Web 2.0. Apex provides solid Web 2.0 user interface components, the ability to develop mashups, collaborate, embed Web Services and so much more. If you’re interested in more specifics about Apex and how it fits into the Web 2.0 world, visit: http://www.oracle.com/technology/products/database/application_express/html/web2.0.html
The foundation of Application Express (i.e. the PL/SQL module for Apache) is not new technology by any means. It’s been around since the early 90s (except that it was embedded into a Spyglass app server). Apex uses SQL and PL/SQL as its basis for development. Apex abstracts the developer from writing HTML, AJAX, Web Service calls by providing an amazing wizard-based development environment. Apex is an excellent development tool for any existing Oracle shop where the core competencies include SQL and PL/SQL skills.

Oracle’s Apex Website (http://www.oracle.com/technology/products/database/application_express/index.html), hosted environment (http://apex.oracle.com/) and Apex forum (http://forums.oracle.com/forums/forum.jspa?forumID=137) all provide you with greater starter kits, tutorials, sample and starter packaged applications (including employee directories, ask the expert – i.e. Ask Tom, bug tracker, discussion forum and issue tracker – i.e. Metalink and so many more), white papers and considerable Apex knowledge.


Apex includes many Web 2.0 features including build-in AJAX (called On Demand Processes), functionality to integrate into your applications, Web Services, Partial Page Request (PPR) Reporting and Charting, Auto Updating Reports and Charts, Reports with AJAX based Detail Frames, AJAX-Based Cascading Select Lists, Query Builder, SQL Workshop Query by Example, Flash charting, tooltips, and expanding trees.


Apex has always done a great job of providing its roadmap for the future. Version 4.0 of Apex has been touted as the Web 2.0 version, which will include some new Web 2.0 functionality including:

  • Interactive reporting region types which natively integrate Web 2.0 features to filter, break and sort data
  • Declarative support for AJAX validations
  • New item/region types, including DHTML calendar and AJAX tree


For more information on Oracle’s Apex statement of direction, see: http://www.oracle.com/technology/products/database/application_express/apex_sod.html

There are two additional benefits of using Apex:

  1. If you already have an Oracle database, you already have Apex. In other words, it comes with the database. You don’t have to purchase Apex separately. So you get Apex “for free.”
  2. If you don’t already have an Oracle database and you can run your application on Oracle Express (Oracle Database 10g Express Edition or XE), you can run your application on Oracle and Apex for free. In fact, XE is an excellent free solution provided by Oracle. XE comes with Apex as the built-in database management and development environment. With XE you can develop using Apex, Grails, Java, PHP, .NET, or most any development environment. See http://www.oracle.com/technology/products/database/xe/index.html for more information.


WebCenter Suite
If you’re looking for an Enterprise level Web 2.0 solution, then WebCenter Suite is the Swiss Army Knife of Web 2.0. All of the above applications, components and functionality can be created with WebCenter. WebCenter Suite includes functionality for:

  • Visual interfaces of Web 2.0
  • Oracle ADF Faces
  • AJAX
  • Adobe Flex
  • Collaboration & Social Networking - Wikis and Blogs - Authorship
  • Linking and Tagging
  • Content Management
  • Search Management
  • Portal and Mashups
  • Web Services and other Extensions


WebCenter is the main integrated development environment (IDE) for all Oracle eBusiness Suite applications. WebCenter has been around for some time. It was formerly called JDeveloper, which is a complete IDE (not just for Java). WebCenter is the future of Oracle Fusion. For more information see: http://www.oracle.com/technology/products/webcenter/services.html


WebCenter is Oracle’s promise land for Web 2.0 and the future of all Oracle Fusion Middleware development. For more information about AJAX within WebCenter, see: http://www.oracle.com/technology/tech/java/ajax.html


All of the new open standards Portal functionality is built into WebCenter. If you’re interested in developing a complete mashup application, you’ll want to read Chris Ostrowski’s book, “Oracle Application Server Portal Handbook” (http://www.amazon.com/Oracle-Application-Server-Portal-Handbook/dp/0072264608) and his Web site demos (http://oski-oracle.info/index.html). Oracle’s demos provide about 10 percent of what you’ll need to do. Chris’ excellent demos will provide the rest of the critical information.

You may also wish to check out the WebCenter and Web 2.0 Forum: http://forums.oracle.com/forums/forum.jspa?forumID=354

Ruby on Rails
Many sites have been developed using Ruby on Rails. Ruby uses a template-based approach to application development. The RubyOnRails Web site (http://www.rubyonrails.org/) provides great tutorials and other pertinent information about Ruby. Ruby helps you follow best practice methodologies without coding as such – i.e. it’s automated. There are several great articles for using Ruby for Oracle such as http://www.oracle.com/technology/pub/articles/haefel-oracle-ruby.html. Sites such as http://www.bookrenters.com/ use Ruby as their development platform. Ruby can be thought of as a Web 2.0 development environment. Web Services will automatically be created for each interface that you develop.


Rails is similar to SmallTalk, which is not an easy programming environment to learn. Ruby greatly simplifies Rails development by writing large chunks of Rails code for you. The good news is that when you extend beyond the capabilities of Ruby’s wizards, you’ll be able to do anything you would like with Rails.


Ruby is a great development environment for “open source” shops. If you’re an Oracle shop, Ruby is not likely to be your first choice. Rather Apex is often the first choice for Oracle-centric Web 2.0 developers because Apex uses PL/SQL as its core language of choice. Rails is an object-oriented language, which is similar to Java in that regard. Java is typically difficult for Oracle developers to learn.


Grails on Groovy
If Ruby on Rails isn’t confusing enough, how about Grails on Groovy? Grails is the Java version of Ruby. Grails provides a quick development framework. Grails is to Groovy what Ruby on Rails is to Ruby. You can obtain more information at http://build.canoo.com/grails/. Grails is a good Web 2.0 environment if you’re a Java shop looking for a Ruby-like solution.


.NET
If you’re a Microsoft shop, then .NET is likely your development world. .NET is effectively Microsoft’s Web Service world. Oracle provides .NET toolkits for WebCenter. See http://www.oracle.com/technology/tech/windows/odpnet/newbetafeatures.html?msgid=5904414 for more information.


PHP
PHP originated out the Perl shops. If you’re a Perl shop, you might want to consider PHP for your Web 2.0 development. Oracle also provides PHP toolkits for Oracle. If you’re interested in these toolkits, see: http://www.oracle.com/technology/tech/php/index.html


Flash and Flex
If you like Oracle’s Application Developer Framework (ADF), but you don’t feel its “open source” enough for you, you might want to consider using the Eclipse IDE with the Adobe Flex plug-in. Flex provides the Web 2.0 functionality and the rapid application development that you’re seeking.


Adobe Flash is used by many of the Web 2.0 application development environments. For example, Apex includes Flash for charting.


Videobloom (http://www.videobloom.com/) provides a number of Flash-based development toolkits.

Conclusion
As you can tell, Web 2.0 is a complex topic. Oracle recently created an excellent Webcast on Web 2.0. that complements this paper. You can find this Webcast at: http://www.oracle.com/pls/ebn/live_viewer.main?p_direct=yes&p_shows_id=5828710
Hopefully this paper has provided you with a better understanding of the components involved in Web 2.0 as well as the development environments that are available. Again, if you’re a traditional Oracle shop, Oracle Application Express is the most logical place to start your Web 2.0 effort.


Through this paper, you’ve seen examples of how Web 2.0 delivers a new platform of real-world applications that allow employees and customers to share information in a much more cost-effective method. Hopefully they have inspired you to think about how you can replace email as your business’ collaboration tool and how you might approach a Web 2.0 application for your employees and customers.

For Further Reading:
White Paper:

(www.tusc.com/wp)
Internal and External Application Integration through Web Services

Web Briefing:

(www.tusc.com/briefing)
Internal and External Application Integration through Web Services
How IntelliReal uses Web Services to Enable Customers to Better Service their Clients

Books:

Oracle Application Server Portal Handbook (ISBN: 0072264608), by Christopher Ostrowski
Oracle HTML DB [Apex] Handbook (ISBN: 0072257687), by Lawrence Linnemeyer & Bradley Brown

Wednesday, October 10, 2007

Web 2.0 Components - SLATES

As promised, today I'm covering SLATES from my Web 2.0 article.

SLATES is an acronym that Oracle has publicized and readily discussed. It stands for the components that make up an Enterprise Web 2.0 application. SLATES stands for Searching, Linking, Authorship, Tagging, Extensions and Signaling, as discussed in this section.

Search
Search functionality is something that Oracle has been providing for years. Today it’s called Oracle Secure Enterprise Search, but it was originally known as Oracle Ultra Search. It is a robust search engine for data files, your Web applications, email and more. When it comes to executing searches (i.e. queries) against a relational database, Oracle has always been king. For years, Oracle provided functionality to search large character objects (CLOBS) as an add-on product called Oracle interMedia. However, as of Oracle 9i, this functionality was embedded into the Oracle database and is now called Oracle Text. If you’re hoping to search data spatially, Oracle historically provided this functionality as a separate license too, but as of Oracle 10g, it’s embedded into the standard edition and is called Oracle Locator.

In other words, using all of the available search features of the Oracle database (and Oracle Enterprise Search), you’ll be able to provide powerful search functionality in your Web 2.0 application. Other search choices include using a hosted solution such as Google or Master.com. You can also purchase a Google Search Appliance, FAST or Verity to provide this functionality for your application.

Links
Helping users maximize their efficiency is key to a Web 2.0 application. By tracking what “links” users click on and use, the application can figure out the relevancy or popularity of application components. This capability allows the application to automatically be user-usage customized. By learning about what people use (i.e. aggregating this information) and customizing the look and feel of the application based on usage, users should have better user interface (UI) experiences. Tracking performance at the component level will also help triage your database administration focus.

Oracle’s content tracker will manage this process for you. Tools such as Oracle Application Express (discussed below) have usage tracking built into the applications.

Authorship
The ability to take notes and discuss topics in your application are important functions for a successful Web 2.0 application. Numerous open source offerings will fill this need. Depending on the application, you may find it as simple as storing information about records in your database. For IntelliReal (www.intellireal.com), users have the ability to blog their comments about any property in the United States. This information is stored in the database in a simple table structure. Users can indicate whether their comments are only available for their eyes, available to everyone in their company or available to the public. Hosted applications such as BlogSpot (http://bradleydbrown.blogspot.com/) are also available for your applications.

Another great source of authoring functionality lies with a wiki server - another open source offering (http://www.mediawiki.org/wiki/MediaWiki). If you’re not familiar with a wiki, according to the most successful wiki, WikiPedia (http://en.wikipedia.org/wiki/Wikipedia), the definition is: “A wiki is a medium which can be edited by anyone with access to it, and provides an easy method for linking from one page to another. Wikis are typically collaborative websites, though there are now also single-user offline implementations. Ward Cunningham, developer of the first wiki, WikiWikiWeb, originally described it as "the simplest online database that could possibly work". One of the best-known wikis is Wikipedia.”

Yet another way to think about authorship is that it’s similar to the Oracle discussion forum functionality. Oracle provides a free Oracle Application Express (Apex) forum application on the Apex Web site (http://apex.oracle.com/).

Tagging
Automated categorization of application data and content through rules and intelligent algorithms is another important component for a Web 2.0 application. If you haven’t looked at Google Mail’s tagging or content categorization, you’ll want to do so. The ability to easily group things together, provides for a whole new level of application.

Extensions
Providing a flexible architecture that can grow into Web 3.0 is going to be key. The ability for you to seamlessly extend your application via extensions provides for a composite application that to a user will appear as if you developed it completely on your own.

In this section, we’ll discuss Web Services, REST, BPEL, SOA, Mashups and Portals so that you’re familiar with a variety of Web 2.0 extensions that are available.

The Service Oriented Architecture is a message-based architecture that uses a number of message types to accomplish its goals. As you’ll soon understand, Web Services and REST are basic units of message communication, and BPEL adds a workflow layer to your messages. We’ll discuss SOA last since it’s a combination of the other components. The foundation for this section is built using Web Services or REST components.

Web Services
Web Services can be described as the ability to provide machine to machine interaction over a network. “Web” refers to the network. “Services” are programs or function that you probably already have and are using in your business. In other words, Web Services provide you with the ability to run a program that exists on another server as if that program is on the server executing the program. This capability allows one machine to communicate with another machine – i.e. system-to-system integration. Web Services can be executed in a closed network (i.e. intranet) or open network (i.e. over the Internet). Using Web Services provides internal and external application integration. If you’re interested in more uses of Web Services for internal and/or external integration, please see the references at the end of the paper.

Web Services can be used for activities including:
  • Extracting real-time or historical weather, traffic, stock quotes and currency rates
  • Gathering search engine data from Google
  • Looking up property values, comparable property details and more from IntelliReal, Zillow, etc.
  • Verifying and charging credit cards
  • Looking up and ordering books or other items from Amazon
  • Performing D&B credit checks
  • Mapping data points using MapQuest, Google, Yahoo and Virtual Earth; retrieving lat/longs and driving directions
  • Performing Customer Relationship Management (CRM) activities – add new prospects, etc.
  • Using Electronic Directory Assistance
  • Performing calendar scheduling and management

Web Services allow one business to transparently use functions from another business as if everything is owned by them. The Terabitz site discussed previously (http://www.terabitz.com/) is an excellent example of a site employing Web Services. And I also have another white paper (Internal and External Application Integration through Web Services) that discusses how IntelliReal (http://www.intellireal.com/) employs Web Services (another excellent example of the use of Web Services).

If the Web Services are deployed on Oracle Fusion Middleware, the Oracle Web Services Manager allows you to remotely monitor and manage your Web Services. While Identity Management has typically been focused on securing and managing user-to-application interactions, most organizations also need to manage interactions between the applications themselves. Web services provide a simple, standardized way to connect applications over the Internet, but they require management of security and other runtime operations to work effectively. Oracle Web Services Manager—a member of the Oracle Fusion Middleware family of products—is a software solution for managing the operations of Web services and the interactions between these services.


For more information on Web services, see the reference section at the end of this paper.

REST
As defined by Wikipedia, “Representational State Transfer (REST) is a style of software architecture for distributed hypermedia systems such as the World Wide Web. The term was introduced in the doctoral dissertation of Roy Fielding in 2000,[1] one of the principal authors of the Hypertext Transfer Protocol (HTTP) specification. It has since come into widespread use in the networking community.”


Think of REST as a simplified method of calling Web Services using a URL (i.e. GET and POST methods). Many vendors provide REST solutions on top of their Web Services. We sometimes refer to these as “servlets” that call the Web Services and return a simplified data type – i.e. a PDF or simple object.

SOA
As defined by Wikipedia, “Service-oriented Architecture (SOA) is an architectural design pattern that concerns itself with defining loosely-coupled relationships between producers and consumers. It has no direct relationship with software, programming or technology by any means, however, is often confused with an evolution of distributed computing and modular programming.”


Oracle SOA Suite is a complete set of service infrastructure components for building, deploying and managing SOAs. Oracle SOA Suite enables services to be created, managed and orchestrated into composite applications and business processes. With Oracle SOA Suite's hot-pluggable components, organizations can easily extend and evolve their architectures instead of replacing existing investments.

Oracle’s SOA suite components include:

  • Oracle JDeveloper 10g
  • Oracle Business Rules
  • Oracle BPEL Process Manager
  • Oracle Business Activity Monitoring
  • Oracle Web Services Manager
  • Oracle Enterprise Service Bus

BPEL
Again, according to WikiPedia, “Business Process Execution Language (or BPEL, pronounced 'bipple', 'bepple' or 'bee-pell'), is a business process modeling language that is executable. The origins of BPEL can be traced to WSFL and XLANG. It is serialized in XML and aims to enable programming in the large. The concepts of programming in the large and programming in the small distinguish between two aspects of writing the type of long-running asynchronous processes that one typically sees in business processes.”


BPEL is emerging as the standard for assembling a set of discrete services into an end-to-end process flow, radically reducing the cost and complexity of process integration initiatives. Oracle BPEL Process Manager offers a comprehensive and easy-to-use infrastructure for creating, deploying and managing BPEL business processes.


BAM
Oracle Business Activity Monitoring (Oracle BAM) is a complete solution for building interactive, real-time dashboards and proactive alerts for monitoring business processes and services. Oracle BAM gives business executives and operation managers the information they need to make better business decisions and take corrective action if the business environment changes.

The benefits of BAM include:

  • Rich, visual dashboards — Highly-visual dashboards present information in real-time through a completely thin, browser-based client
  • Powerful, real-time analytics — Process and analyze event data using advanced complex event processing technology
  • Built for business users — Business users can personalize dashboards and build their own reports and alerts with near-zero coding

Composite Applications and Mashups
A composite application or mashup is a Web application that combines data (i.e. from Web Services) from more than one source into a single integrated tool.


Many mashups exist that use Web services from Google, eBay, Amazon, Zillow, etc. Yahoo Real Estate provides a mashup of property values from Zillow, eAppraisal and Reply!


Signaling
Signaling will provide your users with the ability to be alerted based on specific conditions that are met. IntelliReal users can be alerted based on properties that meet specific conditions. For example, any time a property is updated (you might want to watch your own home’s information), is listed on the MLS market (you might like watching homes in your neighborhood to see who’s listed their property), is listed by owner (if you’re a realtor, you might want to contact the for-sale-by-owners), is sold (you put an offer and it was rejected), the list price is decreased (you’re waiting for them to lower the price), has a MLS list price less than the actual value of the house (in the event that you’re a fix and flipper) and more. These alerts are all driven through database queries that use UTL_SMTP to send emails to customers. There are many methods that can be used to alert your users.


RSS or Really Simple Syndication also provides an excellent method of letting users know when relevant content changes within your Web 2.0 application. According to Wikipedia, “RSS is a family of Web feed formats used to publish frequently updated content such as blog entries, news headlines or podcasts. An RSS document, which is called a ‘feed,’ ‘web feed,’ or ‘channel,’ contains either a summary of content from an associated Web site or the full text. RSS makes it possible for people to keep up with their favorite Web sites in an automated manner that's easier than checking them manually. RSS content can be read using software called an ‘RSS reader,’ ‘feed reader’ or an ‘aggregator.’ The user subscribes to a feed by entering the feed's link into the reader or by clicking an RSS icon in a browser that initiates the subscription process. The reader checks the user's subscribed feeds regularly for new content, downloading any updates that it finds.”

Web 2.0 Components - AJAX

Today I'm going to continue my Web 2.0 article. In today's Blog, I'm going to cover up through AJAX and tomorrow I'll cover SLATES in detail.

Web 2.0 Components
It’s time to take a look at the components that make up Web 2.0. AJAX provides the visual side of Web 2.0. A number of other technologies make up the collaboration and robustness of Web 2.0. Oracle came up with the SLATES acronym to define the Web 2.0 components. In this section, we’ll discuss AJAX and SLATE:
  • AJAX - Asynchronous JavaScript and XML
  • SLATES
  • Search
  • Link
  • Authorship
  • Tagging
  • Extensions
  • Signaling


Asynchronous JavaScript and XML (AJAX)
The concepts of AJAX have been around since frames were introduced into the Web browser. At TUSC we first implemented “AJAX” into Web applications more than 10 years ago. In my first presentations on this subject, I called this concept “Field level validation.” AJAX is typically the primary component responsible for making a Web application look and act like a desktop application. AJAX allows your application to seamlessly call the server based on any event (i.e. keystrokes, time passing, mouse movement, etc.).


Remember that a traditional Web application requires that the entire page is sent to browser for every request. In other words, historically when you clicked on a button in a Web application, the browser would send a HTTP request to the Web Server, which in turn would return a Web page in its entirety. There was no such capability available that provided “partial page rendering.” However, using sneaky techniques, developers figured out ways to make “secret” (or hidden) requests of the server via hidden frames using JavaScript, which would force events to occur in the browser – i.e. render a component on a page. As was mentioned above, we often used this technique for things like field level validation for “heads down” data entry pages. This allowed a user to enter the product ID and upon exiting the field (i.e. which caused a JavaScript onBlur event), we would make a call to the server to look up the part number and return a description and a picture of the item. 10 years ago, this was considered innovative. Today – this is built into browser functionality – it’s AJAX.

I’d like you to think about Google Maps for a minute. If you’re not familiar with Google Maps, please take a minute to go to the Website (http://maps.google.com/) and type an address in. Then click on the buttons in the map, such as zoom in and out, view the satellite map, etc. The last step I’d like you to try is to drag and drop the map to view a new portion of the map. Now let’s think about what’s required as these buttons are pushed and mouse events occur. When the page first displays, the server sends the entire page to the browser. From then on, AJAX does most all of the work. When you enter an address, note that your entire page does not refresh, just the map refreshes. If you enter a business name or category (i.e. paint store) with the city, the map (not the page, just the map) refreshes along with the business flags on the map. The browser makes an AJAX call to the server with the address you enter and returns all of the information necessary (as XML) for the map to be updated along with flags associated with business, address, etc. that you provided. When you think about the map, it’s made up of series of images that are displayed contiguously. When you drag and drop the map, Google’s AJAX code keeps track of the images that have already been loaded and only requests (of the server) the images that it needs to complete your “new” map.

Now let’s take this to another level of map integration. Google supplies an AJAX library that you can use to visually display any data you wish to see using their maps. For example, check out the Terabitz Website (http://www.terabitz.com/), which is shown below. This site is called a “Mashup.” Enter an address and Terabitz uses a number of Web Services to pull together data and represent the data graphically using Google Maps. Note that when you drag and drop the map, not only does Google know to pull in the needed additional mapping images, but Terabitz pulls the additional items that belong on your map (such as a recent home sale). How is this possible? The Google AJAX library is able to tell you the latitude and longitude coordinates of map being displayed, which in turn can tell you which additional records (from your database) you should include for mapping. Or in Terabitz case, allows them to call additional Web services to combine information from a number of valuation engines.

Terabitz Application

Let’s talk about AJAX and how it does all of this cool stuff. First, let’s break down the name itself. AJAX stands for Asynchronous JavaScript and XML. Asynchronous simple means that while the user is continuing to do their work in the browser (i.e. unbeknownst to the user), we’re going to have some code executing asynchronously (i.e. at the same time) in the background. JavaScript is the language that’s used on the browser. XML is how the data from the server is returned to (and then parsed) the JavaScript code. What you do with the data you receive back is up to you. It might display an alert message, fill in text or graphics, or call other JavaScript libraries. Using AJAX you could use Google’s library to place flags (representing properties or businesses) on the map that is current within the window.


Now that you have a better feeling for what you can do with AJAX along with some example applications to visit, you might be wondering, “how do I implement AJAX?” What add-ins are required on the browser? You might be thinking about Applets and Active-X controls that have prompted you for security questions and wondering if AJAX does this too. Fortunately AJAX is built into the browsers and has been for quite some time now. There is nothing to install on the browser – it’s already all there. Specifically, I’m referring to the XMLHttpRequest JavaScript statement. Therefore, all that’s required is that JavaScript is available on the browser. When it comes to “implementing AJAX,” you can write your own AJAX libraries, use vendor provided libraries (such as Google’s AJAX libraries for Google Maps), use retail libraries (such as Backbase), and use open source libraries (such as OpenAJAX Alliance http://www.openajax.org/ and the OpenAjax Hub http://www.openajax.org/OpenAjax%20Hub.html).


If you’re going to write your own AJAX library, you’ll want to search for information on the Web. There are many great articles and tutorials on this subject. I’d recommend taking a look at numerous AJAX-based applications so you get ideas on the functionality that you want to embed into your application.


Take a look at the sites mentioned above and applications like Google Suggest (http://www.google.com/webhp?complete=1&hl=en) where as you type a phrase, Google will offer suggestions (and how many matches there are for each possible phrase that matches):
Google Suggest.


If you’re interested in conferences on AJAX, check out AJAXWorld (http://www.ajaxworld.com/). If you’re interested in playing with some AJAX libraries and learning more about AJAX, I’d recommend checking out the Google libraries. Google’s libraries include the search API (http://code.google.com/apis/ajaxsearch/) and the Maps API (http://www.google.com/apis/maps/documentation/). Google also has an impressive Mashup editor that you can use (http://code.google.com/gme/) and so much more!


Oracle has also made it clear that they plan to fully support the AJAX and Web 2.0 movements. Oracle calls it Enterprise Web 2.0. In the article titled “Oracle Pushes Enterprise Ajax Frameworks” (http://www.computerwire.com/products/locator/?pid=AE6D8B24-EF32-4251-A5D3-28D8CCE6B5E1) it’s clear just how much Oracle wants to push AJAX and Web 2.0. On numerous fronts, Oracle has been a thought leader for new technologies. For example, before Java Server Faces (JSFs) were a standard, Oracle came up with their own version called User Interface Extensions (UIX). They helped the standards committees establish the standards in the JSF world. This was true for Web Services too. One thing that I greatly respect is that Oracle knows how to be a part of the standards committees and they know how to make sure the open standards are implemented in their development platforms before anyone else does. This is quite impressive.

Monday, October 8, 2007

Web 2.0 - The Introduction

I finally finished the first draft of my Web 2.0 article. This will go through some editing now, but I wanted to get the first part of this article out here ASAP - I'm going to publish the article in pieces since it's not a simple cut and paste operation:

The Introduction

You’ve heard the term Web 2.0 and might be wondering exactly what it means to you and your business. You might be wondering what Web 2.0 includes. On the other hand, you might be right in the middle of it all, but noticing that more and more Oracle products seem to offer Web 2.0 entry points. Or maybe you’re not using Oracle technology for anything but your backend database. You might be wondering which other products should be under consideration? Which should be avoided? What’s a good entry point solution?

Perhaps you missed Web 1.5 altogether. If so, you might be wondering whether you can jump right into Web 2.0 or if you have to start at Web 1.5 first. If you missed Web 1.5, you’ll be happy to know that you can skip directly into the Web 2.0 world. If you’re looking for a competitive differentiation for your company, Web 2.0 will provide this for you. The primary advantage of a Web 2.0 application is that it’s VERY simple to use!

As the name implies, Web 2.0 is the next generation of the Web. Web 1.0 helped us take data and publish it to the Web – primarily via dynamic HTML pages. Web 2.0 goes beyond the user interface. One of the common issues with Web 1.0 offerings was that people (i.e. customers and vendors) wanted the content (i.e. the data), but not the presentation (i.e. HTML wrappers). So people effectively wrote screen scraping methods of extracting the data. We sometimes pondered the legal aspects of doing so with public data – such as stock quotes from Yahoo. With Web 1.5, Web Services replaced the need for screen scraping. It’s now time to move to the next level with Web 2.0. Concepts such as social networking and collaboration (i.e. blogs, RSS and wikis) are part of Web 2.0. Additionally mashups (portals) are an important component of Web 2.0. In other words, Web 2.0 takes the Web to a whole new level!

One of the primary issues in business today is that people are using email as the collaboration tool of choice. Much of what’s behind Web 2.0 is taking collaboration to a whole new level. This evolution doesn’t mean that you’re going to sit in more meetings or communicate remotely using a suite of collaboration software. Rather, Web 2.0 delivers an entirely new platform of real-world applications that will allow your employees and customers to share information in a much more cost-effective method. Keep in mind that Web 2.0 is not a tool – it’s a platform. Most of the tools and concepts that comprise the Web 2.0 platform originated in the open source world. These tools have changed the way that people communicate inside and outside of companies.

The concepts in Web 2.0 aren’t new concepts, but they are becoming mainstream. It’s interesting to note that Web 2.0 is very similar in concept to what Forrester Research called Transactive Content in a white paper that was published 10 years ago – yes, the Forrester report was released at the 1997 Forrester Forum!

Hopefully you’ve seen a Web Application and thought, “wow that takes the Web to a whole new level.” Now imagine if your entire business revolved around an entirely new level of collaboration capabilities. The visual component of a Web 2.0 application often looks like a traditional client/server application or a standalone desktop application. In other words, Web 2.0 provides a desktop-like user interface. Microsoft Office Outlook Web Access looks like Outlook that is running standalone on your desktop or laptop. Google Maps (http://maps.google.com) looks like a standalone application running on your laptop, yet it’s a browser-based application. Enter an address in Google Maps and you’ll visually see a map of the address’ location. You can zoom in and out, drag and drop the map, get a street view, view traffic information, see a satellite view, and so much more. Another impressive Web 2.0 site is the Cyberhomes site (http://www.cyberhomes.com), which provides an attractive user interface with informative graphics and other Web 2.0 functionality. Flickr and NetFlix are some other familiar names in the Web 2.0 realm of user interfaces.

Many companies offer the backend Web 2.0 components that you can embed into your own application. These backend services are called Web Services. Without scraping HTML for data, you can make “their data” appear on your site as if the data is coming from your own databases. You can pull data together from a number of different companies’ data into one consolidated site. When you pull together data from numerous (i.e. two or more) companies, this aggregation is often called a mashup or a composite application. Google, eBay, Amazon, and Zillow, for example, provide publically available Web Services, and many such services are available for free. If you’re interested in reading more about Web Services, there are several articles and presentations in the reference section at the end of this paper.

Those of us in the technology business sometimes get lost in the marketing white papers and do not know where to go to get the "truth". This article is meant to be your “truth article” on Web 2.0.

In this paper, we’ll address some of Web 2.0 concepts that might be less understood. You’ll find this paper of interest if you do not understand how Web 2.0 applies to myriad of development environments that tout their Web 2.0 capabilities such as Oracle’s Application Express (Apex), Ruby, Java, .NET, PHP and more. If you’re wondering where each of these components fit into the Web 2.0 picture, this paper will be of interest to you. For example, you’ll get answers to questions like “what is Ruby, why would I want to use it?” and questions like “What skill set do I need to use it, how hard is it?”First we’ll cover the components (i.e. what makes up a Web 2.0 application environment) and provide some examples of how others are using Web 2.0. Hopefully, these examples will inspire you to brainstorm about how you can use Web 2.0 technology for your company or customers. We’ll then explore a variety of Oracle-based Web 2.0 development platform choices that are available.

Sunday, October 7, 2007

A Few Pictures from the Brown Art Collection

Austin (my son) and I love photography. Here's a sample of some of our art work and recent activities. Enjoy! Bye bye Flickr, hello Google picture library. How cool is this Web 2.0 feature:

Saturday, October 6, 2007

Time to Start Blogging

Based on a conversation on Friday, I thought I'd check out the new Google Mail. As usual, I was incredibly impressed with Google. I've been working on a Web 2.0 article for a while now. I've come to the conclusion that Web 2.0 is going to be our attempt to replace something that's terribly efficient in the business world - email! Google Mail changes the email landscape - maybe we don't need to "replace" email. I've been using Flickr for my picture library, but Google now has this feature too. The contact management, calendaring, document management and collaboration and everything else that Google continues to offer the world continue to amaze and impress me. Excellent use of funds Google!