June 2006 Archives

Tim O

AddThis Social Bookmark Button

Firestar Software claims that Hibernate infringes on US Patent 6,101,502. Read more about this case at InfoQ.com. Could this could be the start of a series of rulings that could have a chilling effect on open source? I certainly hope not…. but, it is certainly possible….

Please use the comment thread to list all the known examples of prior art that come to mind.

Steve Anglin

AddThis Social Bookmark Button

InfoQ.com reports: Eclipse Callisto debuts with the release of 10 Eclipse toolsets simultaneously.

Tim O

AddThis Social Bookmark Button

Technology adoption is an unpredictable process - part theater, part academic review, part marketing. In Java it is especially confusing becuase we have so many different “channels” to watch for new anouncements, there are conferences, there are web sites like Slashdot and TheServerSide, there are a zillion personal blogs like DHH, and O’Reilly’s Radar. An interesting technology might generate a huge buzz one week only to see this buzz fall off as people notice that the product wasn’t ready for prime time.

For a product to make it into the mainstream, early adopters have to like a product enough to undertake the often impossible task of convincing more cautious developers that new technology X is worth adopting. Technologies such as Hibernate or the Spring Framework take years to become established products. Some products, like Maven, have a hard time becoming established because they either lack sufficient documentation or have difficulty challenging well established products like Ant. I’m interested in this blind spot in the process, the time between the buzz producing introduction and early adoption to large-scale adoption usually takes months to years, and is difficult to chart because, in many ways, it is viral. HIbernate didn’t take the world by storm as much as it slowly reached a critical mass of self-sustaining adoption. A failed project like OJB certainly generated a buzz at one time, but it failed to make good on promises - in that case early adopters actively discouraged others from using it in favor of Hibernate. Turning our attention to the Google Web Toolkit (GWT)

Where is GWT in this process?

GWT seems to be in the middle of this early-adopters stage. The initial buzz has worn off, we saw a flurry of articles and blog posts about GWT, and it appears that we’re waiting for this first class of GWT adopters to report back on experiences with the GWT. We’re waiting for the first public site to show us what is possible with the GWT. My more cautious colleagues are avoiding it altogether, actively disparaging it as a bad idea altogether. Risk averse developers tend to criticize most new technologies until they have been demonstrably proven to work in a real-world situation - “Maven ‘Sucks’ until they see that IBM is using it, etc”. Those developers that have the ability to take risks are taking the framework out for a test drive. Of these early adopters one has sworn it off completely as inappropriate for his organization, “It reminded him too much of Swing”. Another colleague has embraced the idea in principle, but doesn’t have the time to integrate it into his existing web application. In terms of adoption where is the Google Web Toolkit? What is the experience of the early adopter crowd?

To answer this question I spoke with Michael Podrazik of Grassroots Technologies, a consulting group based in New York City. Through his work with Grassroots, Michael has been using the Google Web Toolkit (GWT) for a new web application currently under development. In the following interview I asked him to communicate his own experiences with this product in an attempt to help others currently considering the GWT. I specifically asked him for an objective opinion of GWT, and to describe, in detail, the challenges he faced when developing with the GWT framework. Hopefully, this information will help you decide whether or not GWT is the right choice for your projects.

Read on, read the interview and share some of your own real experiences with GWT in the comment thread.

Paul Browne

AddThis Social Bookmark Button

