Java & Open Source FAQs
In the vast Java landscape, Celeritas has encountered a number of questions that arise frequently when organizations consider Java technologies. Here are a few of them:
The simple answer is that Java is a programming language. Java began in the early 90's as a research project headed by James Gosling at Sun Microsystems. It was originally called "Oak." It was a new object-oriented programming language with a syntax similar to C++, but focused on portability (write once, run anywhere), simplicity and minimizing programming errors.
However, what began as a language has now evolved into a development platform, a technology industry, a community and a marketing strategy. "Java" now often refers to a paradigm of software development using a host of different Java technologies. Actually, Java has three distinct platforms: Java Platform Standard Edition (SE), Java Platform Enterprise Edition (EE) and Java Platform Micro Edition (ME). These three are all related in that they use the Java language, but each platform is unique in the problems they solve. Java Platform SE is the core Java platform, including the Java Virtual Machine and core Java API, and is used for stand alone applications or rich GUI applications.
Java Platform EE includes technologies such as JDBC, Servlets and JSPs, Enterprise Java Beans, JNDI and a host of others. Java EE applications run on a Java EE standard application server.
The Java Platform ME is primarily used to develop wireless applications.
There are many resources available on the web that go into great detail about design patterns. In general, design patterns are common solutions that have been identified for specific problems.
Design patterns are not specific to software engineering but became popular as a topic in Object Oriented software design after a book called "Design Patterns" by Gamma, Helm, Johnson and Vlissides (aka "The Gang of Four") was published. Since then different individuals and organizations have identified software design patterns for many common software problems.
Some patterns are just names for no-brainer, common sense solutions and others are quite novel. The list can be rather extensive. The key is to focus on a simple solution, add some patterns to the development toolbox that are obvious solutions and that can be reused.
There are numerous frameworks available that implement design patterns, so for many design patterns the wheel has already been invented.
A library is a collection of classes that serve a specific purpose. These classes are packaged together and can be called in any Java application. For example, a Java application that needs to connect to a specific database will make use of a library that contains a database driver created for that purpose.
Libraries are flexible ways that Java code can be packaged—typically using a Jar file—and are then reused by an application simply calling methods on the classes in the library. Here lies a key difference between a library and a framework. Java code that makes use of a library "calls" code in the library to perform tasks. A framework is extended by Java code that is called by the framework at defined points.
In Java terminology, a framework is a collection of Java classes, typically designed to accomplish a particular task or implement one or more design patterns that a developer can extend to make use of the framework to solve a specific use case. The framework will call the extended code at predefined points, allowing for custom uses for the generic solution.
A very common example is where a developer might make use of a Model View Controller design pattern in constructing a web application. Instead of constructing from scratch, the developer can make use of an existing web framework such as Struts, JSF, Webwork or a host of other web frameworks, plugging in their use-case-specific code to be called by the framework. Frameworks allow for the use of best practices for solving common problems in a way that is extensible, reusable and maintainable.
With the number of frameworks available today most Java development projects would benefit from the use of one or more frameworks. There are a couple rules of thumb to consider when evaluating framework usage.
Complex systems can often make use of frameworks by providing consistent, standard solutions allowing the focus of development to be on the specific business problem. The timeline of a project should be considered along with familiarity with the framework. Expertise in a framework might decrease the project timeline, but typically new frameworks have a learning curve that will require more time initially. The community and documentation of the framework should be considered in order to flatten the learning curve.
Maintenance is often easier with a system that makes use of a known solution. Over time this maintenance aspect will decrease additional time spent learning the framework during development. A developer familiar with a framework will often have an easier time making sense of a system, and more confidence making modifications despite a lack of knowledge about the original implementation. This can become more important the more generations of developers that work on the system.
Finally, consider the license of the framework. This is not usually an issue as there are many frameworks that have flexible licensing. However, some frameworks have licensing rules governing usage that apply to the software that makes use of the framework. These rules might not be at all what the developing organization desires.
The Java Database Connectivity API (JDBC) was one of the first additions to the Java development platform. Any data source that implements a JDBC driver can be accessed by a Java program using JDBC. Most vendors will have a type 2 and/or type 4 driver. A type-2 driver is known as a "thin" driver and is implemented completely in Java. A type-4 driver is a driver that makes use of data source specific native code such as Oracle's OCI communication layer.
Celeritas has specialized in Java applications that connect to a relational database. The database is a frequent cause of performance issues with applications in general and Java systems in specific. Celeritas can help with any of your database needs because we are not just Java programmers but database administrators and architects. Whether you need a system to communicate with an existing database or are designing a new system including the database Celeritas can help you accomplish your goals.
At the core of J2EE development is the application server. By definition, the application server is an implementation of any number of enterprise Java specifications. The application server is typically a server with a standard "container" allowing for the execution of web based components such as Servlets and JSPs and/or server side components such as Enterprise Java Beans (EJBs). The application server allows a Java application written to the specification to execute on any number of application servers implemented by different vendors.
While it is good that you have a choice with Java enterprise applications, choosing an application server can be a challenging task. There are many different features (and many different costs) associated with vendor implementations. Celeritas has extensive knowledge of a number of different application servers and has experience with using them in production capacity. We can assist you with choosing an application server, tuning a application to a particular server, handling migrations, and a host of other issues relating to the application server.
At a high level, web services allow for communication between applications in disparate, heterogeneous systems. While this concept is not really new, the ability to do this with technology that is ubiquitous is new.
The Internet and its associated technologies (such as TCP/IP, HTTP and XML) are in use in virtually every company that has computer systems. Any computer system built within the past ten years has the ability to make use of the Internet and its technologies. Web services, then, are built on technology that is already in place, and development tools currently available in the marketplace make creating these web services almost trivial for the developer.
Web services communicate by transmitting SOAP messages via HTTP and TCP/IP. SOAP is an XML-based protocol used to define message structure.
An example of a web service is an organization that has a Windows GUI application developed with VB.NET communicating with business logic that resides in a Java application running on a J2EE application server.
Web services will continue to be used in many future applications. Celeritas Technologies can help your organization determine how it can benefit from the use of web services. We can help you architect a system that can leverage your existing systems and/or add flexibility to your new systems.
The open source initiative was begun in the early 1980's by the Free Software Foundation, better know as GNU. GNU has since become best known for the operating system GNU/Linux or "Linux". The open source initiative that came later is similar. The premise of both is that software should be "open"—that is, the source code should be available and the user should be free to do whatever he or she pleases with the software as long as the software remains open and other developers are free to use it.
So what does open source have to do with Java? The philosophy of both groups is similar in that both believe that software development should be an open process with little cost associated with the development process from a tools and technology perspective. The combination of open source and Java provides a robust enterprise development environment at little or no cost in software licensing.
However, open source does not mean non-commercial or no cost. There are currently profitable companies with open source models or who are servicing the open source community. Typically, what open source means to corporate IT is "free software." Open source, enterprise-class software includes the GNU/Linux OS, Eclipse and Netbeans IDEs, Apache web server, Tomcat J2EE web container and mySQL DB to name a few.
What can be challenging with open source software is support and documentation. Celeritas has experience installing, using and maintaining open source software. We can help determine if open source tools will benefit your organization and save you money.
In our experience, the answer is: "It depends..."
With .NET, Microsoft is making a strong push to become a bigger player in the enterprise computing space. .NET does many things well and has a very robust development intermediate language (IL) similar to Java bytecodes and a common language runtime (CLR) similar to Java's runtime environment (JRE). In short, Microsoft took some of the great things about the Java language, added them to their new C# language, and then added some features that Java was lacking.
However, any advantage of .NET is likely negligible if you are not considering a Microsoft platform. One of Java's great strengths is that you have a wide choice of technologies and vendors you can use in a software solution, including IDEs, Application Servers, design and modeling tools, operating systems and hardware vendors, software frameworks, and many others. If your organization values choice or requires cross-platform compatibility, then Java has the edge. A Java application is not tied to one vendor. You do have a choice, and with some effort, your application can be interchangeable among different vendors.
.NET is not always "open" in the sense that it is controlled by Microsoft and not all of the source is freely available. There is no community process with .NET as with Java, that allows input from multiple organizations on the formulation of specifications for platform features and enhancements.
In addition, Java technology is a mature solution for enterprise class systems. .NET is still maturing, and it does not yet have the community surrounding it nor the time-tested solutions that exist in the Java world. You are much more likely to encounter a bug with .NET that slows development or requires a patch or upgrade than you are with Java.
Copyright © 2004-2012 - Celeritas Technologies, LLC - All Rights Reserved
One or more products are covered under one or more of the following patents:
US Patent Nos. 6,343,290, 6,725,032, and 7,090,457. Other patents pending.