Friday, April 3, 2009

Specifying the Exceptions Thrown by a Method

The previous section showed how to write an exception handler for the writeList method in the ListOfNumbers class. Sometimes, it's appropriate for code to catch exceptions that can occur within it. In other cases, however, it's better to let a method further up the call stack handle the exception. For example, if you were providing the ListOfNumbers class as part of a package of classes, you probably couldn't anticipate the needs of all the users of your package. In this case, it's better to not catch the exception and to allow a method further up the call stack to handle it.

If the writeList method doesn't catch the checked exceptions that can occur within it, the writeList method must specify that it can throw these exceptions. Let's modify the original writeList method to specify the exceptions it can throw instead of catching them. To remind you, here's the original version of the writeList method that won't compile.

// Note: This method won't compile by design!
public void writeList() {
PrintWriter out =
new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = "
+ vector.elementAt(i));
}
out.close();
}
To specify that writeList can throw two exceptions, add a throws clause to the method declaration for the writeList method. The throws clause comprises the throws keyword followed by a comma-separated list of all the exceptions thrown by that method. The clause goes after the method name and argument list and before the brace that defines the scope of the method; here's an example.
public void writeList() throws IOException,
ArrayIndexOutOfBoundsException
{
Remember that ArrayIndexOutOfBoundsException is an unchecked exception; including it in the throws clause is not mandatory. You could just write the following.
public void writeList() throws IOException {

Putting It All Together

The previous sections described how to construct the try, catch, and finally code blocks for the writeList method in the ListOfNumbers class. Now, let's walk through the code and investigate what can happen.

When all the components are put together, the writeList method looks like the following.

public void writeList() {
PrintWriter out = null;

try {
System.out.println("Entering try statement");
out = new PrintWriter(
new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++)
out.println("Value at: " + i + " = "
+ vector.elementAt(i));

} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Caught "
+ "ArrayIndexOutOfBoundsException: "
+ e.getMessage());

} catch (IOException e) {
System.err.println("Caught IOException: "
+ e.getMessage());

} finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();

}
else {
System.out.println("PrintWriter not open");
}
}
}
As mentioned previously, this method's try block has three different exit possibilities; here are two of them.
  1. Code in the try statement fails and throws an exception. This could be an IOException caused by the new FileWriter statement or an ArrayIndexOutOfBoundsException caused by a wrong index value in the for loop.
  2. Everything succeeds and the try statement exits normally.
Let's look at what happens in the writeList method during these two exit possibilities.

Scenario 1: An Exception Occurs

The statement that creates a FileWriter can fail for a number of reasons. For example, the constructor for the FileWriter throws an IOException if the program cannot create or write to the file indicated.

When FileWriter throws an IOException, the runtime system immediately stops executing the try block; method calls being executed are not completed. The runtime system then starts searching at the top of the method call stack for an appropriate exception handler. In this example, when the IOException occurs, the FileWriter constructor is at the top of the call stack. However, the FileWriter constructor doesn't have an appropriate exception handler, so the runtime system checks the next method — the writeList method — in the method call stack. The writeList method has two exception handlers: one for IOException and one for ArrayIndexOutOfBoundsException.

The runtime system checks writeList's handlers in the order in which they appear after the try statement. The argument to the first exception handler is ArrayIndexOutOfBoundsException. This does not match the type of exception thrown, so the runtime system checks the next exception handler — IOException. This matches the type of exception that was thrown, so the runtime system ends its search for an appropriate exception handler. Now that the runtime has found an appropriate handler, the code in that catch block is executed.

After the exception handler executes, the runtime system passes control to the finally block. Code in the finally block executes regardless of the exception caught above it. In this scenario, the FileWriter was never opened and doesn't need to be closed. After the finally block finishes executing, the program continues with the first statement after the finally block.

Here's the complete output from the ListOfNumbers program that appears when an IOException is thrown.

