<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4691107643230115807</id><updated>2011-04-21T11:32:40.943-07:00</updated><title type='text'>A Better way to learning Java</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-3261372569685728048</id><published>2007-10-26T04:11:00.000-07:00</published><updated>2007-10-26T04:14:25.067-07:00</updated><title type='text'>RESTRICTING ACCESS TO AJAX SERVICES</title><content type='html'>&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt;        Mashups are appearing on the web at an extremely fast rate. It's estimated that three new mashups appear on the web each day. As a service provider, you know that exposing your service so that it can be used in mashups can benefit you in a number of ways. Among other things, mashups can advertise the existence of your services to a constantly growing audience. However, there are some things you should consider when you make a service available for mashups. One of them is the possibility of security exposures. You want people to use your service but not abuse it. &lt;/p&gt;&lt;div style="text-align: justify; color: rgb(0, 102, 0);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt;If you're a service provider, you can take actions that protect your service such as limiting or restricting access. This article highlights some techniques for restricting access to a service. It then focuses on using API keys, which gives you finer-grained protection than the other techniques covered in this article. It allows you to restrict access to your service to users in specific host domains. You can also use API keys to identify who is using your service or meter usage, that is, regulate how much your service is used during a given period of time. However, the focus of this article is primarily on how to limit or restrict access to your service. &lt;/p&gt;&lt;div style="text-align: justify; color: rgb(0, 102, 0);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt; Here are some approaches that you can take to restrict access to your service:&lt;/p&gt;&lt;ul style="color: rgb(0, 102, 0);"&gt;&lt;li&gt;Token-Based Restriction&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Application key-based Restriction&lt;/li&gt;&lt;li&gt;Session-based Restriction&lt;/li&gt;&lt;li&gt;Content type restriction&lt;/li&gt;&lt;li&gt;Authentication-based restriction&lt;/li&gt;&lt;li&gt;URL based API key restriction&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-3261372569685728048?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/3261372569685728048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=3261372569685728048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/3261372569685728048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/3261372569685728048'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/restricting-access-to-ajax-services.html' title='RESTRICTING ACCESS TO AJAX SERVICES'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-2350143469032410605</id><published>2007-10-26T04:09:00.001-07:00</published><updated>2007-10-26T04:10:03.910-07:00</updated><title type='text'>JAVA BEANS</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:Verdana;"&gt; Rapid application development tools are great. &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;Visual Basic, Delphi, etc. are great at cutting development time for complex applications through their use of reusable components. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Reusable components (I will refer to them as "controls" from here on) are simply pre-built pieces of programming code designed to perform a specific function. When designing an application in a visual environment, controls can be quickly dropped into the design, and modified to fit the task at hand. Most of the controls you'll find are designed to handle such tasks as pushbuttons, menus, text labels, and so forth. As a developer, you only need to write code to "glue" them into your application, and develop the interactions between controls. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Recently, programmers have been searching for some way to create and reuse components in the Java language. Java holds great promise, but the early releases lacked any method for creating reusable controls, and thus caused extended development times for applications. Sun Microsystems, the creators of the Java language, have at last recognized this need, and have released the Java Beans Component Architecture. Java Beans are, quite simply, reusable controls written in Java, for Java application development. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Beans are "capsules" of code, each designed for a specific purpose. The advantage of Java Beans over standard programming controls is that Beans are independent. They are not specific to operating systems or development environments. A Bean created in one development environment can be easily copied and modified by another. This allows Java Beans greater flexibility in enterprise computing, as components are easily shared between developers. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Java Beans are best put to use by visual developers. In a visual design environment (for example, Symantec's Visual Cafe Pro, this author's current tool of choice), an application interface is developed on a "form" or client window. A toolbox contains all the controls (Beans) which are dropped onto the form through simple drag and drop procedures. As the controls are dropped onto the form, the development environment grinds out the necessary code, When the interface is finished, the developer can set about creating the actual interactions between controls and the application as a whole. An exciting concept behind Beans springs from the fact that an application created in Java can be used as a Bean, which can be used to build other applications. As you can imagine, this circle of application to Bean and back can make developing large-scale applications much easier. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Some may wonder why anyone would use a Bean over a Java Class file. The strongest argument for a Bean over a Class is that Beans support introspection. That is, they allow the development environment to analyze the Bean, determine its properties and methods, and manipulate the Bean at design time instead of at run time. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;The newest use of Beans is to create a bridge between Java and ActiveX. Several software companies are working on methods of quickly converting ActiveX controls to Java Beans (IBM's Visual Age, for example, is leading the pack in this area). Whereas Microsoft hoped to encompass Java into ActiveX, it appears that developers have different ideas and are churning out a wide variety of conversion tools to pull ActiveX into Java. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Java Beans are not a cure for all your programming ills, though. Beans are great for developing interfaces and basic applications, but for working with JDBC and SQL, text-based hand coding is your best bet. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;If you're a visual developer looking to migrate to Java, you'll find that Java Beans will make the transition much easier. With Java Beans, Sun is proving that Java is poised to grow and become a powerful force in application development. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;For more information about Java and Beans on the Web, try: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;http://java.sun.com &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;http://www.javasoft.com &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;http://splash.java.com &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;http://www.developer.com &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;http://www.javology.com/javology   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;  &lt;b&gt;Applets&lt;/b&gt; - An applet is a mini-application developed in the Java language. Applets are commonly downloaded from the Internet and run on the user's machine. Lately, even full-scale Java applications have been referred to as applets. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;b&gt;IDE&lt;/b&gt; - Integrated Development Environment. Usually a visual-style programming application. Common IDE's include Visual Basic, Delphi, and Symantec's Visual Café &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;b&gt;Java&lt;/b&gt; - A programming language, developed by Sun Microsystems, which is designed to be run on any type of operating system. Applications developed in Java are "Written once, run anywhere". &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;b&gt;JDBC&lt;/b&gt; - Java Database Connectivity. This allows Java applets/applications to read/write/modify data in any of the supported JDBC database formats. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="font-weight: bold;"&gt;SQL - &lt;/span&gt; Structured Query Language (or Standard Query Language, depending on who you ask). SQL is a language used to "ask questions of" a database. Through SQL, an application makes specific requests for information, and the database relays that information back to the application. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-2350143469032410605?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/2350143469032410605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=2350143469032410605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/2350143469032410605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/2350143469032410605'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/java-beans.html' title='JAVA BEANS'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-7566447513353117661</id><published>2007-10-26T04:05:00.000-07:00</published><updated>2007-10-26T04:06:50.212-07:00</updated><title type='text'>NAMED PARAMETERS FOR PREPARED STATEMENT</title><content type='html'>&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt;    In past if you have worked with JDBC than you may know that keeping track of the indices of PreparedStatement is very difficult for larger queries having tens of parameters.&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt; If you needs to insert or delete a parameter in the middle of a query, you must renumber all the parameters following it.&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;To make writing parameterized query easier, Adam has created NamedParameterStatement.&lt;br /&gt;With NamedParameterStatement, instead of question marks, parameters are represented as a colon followed by an identifier.&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;So developer don't need to remember index of a parameters, insted parameters can be set using identifier.&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;Internally NamedParameterStatement uses PreparedStatement and replaces parameter identifiers with question marks.&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;Here is an example of how NamedParameterStatement can make developers life easier.&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;&lt;code&gt;&lt;br /&gt;String query = "select * from users where userid = :userid;&lt;br /&gt;NamedParameterStatement p = new NamedParameterStatement(con, query);&lt;br /&gt;p.setString("userid", userid);&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;Look at following insert query.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;StringBuffer query = new StringBuffer("INSERT INTO users (userid, first_name, last_name, street, city, country, zip_code));&lt;br /&gt;query.append("VALUES (:userid, :fname, :lname, :street, :city, :country)");&lt;br /&gt;NamedParameterStatement statement= new NamedParameterStatement(conn,query.toString());&lt;br /&gt;statement.setString("userid", userid);&lt;br /&gt;statement.setString("fname", fname );&lt;br /&gt;statement.setString("lname", ;name );&lt;br /&gt;statement.setString("street", street );&lt;br /&gt;statement.setString("city", city);&lt;br /&gt;statement.setString("country", country);&lt;br /&gt;statement.executeUpdate();&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;Now if you want to insert a new parameter 'middle_initial' at third position, it can be done as in the following.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;StringBuffer query = new StringBuffer("INSERT INTO users (userid, first_name,middle_initial, last_name, street, city,country, zip_code));&lt;br /&gt;query.append("VALUES (:userid, :fname, :middleinitial, :lname, :street, :city, :country)");&lt;br /&gt;NamedParameterStatement statement= new NamedParameterStatement(conn,query.toString());&lt;br /&gt;statement.setString("userid", userID);&lt;br /&gt;statement.setString("fname", firstName);&lt;br /&gt;statement.setString("lname", lastName);&lt;br /&gt;statement.setString("street", street );&lt;br /&gt;statement.setString("city", city);&lt;br /&gt;statement.setString("country", country);&lt;br /&gt;statement.setString("middleinitial", middleInitial);&lt;br /&gt;statement.executeUpdate();&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;You don't need to renumber parameters following middle_initial, insted new parameter is added at the end.&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(204, 51, 204);"&gt; &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(204, 51, 204);"&gt;This code is not only flexible but it is more understandable also.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-7566447513353117661?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/7566447513353117661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=7566447513353117661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/7566447513353117661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/7566447513353117661'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/named-parameters-for-prepared-statement.html' title='NAMED PARAMETERS FOR PREPARED STATEMENT'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-3050677647142381130</id><published>2007-10-26T04:03:00.000-07:00</published><updated>2007-10-26T04:04:30.502-07:00</updated><title type='text'></title><content type='html'>&lt;h2 style="text-align: justify;"&gt;A Command pattern for Ajax?&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt;In the canonical example, the Gand of Four Command pattern is used by a toolkit developer to enable future users to specify actions within the toolkit. Not knowing how the toolkit                         will be used, the developer codes to an interface, leaving the implementation details abstract.                      &lt;/p&gt;&lt;div style="text-align: justify; color: rgb(0, 102, 0);"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt;The average enterprise Web application involves a similar scenario, where one person or group provides the tools to another. Although the typical Web application probably doesn't need to provide such complete autonomy between teams, other factors at work in a JSF-Ajax call suggest the use of the Command pattern; namely the layered architecture, the intermediary of HTTP, and JSF's component model. &lt;/p&gt;&lt;div style="text-align: justify; color: rgb(0, 102, 0);"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt;Now, let's say you're working on a Web application where you need to do the following:&lt;/p&gt;&lt;div style="text-align: justify; color: rgb(0, 102, 0);"&gt;                      &lt;/div&gt;&lt;ol style="text-align: justify; color: rgb(0, 102, 0);"&gt;&lt;li&gt;Handle commands arriving as Ajax requests without isolating the logic in a component.&lt;/li&gt;&lt;li&gt;Make it easy to add new commands.&lt;/li&gt;&lt;li&gt;Delegate the business logic to the business layer.&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify; color: rgb(0, 102, 0);"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify; color: rgb(0, 102, 0);"&gt;We'll start by taking a look at how you would set up the server side of the request, based on the AjaxCommand strategy. After that we'll look at the front-end design, and I'll conclude by comparing the original Command pattern with the AjaxCommand variation. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-3050677647142381130?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/3050677647142381130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=3050677647142381130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/3050677647142381130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/3050677647142381130'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/command-pattern-for-ajax-in-canonical.html' title=''/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-6557313071809864584</id><published>2007-10-26T04:01:00.000-07:00</published><updated>2007-10-26T04:03:32.073-07:00</updated><title type='text'>THE AJAX COMMAND STRATEGY FOR JSF</title><content type='html'>&lt;p style="text-align: justify;" class="first"&gt;As Java Server Faces continues to mature and its component libraries grow more robust, it becomes an ever more compelling option for enterprise Web application development. Ajax has passed the stage of being the hot new thing to become an expected aspect of competitive Web applications. Marrying the two isn't necessarily difficult, but it does present some interesting puzzles. In this article, Java developer Matthew Tyson tackles one such puzzle: how to handle a single (or similar) Ajax request action across multiple JSF components, without duplicating code in the components. &lt;/p&gt;&lt;div style="text-align: justify;"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify;"&gt;I recently encountered a problem at work that had me delving into the Gang of four design patterns for a solution. I was working on a tree component that rendered its nodes according to nested facets. The user could delete a node by clicking on a Delete button or by right-clicking and selecting Delete. The delete was to be carried out via an Ajax call. &lt;/p&gt;&lt;div style="text-align: justify;"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Coding all this was relatively easy, but for one problem: I needed to delete objects outside the tree, for instance, from the item detail page and from the toolbar. I didn't want to embed the deletion request logic in the tree component's renderer. I needed the logic to be accessible anywhere; from links, buttons and images, anything that could handle an &lt;code&gt;onClick&lt;/code&gt;.                      &lt;/p&gt;&lt;div style="text-align: justify;"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Describing my solution to a colleague the next day took quite a while. Once I had successfully conveyed the design, my coworker                         paused for a moment and said, "Oh, you mean it's a Command?"                      &lt;/p&gt;&lt;div style="text-align: justify;"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify;"&gt;The Command pattern is a convenient way to express the &lt;i&gt;intention&lt;/i&gt; of the AjaxCommand strategy, though there are some differences. I'll focus on the AjaxCommand strategy in this article, but                         use the Command pattern as a point of reference.                      &lt;/p&gt;&lt;div style="text-align: justify;"&gt;                      &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Note that I assume you are familiar with JSF and Ajax development in general. I've used the Dojo Library &lt;a href="http://www.javaworld.com/javaworld/jw-10-2007/jw-10-ajaxcommand.html#resources"&gt;&lt;/a&gt; for my example, but the idea applies regardless of how you accomplish your Ajax calls.                      &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-6557313071809864584?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/6557313071809864584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=6557313071809864584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/6557313071809864584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/6557313071809864584'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/ajax-command-strategy-for-jsf.html' title='THE AJAX COMMAND STRATEGY FOR JSF'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-8758413680233087936</id><published>2007-10-26T03:58:00.000-07:00</published><updated>2007-10-26T04:00:42.714-07:00</updated><title type='text'>LAUNCH JAVA APPLICATIONS FROM ASSEMBLY LANGUAGE PROGRAMS</title><content type='html'>&lt;h2 style="text-align: justify; font-weight: normal;" id=""&gt;&lt;span style="font-size:100%;"&gt;        Java Native Interface (JNI) is a mechanism that can be used to establish communication between native language programs and the Java virtual machine. The documentation for JNI and the technical literature on JNI deal extensively with interactions between the JVM and C/C++ code. The Java SDK even provides a utility to generate a header file to facilitate calling C/C++ programs from Java code. However, there is hardly any mention of Java and &lt;em&gt;assembly earlier language&lt;/em&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; showed how assembly language programs can be called from Java applications. Here I deal with the technique for invoking Java programs from an ASM process through a demo application that calls a Java method from assembly language code. The Java method brings up a Swing &lt;code&gt;JDialog&lt;/code&gt; to show that it has, indeed, been launched.&lt;/span&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-8758413680233087936?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/8758413680233087936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=8758413680233087936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/8758413680233087936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/8758413680233087936'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/launch-java-applications-from-assembly.html' title='LAUNCH JAVA APPLICATIONS FROM ASSEMBLY LANGUAGE PROGRAMS'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-4525053510955645922</id><published>2007-10-26T03:56:00.000-07:00</published><updated>2007-10-26T03:57:06.671-07:00</updated><title type='text'>PREVENTING THREAD PROBLEMS WITH YOUR SINGLETON</title><content type='html'>&lt;p style="text-align: justify;"&gt;We need to make sure that threads calling the getSingletonObject()         method don't cause problems, so it's advisable to mark the method as         synchronized. This prevents two threads from calling the         getSingletonObject() method at the same time. If one thread entered the         method just after the other, you could end up calling the         SingletonObject constructor twice and returning different values. To         change the method, just add the &lt;code&gt;synchronized&lt;/code&gt; keyword as         follows to the method declaration :-&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;pre&gt;public static synchronized&lt;br /&gt;  SingletonObject getSingletonObject()&lt;/pre&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Are we finished yet?&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;There, finished. A singleton object that guarantees one instance of         the class, and never more than one. Right? Well.... not quite. Where         there's a will, there's a way - it is still possible to evade all our         defensive programming and create more than one instance of the singleton         class defined above. Here's where most articles on singletons fall down,         because they forget about cloning. Examine the following code snippet,         which clones a singleton object.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;pre&gt;public class Clone&lt;br /&gt;{&lt;br /&gt; public static void main(String args[])&lt;br /&gt;   throws Exception&lt;br /&gt; {&lt;br /&gt;   // Get a singleton&lt;br /&gt;   SingletonObject obj =&lt;br /&gt;   SingletonObject.getSingletonObject();&lt;br /&gt;&lt;br /&gt;   // Buahahaha. Let's clone the object&lt;br /&gt;   SingletonObject clone =&lt;br /&gt;  (SingletonObject) obj.clone();&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Okay, we're cheating a little here. There isn't a &lt;code&gt;clone()&lt;/code&gt;         method defined in SingletonObject, but there is in the &lt;code&gt;java.lang.Object&lt;/code&gt;         class which it is inherited from. By default, the &lt;code&gt;clone()&lt;/code&gt; method         is marked as protected, but if your SingletonObject extends another         class that does support cloning, it is possible to violate the design         principles of the singleton.  So, to be absolutely positively 100%         certain that a singleton really is a singleton, we must add a &lt;code&gt;clone()&lt;/code&gt;         method of our own, and throw a &lt;code&gt;CloneNotSupportedException&lt;/code&gt;         if anyone dares try!&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Here's the final source code for a SingletonObject, which you can use         as a template for your own singletons.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;pre&gt;public class SingletonObject&lt;br /&gt;{&lt;br /&gt; private SingletonObject()&lt;br /&gt; {&lt;br /&gt;   // no code req'd&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static SingletonObject getSingletonObject()&lt;br /&gt; {&lt;br /&gt;   if (ref == null)&lt;br /&gt;       // it's ok, we can call this constructor&lt;br /&gt;       ref = new SingletonObject();  &lt;br /&gt;   return ref;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Object clone()&lt;br /&gt; throws CloneNotSupportedException&lt;br /&gt; {&lt;br /&gt;   throw new CloneNotSupportedException();&lt;br /&gt;   // that'll teach 'em&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private static SingletonObject ref;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-4525053510955645922?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/4525053510955645922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=4525053510955645922' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/4525053510955645922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/4525053510955645922'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/preventing-thread-problems-with-your.html' title='PREVENTING THREAD PROBLEMS WITH YOUR SINGLETON'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-4140597851375943573</id><published>2007-10-26T03:55:00.000-07:00</published><updated>2007-10-26T03:56:08.728-07:00</updated><title type='text'>GETTING AN INSTANCE OF THE SINGLETON</title><content type='html'>&lt;p style="text-align: justify;"&gt;We need to provide an accessor method, that returns an instance of         the SingletonObject class but doesn't allow more than one copy to be         accessed. We can manually instantiate an object, but we need to keep a         reference to the singleton so that subsequent calls to the accessor         method can return the singleton (rather than creating a new one). To do         this, provide a public static method called getSingletonObject(), and         store a copy of the singleton in a private member variable.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;pre&gt;public class SingletonObject&lt;br /&gt;{&lt;br /&gt;   private SingletonObject()&lt;br /&gt;   {&lt;br /&gt;       // no code req'd&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static SingletonObject getSingletonObject()&lt;br /&gt;   {&lt;br /&gt;     if (ref == null)&lt;br /&gt;         // it's ok, we can call this constructor&lt;br /&gt;         ref = new SingletonObject();&lt;br /&gt;     return ref;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   private static SingletonObject ref;&lt;br /&gt;}&lt;/pre&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;So far, so good. When first called, the getSingletonObject() method         creates a singleton instance, assigns it to a member variable, and         returns the singleton. Subsequent calls will return the same singleton,         and all is well with the world. You could extend the functionality of         the singleton object by adding new methods, to perform the types of         tasks your singleton needs. So the singleton is done, right? Well         almost.....&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-4140597851375943573?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/4140597851375943573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=4140597851375943573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/4140597851375943573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/4140597851375943573'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/getting-instance-of-singleton.html' title='GETTING AN INSTANCE OF THE SINGLETON'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-7116191556852688831</id><published>2007-10-26T03:54:00.000-07:00</published><updated>2007-10-26T03:55:25.130-07:00</updated><title type='text'>PREVENTING DIRECT INSTANTIATION</title><content type='html'>&lt;p style="text-align: justify;"&gt;We all know how objects are instantiated right? Maybe not everyone? Let's go         through a quick refresher.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Objects are instantiated by using the &lt;code&gt;new&lt;/code&gt; keyword. The &lt;code&gt;new&lt;/code&gt;         keyword allows you to create a new instance of an object, and to specify         parameters to the class's constructor. You can specify no parameters, in         which case the blank constructor (also known as the &lt;i&gt;default&lt;/i&gt;         constructor) is invoked. Constructors can have access modifiers, like         public and private, which allow you to control which classes have access         to a constructor. So to prevent direct instantiation, we create a         private default constructor, so that other classes can't create a new         instance.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;We'll start with the class definition, for a SingletonObject class.         Next, we provide a default constructor that is marked as private. No         actual code needs to be written, but you're free to add some         initialization code if you'd like. &lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;pre&gt;public class SingletonObject&lt;br /&gt;{&lt;br /&gt; private SingletonObject()&lt;br /&gt; {&lt;br /&gt;  // no code req'd&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;So far so good. But unless we add some further code, there'll be         absolutely no way to use the class. We want to prevent direct         instantiation, but we still need to allow a way to get a reference to an         instance of the singleton object.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-7116191556852688831?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/7116191556852688831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=7116191556852688831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/7116191556852688831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/7116191556852688831'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/preventing-direct-instantiation.html' title='PREVENTING DIRECT INSTANTIATION'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-4481176121452246859</id><published>2007-10-26T03:50:00.000-07:00</published><updated>2007-10-26T03:54:29.128-07:00</updated><title type='text'>Introducing the Single Java Object</title><content type='html'>&lt;p style="text-align: justify;"&gt;For         those who haven't heard of design patterns before, or who are familiar         with the term but not its meaning, a design pattern is a template for         software development. The purpose of the template is to define a particular behavior or technique that         can be used as a building block for the construction of software - to         solve universal problems that commonly face developers. Think         of design code as a way of passing on some nifty piece of advice, just         like your mother used to give. "Never wear your socks for more than         one day" might be an old family adage, passed down from generation         to generation. It's common sense solutions that are passed on to others.         Consider a design pattern as a useful piece of advice for         designing software.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Design patterns out of the way, let's look at the singleton. By now,         you're probably wondering what a singleton is - isn't jargon terrible? A         singleton is an object that cannot be instantiated. At first, that might         seem counterintuitive - after all, we need an instance of an object         before we can use it. Well yes a singleton can be created, but it can't         be instantiated by developers - meaning that the singleton class has         control over how it is created. The restriction on the singleton is that         there can be only one instance of a singleton created by the Java         Virtual Machine (JVM) - by prevent direct instantiation we can ensure         that developers don't create a second copy.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;         &lt;/div&gt;&lt;p style="text-align: justify;"&gt;So why would this be useful? Often in designing a system, we want to         control how an object is used, and prevent others (ourselves included) from making copies         of it or creating new instances. For example, a central configuration         object that stores setup information should have one and one only         instance - a global copy accessible from any part of the application,         including any threads that are running. Creating a new configuration         object and using it would be fairly useless, as other parts of the         application might be looking at the old configuration object, and         changes to application settings wouldn't always be acted upon. I'm sure         you can think of a other situations where a singleton would be useful -         perhaps you've even used one before without giving it a name. It's a         common enough design criteria (not used everyday, but you'll come across         it from time to time). The singleton pattern can be applied in any         language, but since we're all Java programmers here (if you're not,         shame!) let's look at how to implement the pattern using Java.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-4481176121452246859?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/4481176121452246859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=4481176121452246859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/4481176121452246859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/4481176121452246859'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/10/introducing-single-java-object.html' title='Introducing the Single Java Object'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4691107643230115807.post-5404171533346531968</id><published>2007-09-04T22:24:00.000-07:00</published><updated>2008-12-08T19:21:35.072-08:00</updated><title type='text'>About the Java Technology</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_LDFYlAij5QA/Rt4_N3JZtYI/AAAAAAAAAAM/1PxdlE-tKmk/s1600-h/J1.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt; &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Java technology is both a programming language and a platform.&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The Java Programming Language&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The Java programming language is a high-level language that can be characterized by all of the following buzzwords: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div align="center"&gt;  &lt;table class="MsoNormalTable" style="" border="0" cellpadding="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Simple&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;  Architecture neutral&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Object oriented&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;Portable&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Distributed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;  High performance&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Multithreaded&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;Robust&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Dynamic&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; Secure&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;/div&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Each of the preceding buzzwords is explained in &lt;a href="http://java.sun.com/docs/white/langenv/" target="_blank"&gt;&lt;em&gt;&lt;span style="font-family:Verdana;"&gt;The Java Language Environment&lt;/span&gt;&lt;/em&gt;&lt;/a&gt; , a white paper written by James Gosling and Henry McGilton.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;In the Java programming language, all source code is first written in plain text files ending with the &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;.java&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; extension. Those source files are then compiled into &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;.class&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; files by the &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;javac&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; compiler. A &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;.class&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; file does not contain code that is native to your processor; it instead contains &lt;em&gt;&lt;span style="font-family:Verdana;"&gt;bytecodes&lt;/span&gt;&lt;/em&gt; — the machine language of the Java Virtual Machine&lt;sup&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/getStarted/intro/definition.html#FOOT"&gt;1&lt;/a&gt;&lt;/sup&gt; (Java VM). The &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;java&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; launcher tool then runs your application with an instance of the Java Virtual Machine.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" alt="Figure showing MyProgram.java, compiler, MyProgram.class, Java VM, and My Program running on a computer." style="'width:361.5pt;height:62.25pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" href="http://java.sun.com/docs/books/tutorial/figures/getStarted/g1.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image001.gif" alt="Figure showing MyProgram.java, compiler, MyProgram.class, Java VM, and My Program running on a computer." shapes="_x0000_i1025" height="83" width="482" /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" alt="Figure showing MyProgram.java, compiler, MyProgram.class, Java VM, and My Program running on a computer." style="'width:361.5pt;height:62.25pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" href="http://java.sun.com/docs/books/tutorial/figures/getStarted/g1.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image001.gif" alt="Figure showing MyProgram.java, compiler, MyProgram.class, Java VM, and My Program running on a computer." shapes="_x0000_i1025" border="0" height="83" width="482" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="figurecaption" style="text-align: center;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_LDFYlAij5QA/Rt4_N3JZtYI/AAAAAAAAAAM/1PxdlE-tKmk/s1600-h/J1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_LDFYlAij5QA/Rt4_N3JZtYI/AAAAAAAAAAM/1PxdlE-tKmk/s320/J1.JPG" alt="" id="BLOGGER_PHOTO_ID_5106588534858954114" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="figurecaption" style="text-align: center;" align="center"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="figurecaption" style="text-align: center;" align="center"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;An overview of the software development process.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Because the Java VM is available on many different operating systems, the same &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;.class&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; files are capable of running on Microsoft Windows, the Solaris &lt;sup&gt;TM&lt;/sup&gt; Operating System (Solaris OS), Linux, or Mac OS. Some virtual machines, such as the &lt;a href="http://java.sun.com/products/hotspot/" target="_blank"&gt;Java HotSpot virtual machine&lt;/a&gt;, perform additional steps at runtime to give your application a performance boost. This include various tasks such as finding performance bottlenecks and recompiling (to native code) frequently used sections of code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: center;" align="center"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" alt="Figure showing source code, compiler, and Java VM's for Win32, Solaris OS/Linux, and Mac OS" style="'width:259.5pt;height:249pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.gif" href="http://java.sun.com/docs/books/tutorial/figures/getStarted/helloWorld.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image002.gif" alt="Figure showing source code, compiler, and Java VM's for Win32, Solaris OS/Linux, and Mac OS" shapes="_x0000_i1026" border="0" height="332" width="346" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="figurecaption" style="text-align: center;" align="center"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;Through the Java VM, the same application is capable of running on multiple platforms.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The Java Platform&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;A &lt;em&gt;&lt;span style="font-family:Verdana;"&gt;platform&lt;/span&gt;&lt;/em&gt; is the hardware or software environment in which a program runs. We've already mentioned some of the most popular platforms like Microsoft Windows, Linux, Solaris OS, and Mac OS. Most platforms can be described as a combination of the operating system and underlying hardware. The Java platform differs from most other platforms in that it's a software-only platform that runs on top of other hardware-based platforms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The Java platform has two components: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The &lt;em&gt;&lt;span style="font-family:Verdana;"&gt;Java Virtual      Machine&lt;/span&gt;&lt;/em&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The &lt;em&gt;&lt;span style="font-family:Verdana;"&gt;Java      Application Programming Interface&lt;/span&gt;&lt;/em&gt; (API) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;You've already been introduced to the Java Virtual Machine; it's the base for the Java platform and is ported onto various hardware-based platforms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The API is a large collection of ready-made software components that provide many useful capabilities. It is grouped into libraries of related classes and interfaces; these libraries are known as &lt;em&gt;&lt;span style="font-family:Verdana;"&gt;packages&lt;/span&gt;&lt;/em&gt;. The next section, &lt;a href="http://java.sun.com/docs/books/tutorial/getStarted/intro/cando.html" target="_top"&gt;What Can Java Technology Do?&lt;/a&gt; highlights some of the functionality provided by the API. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: center;" align="center"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1027" type="#_x0000_t75" alt="Figure showing MyProgram.java, API, Java Virtual Machine, and Hardware-Based Platform" style="'width:165.75pt;height:76.5pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.gif" href="http://java.sun.com/docs/books/tutorial/figures/getStarted/g3.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image003.gif" alt="Figure showing MyProgram.java, API, Java Virtual Machine, and Hardware-Based Platform" shapes="_x0000_i1027" border="0" height="102" width="221" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="figurecaption" style="text-align: center;" align="center"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The API and Java Virtual Machine insulate the program from the underlying hardware.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;As a platform-independent environment, the Java platform can be a bit slower than native code. However, advances in compiler and virtual machine technologies are bringing performance close to that of native code without threatening portability. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;a name="FOOT"&gt;&lt;span style="font-family:Verdana;"&gt;The terms"Java Virtual Machine" and "JVM" mean a Virtual Machine for the Java platform. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;a href="http://java.sun.com/docs/books/tutorial/getStarted/intro/index.html" target="_top"&gt;« Previous&lt;/a&gt; • &lt;a href="http://java.sun.com/docs/books/tutorial/getStarted/TOC.html" target="_top"&gt;Trail&lt;/a&gt; • &lt;a href="http://java.sun.com/docs/books/tutorial/getStarted/intro/cando.html" target="_top"&gt;Next »&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;span style="font-family:Verdana;"&gt;What Can Java Technology Do?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The general-purpose, high-level Java programming language is a powerful software platform. Every full implementation of the Java platform gives you the following features: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Development Tools&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: The development tools      provide everything you'll need for compiling, running, monitoring,      debugging, and documenting your applications. As a new developer, the main      tools you'll be using are the &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;javac&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; compiler, the &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;java&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; launcher, and the &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;javadoc&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt; documentation tool. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Application Programming      Interface (API)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: The API provides the core functionality of the Java programming      language. It offers a wide array of useful classes ready for use in your      own applications. It spans everything from basic objects, to networking      and security, to XML generation and database access, and more. The core      API is very large; to get an overview of what it contains, consult the &lt;a href="http://java.sun.com/javase/6/docs/index.html" target="_blank"&gt;Java      SE Development Kit 6 (JDK&lt;sup&gt;TM&lt;/sup&gt; 6) documentation&lt;/a&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Deployment Technologies&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: The JDK software provides      standard mechanisms such as the Java Web Start software and Java Plug-In      software for deploying your applications to end users. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;User Interface Toolkits&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: The Swing and Java 2D      toolkits make it possible to create sophisticated Graphical User      Interfaces (GUIs). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Integration Libraries&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: Integration libraries such      as the Java IDL API, JDBC&lt;sup&gt;TM&lt;/sup&gt; API, Java Naming and Directory      Interface&lt;sup&gt;TM&lt;/sup&gt; ("J.N.D.I.") API, Java RMI, and Java      Remote Method Invocation over Internet Inter-ORB Protocol Technology (Java      RMI-IIOP Technology) enable database access and manipulation of remote      objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;We can't promise you fame, fortune, or even a job if you learn the Java programming language. Still, it is likely to make your programs better and requires less effort than other languages. We believe that Java technology will help you do the following: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Get started quickly&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: Although the Java      programming language is a powerful object-oriented language, it's easy to      learn, especially for programmers already familiar with C or C++. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Write less code&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: Comparisons of program      metrics (class counts, method counts, and so on) suggest that a program      written in the Java programming language can be four times smaller than      the same program written in C++. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Write better code&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: The Java programming      language encourages good coding practices, and automatic garbage      collection helps you avoid memory leaks. Its object orientation, its      JavaBeans&lt;sup&gt;TM&lt;/sup&gt; component architecture, and its wide-ranging,      easily extendible API let you reuse existing, tested code and introduce      fewer bugs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Develop programs more quickly&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: The Java programming      language is simpler than C++, and as such, your development time could be      up to twice as fast when writing in it. Your programs will also require      fewer lines of code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Avoid platform dependencies&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: You can keep your program      portable by avoiding the use of libraries written in other languages. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Write once, run anywhere&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;: Because applications      written in the Java programming language are compiled into      machine-independent bytecodes, they run consistently on any Java platform.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana;"&gt;Distribute software more      easily&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;:      With Java Web Start software, users will be able to launch your      applications with a single click of the mouse. An automatic version check      at startup ensures that users are always up to date with the latest      version of your software. If an update is available, the Java Web Start      software will automatically update their installation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4691107643230115807-5404171533346531968?l=suryajava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://suryajava.blogspot.com/feeds/5404171533346531968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4691107643230115807&amp;postID=5404171533346531968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/5404171533346531968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4691107643230115807/posts/default/5404171533346531968'/><link rel='alternate' type='text/html' href='http://suryajava.blogspot.com/2007/09/about-java-technology.html' title='About the Java Technology'/><author><name>surya</name><uri>http://www.blogger.com/profile/15999936332583917307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LDFYlAij5QA/Rt4_N3JZtYI/AAAAAAAAAAM/1PxdlE-tKmk/s72-c/J1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
