The Year of AJAX, Take Four: Part I

Unless you’ve been living in Plato’s cave for the last four years, trying to learn about web technology from shadows cast by someone’s monitor, you’ve at least heard of AJAX. It’s the wave of the (very near) future for web applications, one of the fundamental enabling technologies for “Web 2.0.” And, of course, this is the Year of AJAX, just like 2007 was. And 2006, 2005, and 2004.

It’s not that AJAX never really came into being. The technology has certainly been there since at least 2004. And plenty of web sites out there are using it. But it hasn’t become nearly as ubiquitous on the web as people keep constantly predicting. I think part of the reason is that developing AJAX applications from the ground up is not exactly easy, and is very time consuming, and there haven’t been a whole bunch of extensive, declaratively usable AJAX toolkits that integrate well with standard enterprise application technologies like JavaServer Faces.

Is that about to change? Oracle is now in Technical Preview 4 of Oracle JDeveloper 11g, and a production release is hoped for by the end of the year. JDeveloper 11g includes ADF Faces 11g, which itself includes the ADF Faces Rich Client components. ADF Rich Client (ADF RC) components, according to Oracle, “[extend] the Apache Trinidad component framework to provide a rich set of AJAX-enabled JSF components that radically simplifies rich internet application development.”

Continue reading The Year of AJAX, Take Four: Part I

Bring Back the Hobgoblin: Dealing with RowInconsistentException

If you scan through the posts at OTN, one exception that comes up again and again as confusing is oracle.jbo.RowInconsistentException, aka JBO-25014. What causes this exception? Well, as we’ll see below, the answer isn’t so simple. But the proximal cause is that all of the following have occurred:

  • The application uses optimistic locking
  • The application has invoked a commit operation
  • A particular entity object instance has been marked as changed (requiring update)
  • The current values of the corresponding row in the database do not match the original values queried for the row (or, if you’re using change indicators, the current values of the change indicator fields in the database do not match the values of the corresponding attributes)

Now sometimes, you get a RowInconsistentException because another user has actually changed and committed the row in the database since it was queried. That’s, in fact, the case that RowInconsistentException was intended to flag–it’s to keep data integrity, so you don’t get people writing over each other willy-nilly. If you’re getting a RowInconsistentException for this reason, then there’s no bug to fix or work around. You’ve simply run afoul of a (hopefully rare) coincidence.

Continue reading Bring Back the Hobgoblin: Dealing with RowInconsistentException

SOA What?

Web services are great. They allow for loose coupling between applications that use different technologies, are developed and hosted by different organizations, are asynchronous with one another, and so on…all for the low, low price of encoding the request, sending the request over HTTP, deserializing the parameters, serializing the result, sending the result over HTTP, and decoding the result. Well, OK, not that low a price. But what you get for it is pretty impressive.

Sevice-Oriented Architecture (SOA) is the idea of structuring entire applications around web services. Business service implementations are deployed entirely separately from one another and from view/controller implementations, and published as web services. Applications that need to retrieve, analyze, or change data contact the web services to do so. Lots of people love SOA. I’ve even met a fair number who love SOA so much that they think it’s the only reasonable architecture for enterprise applications.

Now, don’t get me wrong here. I’m not anti-SOA. Continue reading SOA What?