Entering try statement
Caught IOException: OutFile.txt
PrintWriter not open
The boldface code in the following listing shows the statements that get executed during this scenario:
public void writeList() {
PrintWriter out = null;

try {
System.out.println("Entering try statement");
out = new PrintWriter(
new FileWriter("OutFile.txt"));

for (int i = 0; i < SIZE; i++)
out.println("Value at: " + i
+ " = " + vector.elementAt(i));

} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Caught "
+ "ArrayIndexOutOfBoundsException: "
+ e.getMessage());

} catch (IOException e) {
System.err.println("Caught IOException: "
+ e.getMessage());

} finally {
if (out != null) {

System.out.println("Closing PrintWriter");
out.close();
}
else {
System.out.println("PrintWriter not open");
}

}
}

Scenario 2: The try Block Exits Normally

In this scenario, all the statements within the scope of the try block execute successfully and throw no exceptions. Execution falls off the end of the try block, and the runtime system passes control to the finally block. Because everything was successful, the PrintWriter is open when control reaches the finally block, which closes the PrintWriter. Again, after the finally block finishes executing, the program continues with the first statement after the finally block.

Here is the output from the ListOfNumbers program when no exceptions are thrown.

Entering try statement
Closing PrintWriter
The boldface code in the following sample shows the statements that get executed during this scenario.
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entering try statement");
out = new PrintWriter(
new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++)
out.println("Value at: " + i + " = "
+ vector.elementAt(i));

}
catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Caught "
+ "ArrayIndexOutOfBoundsException: "
+ e.getMessage());

} catch (IOException e) {
System.err.println("Caught IOException: "
+ e.getMessage());

} finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
}

else {
System.out.println("PrintWriter not open");
}
}
}

The finally Block

The finally block always executes when the try block exits. This ensures that the finally block is executed even if an unexpected exception occurs. But finally is useful for more than just exception handling — it allows the programmer to avoid having cleanup code accidentally bypassed by a return, continue, or break. Putting cleanup code in a finally block is always a good practice, even when no exceptions are anticipated.

Note: If the JVM exits while the try or catch code is being executed, then the finally block will not execute. Likewise, if the thread executing the try or catch code is interrupted or killed, the finally block will not execute even though the application as a whole continues.

The try block of the writeList method that you've been working with here opens a PrintWriter. The program should close that stream before exiting the writeList method. This poses a somewhat complicated problem because writeList's try block can exit in one of three ways.

  1. The new FileWriter statement fails and throws an IOException.
  2. The vector.elementAt(i) statement fails and throws an ArrayIndexOutOfBoundsException.
  3. Everything succeeds and the try block exits normally.
The runtime system always executes the statements within the finally block regardless of what happens within the try block. So it's the perfect place to perform cleanup.

The following finally block for the writeList method cleans up and then closes the PrintWriter.

finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
}
In the writeList example, you could provide for cleanup without the intervention of a finally block. For example, you could put the code to close the PrintWriter at the end of the try block and again within the exception handler for ArrayIndexOutOfBoundsException, as follows.
try {

out.close(); //Don't do this; it duplicates code.

} catch (FileNotFoundException e) {
out.close(); //Don't do this; it duplicates code.
System.err.println("Caught: FileNotFoundException: "
+ e.getMessage());
throw new RuntimeException(e);

} catch (IOException e) {
System.err.println("Caught IOException: "
+ e.getMessage());

}
However, this duplicates code, thus making the code difficult to read and error-prone should you modify it later. For example, if you add code that can throw a new type of exception to the try block, you have to remember to close the PrintWriter within the new exception handler.

Important: The finally block is a key tool for preventing resource leaks. When closing a file or otherwise recovering resources, place the code in a finally block to insure that resource is always recovered.

Flash To Video Encoder 4.8.7


Encode Your Macromedia Flash (swf) Movies to AVI Video Flash To Video Encoder converts any Macromedia Flash (swf files) to video movie AVI or mp4 file. The converting process allowing human interaction on Flash content during conversion. Create your own video or dvd collection by converting with Flash To Video Encoder your favourite flash movies. Record the passing of your favorite flash game to video file and save it to the future. Also you able to convert Flash SWF files to MP4 media contnt for your mobile devices.

This application converts Macromedia Flash swf to AVI and mp4 Video Movies.