Chances are , you get get paid on a ‘Time and Materials’ basis - either as an employee or a consultant. Chances are, you’ve also thought that some extra work , perhaps at a fixed price, would be a nice sideline. Before you dive in, remember the following 5 key points.

  1. Write a Project Outline. Say exactly what will (and just as importantly) won’t be carried out as part of the project. This can take a lot of time to put together, but is essential to avoid trouble later. Even better get the client to pay you to write this, as it’s vital for them as well.
  2. Client dependencies. Do you depend on the client to get things done? If so, specify exactly what the must provide and when. Can’t specify exactly when you need (and there are many projects where this is the case)? Then do the work on a time and Materials basis only.
  3. Be visible to end client. The temptation is to go into a dark corner and start coding. The trouble is that you emerge blinking into the daylight at the end to find (i) The client frantic with worry about how the project is going and (ii) that events have happened that you sh. ould have known about. Price in regular time on the client site to keep in touch.
  4. Contingency. A wise man once said (In this case the instructor at the PMBOK course in Chicago): ‘If you can’t carry out the project with 15% time left over , don’t start it. For fixed price projects, make this something like 30% as the client will ask you to do little ‘extras’ and you can’t ask for extra money for every single one.
  5. Almost as important as knowning when to start (see point 1) is knowing when to finish. Document everything and do a final ‘handover’ day (a good idea is to hand over a CD whith all project deliverables on it). If you don’t do this, the project will never end, and you will never get paid.

Notice that all these items are about process , and not technology. Put simply; you can mess up your project just as easily using Java , PHP or .Net . Mess up as an employee or consultant, you get shouted at by the boss. Mess up on a fixed price and you’re into serious pain as you burn through (unpaid) extra time.

More from Paul in Technology in Plain English

Steve Anglin

AddThis Social Bookmark Button

From JavaWorld.com, I saw this “Sun says open-source Java possible in ‘months’: Logistics such as maintaining compatibility still being worked out.”

Tim O

AddThis Social Bookmark Button

Stumbled upon javaref.com a really interesting use of AJAX to try to improve upon Javadoc. Thanks to Karthik Abram for pointing this out to me.

Features I’d like to see:

1. …a way for component authors to publish and update versions of Javadoc, by supplying SVN URLs.

2. …a mechanism for viewing a specific version of a component’s Javadoc.

3. …a Maven 2 plug-in that would let someone create Javadoc in the same style with lnks to the javaref.com site.

I think that like the centralized Maven repository, we need more efforts to create hosted reference content for Java. A site like Javaref.com is a good start towards an indispensible everyday tool. Keep it coming.

Dejan Bosanac

AddThis Social Bookmark Button

If you ever needed to parse form-based multipart data, you are probably aware of the Jakarta Commons FileUpload library. But while this library is primarily intended to parse data directly from HttpRequest objects and thus handle uploading of files in your web application, it could be used to parse an arbitrary InputStream and extract multiparts from it too.

As you can probably guess, the part of the library that is related to handling file uploads is well documented, but for the low-level API you can only find the broken example in the JavaDocs. I know that this funcionality is rarely needed, but still it deserves a working example, so here it is.

Robert Cooper

AddThis Social Bookmark Button

In the Bible of Software Development, a new book has just been written.

Steve Jones’ SOA Anti-patterns is one of the best things I have read in a while. I do have to say, however, that I must be missing something on one point here.

Description

Organisations start with a detailed Process map and then attempt to “fit” this into a Service Oriented Architecture; this refactoring leads to process becoming the dominant feature and leads to a Process Oriented Architecture (POA) rather than SOA.
Effect

An organisation’s “Services” come in two basic types, firstly end-to-end processes that co-ordinate lots of individual steps, and secondly a large set of fine grained services that represent individual steps. Any hierarchy or structure is solely from the basis of process. The fine grained services proliferate and become difficult to manage while the large business process elements become difficult or impossible to change. The systems slowly, or quickly, stagnate and lead to solutions being built on top of the existing solution and the general treating of the process oriented system as a legacy application.

I must be missing something here, but this seems to represent EXACTLY what I hate about BPEL orchestrations. Now, I tend to be a fan of having somewhat fine grained services for systems-type access, and larger “Service-Services” that call back into them. The problem here is, both the anti-pattern and the resolution are pretty murky:

The first resolution is to independently of the process map create your services architecture. This will provide the structure for breaking down the processes and creating a clear hierarchy of use. Next, this service architecture should be over-laid onto the process map to understand where the cuts should be made. The current solutions can then be refactored to create a more service oriented solution by attacking the major inflexibilities in the system and then looking towards incremental change of the current systems.