Pros: Flash to Video Encoder helps convert flash movies to video format of your choice. This could be AVI, WMV, or MPEG encoded video. There is a long list of video encoders this program can handle. The list is almost all encompassing. Same is true of audio encoding possible with the software. Once again this contains almost all audio encoders. The conversion process is nearly automatic with some manual intervention possible. These include deciding what video and audio encoders are to be used. This is as simple as picking the item from a drop down list. One could choose the pixel size of the height and the width of the video to be produced.

The user interface is really very simple. File names for the flash file and the converted files are chosen first, followed by the type of video needed ( windows video, Windows media type or MPEG video) along with the choice of the codecs for video and audio conversion. One then chooses the size of the video to be produce, duration is automatically determined. The rest of the process is automatic after the start button is clicked. There’s a preview window to have a quick look at the result. Audio can be converted from the original swf files or a voice over can be done through the microphone interface of the computer.

Cons: Even though this is the English version of the program, the user interface was not completely translated. Many of the menu items, parameters etc were in German still.

One big difficulty with this kind of program is that it is very difficult to check out all the different codec combinations and also checking through the complete length of the video clips produced to detect any artifact produced in the conversion process. To have a complete sense of the quality of the application one would need to collect feedback from other users.

Overall: A well designed, simple to use application, it has a huge collection all possible codec for video as well as audio. This is a 3 star application.


PHTML Encoder 5.3


The PHTML Encoder allows encoding PHP scripts before distributing them. The script code is encrypted before saving. Because PHTML Encoder is a cross-platform product, this software working on ALL computer and server platforms which support PHP. The PHTML Encoder includes console and GUI versions of conver. You can use wildcards to easily convert the whole projects.The PHTML Encoder is transparent to your visitors. It is possible to combine protected and unprotected scripts on one web site. PHTML Encoder has following features in comparison analogous software products:
1. PHTML Encoder uses cryptography for protection of PHP scripts.
2. It is possible to lock encoded scripts to predefined machine (Web server) via machine ID so your scripts will work only on this machine.
3. You can purchase the source code of PHTML Encoder. This allows you to customize PHTML Encoder to meet your needs: you can change password, prefix, add own cryptography method, and so on.
4. Because PHTML Encoder is a cross-platform product, this software will work on ALL computer and web-server platforms which support PHP. The encoded scripts from one computer platform will work on any other platform.
5. There are three ways of implementing encoded scripts : substitution of PHP engine's library file, installation as PHP extension and self-decodable scripts. In last case you don't need any changes to the PHP installation.
6. Available for Windows, Linux x86, Linux x86_64, FreeBSD x86, FreeBSD x86_64, Solaris x86, Mac OS X.

Encode your PHP scripts in the easiest way with PHTML Encoder.
Once you use this exclusive PHP scripts encoding tool you will never go for any other tool again. This tool allows you to safely and easily encode you PHP scripts by using cryptography before distributing them so that they are safe from miscreants. The completed source code of this tool allows one to change passwords, prefix, and add self cryptography methods and much more. The tool works efficiently on cross platforms, works on all computers and server platforms supporting PHP and the encoded scripts from one platform will work on another platform too. The three ways for the usage of encoded scripts are; substitution of existent PHP engine's library file, installation as PHP extension and self-decodable scripts.
With many more features this tool includes console and GUI versions of converter for encrypting and decrypting your scripts.


Sothink DHTMLMenu 6.6



Sothink DHTMLMenu is a professional DHTML menu builder, which helps web designer to create beautiful menus. It is unnecessary to be familiar with JavaScript or DHTML acknowledge, just with Sothink DHTMLMenu, you can build DHTML drop down or popup menus in few minutes. The generated menus are compatible with almost all browsers, including Netscape, Mozilla, Firefox, Camino and Safari, even IE 7.0 (Beta) and Opera 9, so the designers could be free of caring the browser compatibility problems. If you want to create or edit menu without leaving web editors, Sothink DHTMLMenu is right choice to reach the effect, which seamlessly integrate with Dreamweaver as an extension and FrontPage as an add-in. And also, Sothink DHTMLMenu can make dynamic database-driven menus by supporting ASP, PHP, JSP, ColdFusion, etc. For menus themselves, thousands of menu items with unlimited hierarchical levels are in a navigation menu, and the number of DHTML menu in one page is not limited. The pop-up menu can have multi-levels. It can be fully customizable by changing the text, font, link, background, border style, and special effect. Sothink DHTMLMenu has user-friendly interface, which includes menu panel, preview panel, property panel and tasks panel. They make you create DHTML menu easily and preview the menu in your favorite browsers instantly. Building highlighted menu, scrolling menu, cross-frame menu is not difficult, you can use program to create them with ease. Built-in templates have over 80 menus; you can choose any one that you like to build a new menu; if you just prefer to apply the style of menu item, you also choose from pre-design styles. After creating DHTML menus, Publish Wizard is available to guide you publishing menu into web page, there are four options to meet the different users in Publish Wizard, from beginner to web expert, anyone can follows the wizard to publish your menu into webpage step by step. With Sothink DHTMLMenu, you can build DHTML menu easily!



WebORB for Java Now Supports Sun GlassFish Enterprise Server

Frisco, TX, April 03, 2009 --(PR.com)-- Midnight Coders announces WebORB support for Sun GlassFish(TM) Enterprise Server - a winning combination for building Java(TM) software-based Rich Internet Applications (RIA). WebORB for Java is the RIA industry’s most robust integration and runtime (presentation) server and Sun GlassFish Enterprise Server is the price/performance - leading open source application server offering, for both lightweight and enterprise-class RIAs. Combining the two results delivers fast start-up time, rapid iterative development and strong support for NetBeans(TM) IDE 6.5 and Eclipse. Furthermore, WebORB can be embedded into any Sun GlassFish Enterprise Server platform. .

The combined offering supports RIA project developers in projects both large and small by providing:
· Robust RIA development and deployment in a Java runtime environment.
· RIAs requiring high scalability and performance.
· Centralized application management for IT staff.
· Connectivity to multiple client-side technologies (Flash, Flex, Ajax, Silverlight and soon JavaFX(TM)) and Java software-based servers.
· A team-based approach to project success.
· Solid product roadmap for current and next generation technologies.

Developers are welcome to visit www.themidnightcoders.com or http://www.sun.com/software/products/glassfish_portfolio/ to learn more about each product and their associated product downloads.

Midnight Coders, Inc – The RIA Company is the only U.S.-based software developer of cross-platform, client-agnostic Rich Internet Application (RIA) solutions used for development, testing, runtime execution and application intelligence needs. The company’s products and services drastically reduce total time and cost to build RIAs created in Flex, Flash, Silverlight and Ajax with better outcomes in application performance and breadth of offering.

Sun, Sun Microsystems, the Sun logo, GlassFish, Java, JavaFX and NetBeans are trademarks or registered trademarks of Sun Microsystems, Inc. or its subsidiaries in the United States and other countries.

Closing bell: no reaction to jobs report (JAVA, RIMM, BBI, DIS)


In any normal universe, the market would have collapsed on news that unemployment went to 8.5%. To make matters worse, it is obviously going much higher.

The market shrugged all of that off and went nowhere. Most financial stocks were up. A number of tech and telecom stocks were down. Whatever bump the G-20 gave the market seems to have dissipated in a day.

The numbers:

DJIA:Dow 8,017.59 +39.51 (0.50%)
S&P 500 842.47 +8.09 (0.97%)
Nasdaq 1,621.87 +19.24 (1.20%)

Analyst upgrades
Analyst downgrades


Sun Microsystems Inc.
(NASDAQ: JAVA) rose slightly on word that the long awaited merger offer from IBM may be coming early next week. Unfortunately, this new price talk is lower than expected, in a $9.00 to $10 range. Shares were up 2% to $8.46.

Research in Motion Ltd. (NASDAQ: RIMM) posted much better than expected earnings, even came in above its own lowered guidance, and raised guidance for the next report. The BlackBerry platform has reached almost 25 million subscriber accounts now and RIMM said that half of the customer base is non-enterprise users. Shares were up a sharp 20% to $58.96

Blockbuster Inc. (NYSE: BBI) got its loan and liquidity clemency as investors and lenders JPMorgan, Monarch Alternative Capital LP, and Silver Point Capital completed the amendment of Blockbuster's revolving and term loan facility. The new amendment is a $250 million revolving loan refinancing with a maturity date on September 30, 2010. Shares were up almost 7% to 89 cents.