This isn’t even so much about a technique or a pattern. What he is really saying here is “Hey, it helps if you plan stuff out and put a little A in your SO.” That is a whole lot of words for a “well duh” kinda point.

I do have to say, however, that Point to Point Web Services, DIY Transport, UBER Service and Defensive SOA all represent things that I have been railing against for months now at my current employer.

Tim O

AddThis Social Bookmark Button

There’s an interesting discussion of the relationship between Struts Action and Struts Shale happening over on the struts-dev list. The thread is titled “Does Struts really need two frameworks? (long)”, and you can read it over at Nabble.com.
It is an interesting thread. It starts off interesting, it has some good responses, there is some flaming on the thread. Someone even mistakenly sends an embarrasing off-list reply to the struts-dev list. Read more…

Steve Anglin

AddThis Social Bookmark Button

The O’Reilly Open Source Convention (OSCON) 2006 takes place from July 24-28, in Portland, OR. As usual, it includes a Java conference session track.

Steve Anglin

AddThis Social Bookmark Button

From InfoQ.com, the first Spring 2.0 Release Candidate is out.

Steve Anglin

AddThis Social Bookmark Button

From InfoQ.com: The Advanced Message Queuing Protocol (AMQP) specification 0.8 has been announced.

Paul Browne

AddThis Social Bookmark Button

Sun has just launched a new Ajax and Javascript website for Java Developers

http://developers.sun.com/ajax/

Paul

Paul Browne

AddThis Social Bookmark Button

InfoQ have just published a very good article , explaining both why you want to use a Rules Engine and how to do it. In Summary:

‘In general, you might consider a business rule solution if you need to externalize business rules, support rapid change and empower business users to change business rules…

Rules are simpler, easier to write and understand, and use facts that are treated in a less interconnected manner’

If you are in interested in learning more, here are links to two articles I wrote for O’Reilly on JBoss Rules / Drools:

You might also be interested in checking out JBoss Seam which makes it very easy to plug the JBoss Rules Engine into the presentation (JSF-Web) and Database (Hibernate) layers.

More Blogposts from Paul on Rule Engines.

Steve Anglin

AddThis Social Bookmark Button

Here’s the definitive guide to the open source lightweight JBoss Seam - Contextual Components: A Framework for Java EE 5, version 1.0.1.GA.

Steve Anglin

AddThis Social Bookmark Button

This is a recap of sessions attended at JBoss World 2006, held recently:

Tim O

AddThis Social Bookmark Button

Not excited about any Java web application framework these days? Join the club. The reality few want to acknowledge is that many “enterprises” are running along with Struts 1.x applications and they haven’t really started to contemplate what comes next. Or, they’ve thought about what comes next, and the answer hasn’t revealed itself yet. JavaOne might have had the highest attendence on record, but the community is fractured and the energy is unfocused. The answer to “what web framework should we use” is far from clear. Read on, if you are interested in exploring this confusion…

Steve Anglin

AddThis Social Bookmark Button

This is a conference report of JBoss World 2006, held in Las Vegas, NV. This one focuses on the news highlights from the show. More coverage next week.

Paul Browne

AddThis Social Bookmark Button

It serves me right for writing a blog post such as ‘How to avoid losing 150M Euro‘. Just to show you I get things wrong on projects, here’s three mistakes that I made (and should have known better). They all come from a Sales application that we’re doing for a client.

  1. Don’t forget that IT projects are routine for you, but is often new to you (Internal / External) clients. This is closely related to …
  2. Doing IT Projects is your day job, but when your clients will leave a meeting they will have a stack of phone calls to return (and Sales Targets to meet).
  3. Your clients will (and should) have no idea of any technical term. They should not care what Java, Oracle, Ajax, XML or JBoss is. Even semi-technical terms like ‘drop-down list’ should be checked and explained if necessary. Your job is to explain the solution(s). The client’s job is to explain what they want.

This blog post was going to be called ‘why IT people are like Lawyers’ in that we both speak a semi-English language not understood by 99% of the population. We’re often about as popular , and only slightly less expensive. That’s probably an issue for another day.

Paul Browne

AddThis Social Bookmark Button