The Walt Disney Company (NYSE: DIS) took it on the chin earlier after an analyst downgrade. Mickey, Hannah, and friends saw the stock's rating cut to Neutral from outperform over at JPMorgan. Disney was down about 1% to $19.98.

Report: IBM lowers Sun bid

IBM has reportedly lowered its bid for Sun Microsystems to $9 to $10, the Wall Street Journal reports.

The bid had originally been $10 to $11. But Santa Clara, Calif.-based Sun (NASDAQ: JAVA) accepted the lower bid in exchange for commitments from IBM (NYSE: IBM) that it would go through with the deal even if it faced regulatory hurdles. The companies employ roughly 6,000 people in Massachusetts.

Any deal between the two companies is expected to face an antitrust review from the federal government because of consolidation in the server industry.

IBM to buy Sun Microsystems: Reports


IBM Corp. is close to a deal to buy Sun Microsystems Inc., U.S. media reported Friday.

The two companies, which have been talking since at least mid-March, could announce the deal Friday or early next week, sources told the New York Times, Wall Street Journal and Associated Press.

The deal could be worth nearly $7 billion US, at a price of around $9.50 for each Sun share.

The combined company would be huge in the mainframe computer market, combining IBM's existing business and Sun's Unix sales.

That could cause antitrust problems, media reports said.

Sun sells software, systems, services, and microelectronics and owns brands like the Java technology platform, Solaris operating system, MySQL database management system, StorageTek and the UltraSPARC processor.

The bid price of around $9.50 a share is lower than previous speculation, which suggested the deal would be done at $10 to $11

Company spokespeople would not comment, the Times said. IBM directors have already approved the deal, the paper's sources said.

Sun stock doubled from almost $4 a share on March 18 as news of the talks became public.

It closed up 27 cents at $8.49 in Nasdaq trading.

IBM rose $1.40 to $102.22 on the New York exchange.

Good-bye Solaris? The fate of Sun's top 5 technologies


Steven J. Vaughan-Nichols's picture

Steven J. Vaughan-Nichols

Cyber Cynic

By this time next week, IBM will have bought Sun at a cut-rate price. I'd long thought Sun was going to down for the count, so the news that IBM was moving in didn't surprise me. What happens next though? Specifically, what's going to happen to Sun's product lines? As a long-time watcher of both Sun and IBM, here are my best guesses.

1) Solaris/OpenSolaris: Could IBM just kill this pair of operating systems? No, I can't see that. Solaris has too many customers even now. What I can't see though is IBM spending any more money on developing Solaris.

IBM already has its own house-brand of Unix, AIX, and Big Blue had invested a billion dollars in Linux back when most people were still ignoring the penguin. Besides, the Unix server market share has been dwindling for years. Sure, IBM plus Sun equals the lion's share of the Unix market, but it's a dying market.

OpenSolaris will likely live on as a purely community-based operating system. After failing to gain any real traction against Linux, I expect it to become like the BSD operating systems: useful in niches and with a strong, core group of developers, but never to become a major operating system power.

2) SPARC/SPARC Servers: In three words: SPARC is history. The high-end SPARC business has been getting knocked around for ages by low-cost AMD/Intel servers running Linux for years now. Fujitsu will run what's left of the SPARC chip and system business.

3) Java: Java's creator, James Gosling, probably won't like me saying this, but I've long though that IBM did a better job than Sun with its Java implementation and the Java-related projects it supported, like Apache Geronimo and Jakarta.

IBM, unlike Sun, has also long been a completely committed open-source supporter. Because of this, I suspect that IBM will commit to completely opening up Java and its related projects and put them under the control of a revised JCP (Java Community Process).

4) NetBeans: This is an easy one. The NetBeans IDE (integrated development environment) is history. Long live Eclipse. Oh, NetBeans will continue you on as a community project. Open-source code never really dies; it just doesn't get checked out of the repository much anymore.

5) MySQL: In some ways, I think this is the most interesting one of all. MySQL is the DBMS (database management system) of Web 2.0 sites and most open-source DBMS-related projects. After paying a billion bucks for MySQL in 2008, Sun managed to chase most of MySQL's top programmers out of the company and annoy its commercial customers. Today, it's not even clear who's running MySQL and which direction the DBMS is going in.