Most systems until now have been centralised : A bit like the old Soviet Union, everything is centrally planned. The trouble is real-life isn’t like that - it’s a market economy with no central control. There’s a story about a Russian Diplomat posted to New York in the 60’s. On a visit to a bakery he asked - who decides how many loaves are baked in the city? The answer is no-one - each baker individually decides how many to bake based on how many he sold the day before. Somehow (almost) everybody gets fed.

Current OO systems are like the Russian’s view: everything is centrally controlled. Agents are more like New-York (or Dublin) city today - a place full of people (agents) acting in their own self interest. Somehow everything works ok. Economists have a theory that backs this up ; in general a set of people acting in their own self interest gives the best solution at a global level. Or, if you prefer it’s a bit like Ants. Individual Ants are stupid, but together they are clever enough to mark a trail to food and carry it back to the Anthill. It’s called Emergent Behaviour - simple programs combining to give the answers to complex problems.

How does Web 2.0 give a push to Agents? Before, Systems were standalone , and everything planned in advance. With Web 2.0 everything is connected and too complex to manage by one person. We need to look at what works successfully in real life. Just as Market economies overcame the ‘Command and control’ of communism, so Agents will overcome the Command and control of Objects. It may not be perfect, but it will be (slightly) better.

Will agents replace Java and .Net ? A sign that ‘the future is already here’ is that when you read the list ‘what makes an agent’ , you may go ‘but we’re doing that now’. Java and .Net have been around for so long now that it’s easy to forget the Object Orientated Programming (OOP) was once a radical new departure. It’s also easy to forget that languages such as C++, Visual Basic 6 and Powerbuilder were once ‘king of the hill’ and commanded respect from your colleagues when you mentioned your latest project was using them.

So what are agents? Compared to Objects :

  • Agents act in their own self interest , they may decline a request if they think it makes them better off.Objects always respond to a request.
  • Agents have their own thread of control , 1 for each agent. Objects may have their own thread, but most objects don’t. - Agents are pro-active, and seek to improve their lot , according to pre-defined goals.
  • Agents are ‘Coarse Grained’ that is, a system will probably have a few agents will a lot of normal , dependent , objects. It’s similar to the way Enterprise Java Beans are used : not everything is an EJB , and there a still lots of Plain Old java Objects.
  • Objects are designed from the start to work together. Agents can be written by different people , perhaps with widely different goals in mind.

Just like C++ was a procedural language with object orientated ‘bits’ attached, Agents are currently implmented in languages like Java , with agent-y bits attached. Probably the most useful set of bits is Cougaar. Cougaar is an open source project with a live community at Cougaarforge and an Eclipse based IDE. Cougaar gives you the basic infrastructure for creating and managing agents.

Of course , there’s nothing to stop you building your own agents. According to the above definition, most systems that have workflow tieing together entities making decisions according to their own business rules are not far off being agents. Especially when they have a scheduler (i.e. their own ‘thread of control’).

What do you think? Leave a comment below.

Paul also blogs on ‘Technology in Plain English’

Tim O

AddThis Social Bookmark Button

Try the latest Callisto Release Candidate

Whenever I upgrade Eclipse, I’m tempted to download the latest development release. Instead of clicking on the production release, I tend to look for other versions and download the latest release candidate or integration build. I’ve been running a Eclipse 3.2 integration build since last November, and it worked so well I forgot that I was using an early integration build. I finally upgraded this week, and in doing so I decided to try the latest release candidate of the Callisto Simultaneous Release. Verdict? It’s official, Eclipse is no longer just an IDE, it is a powerful platform, and I was surprised at the breadth and quality of this release. Read on for an account of my own experience.

Steve Anglin

AddThis Social Bookmark Button

Here is the definitive guide/reference documentation to the Spring Framework, version 2.0 M5 release.

Steve Anglin

AddThis Social Bookmark Button

InfoQ.com, Floyd Marinescu’s new venture, has launched. This new enterprise software development community looks to address today’s heterogeneous enterprise developer/reader who may need Agile, SOA, Java, Ruby (on Rails), and/or .NET.

Chris Adamson

AddThis Social Bookmark Button

In an xml.com blog, Rick Jelliffe argues that the sorry state of desktop Java should prompt Sun to open-source Swing

Steve Anglin

AddThis Social Bookmark Button

In recent news as reported by the SF Chronicle:

  • “Sun plans to cut nearly 5,000 jobs; Santa Clara tech giant also expects to consolidate facilities and restrict poison pills in an effort to woo shareholders”
  • Speculation about potential sale of Sun: CEO says ‘no hidden message’ in job cuts; analysts skeptical”

So, is Sun Microsystems, Inc. (SUNW) priming itself for sale?

If yes, who will acquire/merge with Sun, and what will they gain?

Dejan Bosanac

AddThis Social Bookmark Button

It is common to use final static fields to define constants in your Java applications. For example, you will often find the code similar to this in various Java APIs

public class Example {
  public static int one = 1;
}

which is used in the following manner

System.out.println(Example.one);

Of course, Java supports more complex initialization of static properties through static initializer blocks. One of the most common usages for these blocks is initialization of static collections with known values.

Take a look at the following code for example:

public class Example {
       public final static HashMap constants = new HashMap();
       static {
		constants.put("1", "First");
		constants.put("2", "Second");
		constants.put("3", "Third");
	}
}

and the usage of such static collection:

System.out.println(Example.constants.get("1"));

Wouldn’t you prefer to have more “native” support in Java for dealing with collections? For example, with the syntax that is found in most “dynamic” languages today, the previous example could be replaced with something like this:

public final static HashMap constants = new HashMap() {
      "1" : "First",
      "2" : "Second",
      "3" : "Third"
    }

Collections are one of the crucial aspects of programming languages and would it be normal to see them embedded in the language syntax? Would this “dynamic” syntax, used in Ruby, Groovy and other dynamic languages, make Java applications easier to write (and read)?

Do you have other syntax enchacements that you would like to see in the following editions of Java?

Steve Anglin

AddThis Social Bookmark Button

JBoss’ Marc Fleury and Spring’s Rod Johnson have been interviewed in the following articles below:

Steve Anglin

AddThis Social Bookmark Button

In response to Neil Chaudhuri on TheServerSide.com: “I would love to hear your thoughts on this topic. How can I convince my management not to abandon Java?” Well, here are my thoughts.

Robert Cooper

AddThis Social Bookmark Button

Tim says:

O’Reilly also values its trademarks — as do other companies and individuals aligned with the values of openness and sharing. (I’ll note that Linux is a trademark of Linus Torvalds, that Apache is a trademark of the Apache Software Foundation, Mozilla and Firefox are trademarks of the Mozilla Foundation, Wikipedia is a trademark of the Wikimedia Foundation, and so on.

and

I don’t believe that the arguments about prior use of the term, or about “genericization” have a legal — or even a moral — basis. No one was using the term “Web 2.0″ with its current meaning before we launched the Web 2.0 conference in October 2004, and the subsequent widespread use of the term Web 2.0 to describe the phenomenon itself is outside the scope of the trademark.

I feed compelled to point out, that in the US Microsoft’s use of the word “Windows” failed to stand up to the “Generic use” in the 9th Circuit court. He would be hard pressed to convince me that “Web 2.0″ or for that matter “Water 2.0″ or “Human 6.1″ could hold much more sway than Windows. I am no lawyer, but I think that it is safe to say that “Web” for the “World Wide Web” and the standard software version number are definitely MORE generic than the use of Windows to describe GUI elements, and even the latter couldn’t stand up in court when Lindows came around. I also think, out of the examples provided, only Apache really represents a generic word. Indeed, if they had stuck with Apatchy they would have a very clear cut case, but I highly doubt they would find it easy to get a court to uphold their exclusive use of the term for much at all, if anything.

For the sake of getting the lawyers off our backs, though, I would like to offer up “W3 2.0″ or “W3 R2″ as Creative Commons Attribution 2.0 licensed terms. :)

Advertisement