I think IBM will be able to bring some order and sense to the MySQL mess. This will make both customers and developers happier. And, if IBM can combine some of its DB2 goodness with MySQL, that will be all the better.

In the end, I think IBM will do better for both programmers and users with Sun's software products. Solaris and SPARC will end up dying on the vine, but, they were already doing that anyway. But, what do you think? How do you see Sun's various lines faring under IBM?

IBM-Sun Microsystems merger could mean more job cuts in Colorado

The expected merger of IBM Corp. and Sun Microsystems Inc. — two of Colorado’s largest tech employers — could bring more industry layoffs to the Denver area.

Bloomberg News and the Wall Street Journal report that a nearly $7 billion IBM deal to acquire Sun should be announced Monday.

Such mergers almost inevitably prompt layoffs, and any elimination of redundant jobs could hit Sun and its Broomfield campus harder locally than IBM, said James Staten, an industry analyst with Cambridge, Mass.-based Forrester Research.

“I would think Broomfield has a pretty big target on its back,” he said.

Armonk, N.Y-based IBM (NYSE: IBM) employs about 3,000 workers at its northeast Boulder campus. Santa Clara, Calif.-based Sun (NASDAQ: JAVA) employs roughly 2,200 at its Broomfield offices. They are the largest private employers in their respective counties.

The large presence of Sun data-storage work at its Broomfield campus could make it a place where IBM looks to trim, Staten said.

Sun purchased Louisville-based Storage Technology Corp. in 2005, taking over that company’s data storage products and work force. IBM has its own data storage line and sales force.

Big Blue will want to keep a lot of Sun’s data-storage sales force because the company’s installed customer base is different from IBM’s, Staten predicted. But a combined IBM and Sun won’t need so many workers in data-storage product development, and that’s an area where IBM is likely to cut, he said.

Staten doubts Sun will bare the entire brunt of any cutbacks. IBM will want to use of a lot of Sun’s talent, he said.

“But that won’t be easy — culturally, they’re very different companies,” he said.

IBM is known to expect innovation to arise out of a formalized, collaborative and somewhat hierarchical process, while Sun is famous for its freewheeling approach to innovation driven by individuals. IBM also lets the services it sells to businesses steer product innovation, while Sun typically innovates new products and tries sell services around them, Staten said.

Sun’s work force at its Broomfield campus has shrunk to about 2,200, down from a high of about 4,700 immediately after the StorageTek purchase four years ago. Some 227 local Sun workers have been let go in Broomfield this year.

IBM has laid off an unknown number of workers this year as it sent more of its global services work to India. The company has never revealed how those cuts affected its northeast Boulder campus, but the site is one of IBM’s main global services hubs.

Other recent metro-area layoffs in the tech industry include 187 laid off in January from hard-drive maker Seagate in Longmont. Broomfield-based Level 3 Communications Inc. (NASDAQ: LVLT) laid off dozens from its headquarters in December, part of 450 jobs it cut nationally.

Denver-based Qwest Communications International Inc. (NYSE: Q) cut 1,200 jobs in the final three months of 2008, many of them local.

Envisioning Sun on IBM's horizon









An IBM acquisition of Sun Microsystems would mean big change for the companies, cloud computing, and the technology landscape. We've rounded up our breaking stories, analysis, and interviews as the story has unfolded over the past few weeks.

If IBM owns Java ...

The future of open source Java development under IBM


The Sun-IBM merger hasn't been finalized but there's little doubt this week that the deal is coming together. Many are looking for clues as to how open source, Java-based development will change -- and change it will -- under the Big Blue Sun.

In the last few years, Sun Microsystems has warmed up to open-sourcing its software. In 2006, Sun opened up Java, and in 2007 it open-sourced most of Solaris under the GPLv3. Smaller, side projects, like NetBeans, the Java-based IDE were open-sourced as early as 2001. Sun has also long allowed developers at least some say in the progress of Java, through the Java Community Process. Historically, though, Sun has had a well-documented love/hate relationship with open source.

IBM has had a closer relationship with open source, but it wasn't always that way. In December of 1998, IBM realized that it needed to take a closer look at open source thanks to its customers beginning to pick up Linux. Before that, according to Peter G. Capek of IBM Research, IBM handled open source on a case-by-case basis.

At first, IBM software developers were "skeptical that the quality of the open-source software produced could be sufficient to be relevant to us and our customers." But, the company quickly discovered the benefits of open source software:

this development style attracted very skilled developers, and that the overlap between developers and users of a particular OSS project made possible excellent and open communication, rapid development cycles, and intensive real-environment testing, ultimately producing software that was often very good and sometimes excellent by our standards.

It also didn't hurt that developers clearly wanted open-source software, Capek said.

IBM had released a binary-only version for UNIX of Jikes (a compiler for Java), through our alphaWorks Web site in early 1997. This was quite successful, but its success was only a prelude to the release of a Linux version of the same code in mid-July 1998, which was downloaded at seven times the rate of the non-Linux versions. Requests for the source code followed rapidly.

It didn't take long, after that, for IBM to convert to open source. While the company has never released its own Linux distribution, in 2008, 8.3% of all changes in the latest Linux kernel came from IBM developers. Only Red Hat and Novell, with 11.2% and 8.9%, had invested more work in Linux.

IBM also has invested in quite a few open source Java projects. It is a major player in the Apache Web server space. Among its other Apache projects is Derby, a lightweight, Java-based RDBMS. The popular Eclipse IDE also started as an IBM project.

Let's hear it

What do you think -- how will Java-based development change under IBM? Speak your mind in the Comments section at the end of this article.

So what will all this mean when IBM and Sun get together? Opinions vary. Miko Matsumura, Sun's former chief Java evangelist and now a VP and deputy CTO of Software AG believes that the merge means the end of the NetBeans IDE. Furthermore, he believes the Java Community Process, weakened by recent controversies over OSGi and Java modularity, will die.

Steve [Mills, senior vice president and group executive for IBM Software Group] isn't going to come down from Mount Armonk with these commandments, but with Sun out of the picture these two communities are just going to come apart at the seams.

OSGi and Java modularity debate aside, not everyone believes that IBM's stewardship spells the end of open source Java. Chris Dibona, Google's open-source program manager, recently opined that there would be fewer developer and licensing conflicts with IBM in charge of the JCP.

Habeel Gazi, research analyst with Info-Tech Research Group thinks the acquisition makes great sense for IBM when it comes to Java, "Sun's crown jewel is the Java programming language. Having possession of Java will give IBM control of a platform that drives many applications."

So why hasn't Sun made more of Java? Theresa Lanowitz, founder of Voke Research reflects on Sun's weakness as a software-driven company: "Sun is a company that had and has very good software technology but has never found a way to monetize it," she says. "Sun remains stuck in its glory days and because of that its business has failed to evolve -- Sun perceives software as a way to sell more hardware."

Lanowitz thinks IBM will do better with Java than Sun because, actually, it always has. "Java, one of Sun's biggest contributions to technology, found its success in the market because of two key licensors early on -- IBM and Microsoft."

According to Lanowitz, "developers will benefit from IBM's stewardship of Sun technology, particularly its open source solutions. IBM will productize the acquired Sun assets and find a way for its ecosystem of partners and suppliers to benefit. You can expect Sun's software to become a business vs. an academic exercise."

While the merge might benefit developers in the long run, the culture clash between two very different companies is a concern. In a discussion with James Stamper of Computer Business Review, James Gosling warned of the challenges of integration. "We're definitely weirder than they are," said Gosling. "We grew up from a bunch of hippies, almost with flowers in our hair."

Still, the company has evolved from those early days, said Gosling. "We're a much more grown-up company now [than when Sun was founded] with a very different group of people. We've become a full-on enterprise software company."

Geoff Feldman, owner of Seabase Consulting, isn't optimistic about the merge. Feldman expects Sun to get "What VAX/VMS and DEC got from HP -- absorption."

Feldman said, "Let's not forget that unlike other alternatives, Java is not an open standard. It's entirely under the control of Sun." Given the same conditions of ownership under IBM, he warned, "I think you can look for very much tighter approaches to licenses and cooperation [...] People forget the days of 'Big Blue.' Do you think they actually ended?"