<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>J2ME Programming Guide</title>
	<link>http://j2me.synclastic.com</link>
	<description>Java ME Tutorials and Tips by Eric Giguere</description>
	<pubDate>Wed, 19 Mar 2008 15:30:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Mobile AJAX and Java ME: Closer Than You Think</title>
		<link>http://j2me.synclastic.com/2006/11/15/mobile-ajax-and-java-me-closer-than-you-think/</link>
		<comments>http://j2me.synclastic.com/2006/11/15/mobile-ajax-and-java-me-closer-than-you-think/#comments</comments>
		<pubDate>Wed, 15 Nov 2006 15:45:34 +0000</pubDate>
		<dc:creator>Eric Giguere, J2ME expert and author</dc:creator>
		
		<category><![CDATA[Essays]]></category>

		<guid isPermaLink="false">http://j2me.synclastic.com/2006/11/15/mobile-ajax-and-java-me-closer-than-you-think/</guid>
		<description><![CDATA[I&#8217;ve submitted a follow-up article to my introductory SOA and Java ME article. The new article focuses on asynchronous calls, and I&#8217;ll post an announcement here when it goes live. However, I wanted to talk further about one of the claims I made in the article on how Java ME and AJAX are related.
What is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve submitted a follow-up article to my <a href="http://developers.sun.com/techtopics/mobility/midp/ttips/soaintro/">introductory SOA and Java ME</a> article. The new article focuses on asynchronous calls, and I&#8217;ll post an announcement here when it goes live. However, I wanted to talk further about one of the claims I made in the article on how Java ME and AJAX are related.</p>
<h3>What is AJAX?</h3>
<p>According to the <a href="http://adaptivepath.com/publications/essays/archives/000385.php">seminal article</a> about AJAX (I wish things I wrote were referred to as &#8220;seminal&#8221;, it sounds so impressive), the term &#8220;AJAX&#8221; stands for <i>asynchronous JavaScript and XML</i>. The idea is fairly simple. Instead of building a web application using the traditional &#8220;dumb client&#8221; approach (all logic on the server), move as much logic as you can to the browser (writing it in JavaScript) and communicate with the server asynchronously (in the background), receiving data in XML or some other JavaScript-friendly (like <a href="http://www.json.org/">JSON</a>) format.</p>
<p>The benefits of AJAX are threefold. First, it reduces the server&#8217;s workload &mdash; it&#8217;s not spending most of its time generating pages in response to changes on the client. Second, applications become much more responsive due to the local logic &mdash; no roundtrips to the server and back in order to expand a tree node, for example. Third, there&#8217;s nothing to install on the client &mdash; the user just starts up a browser and navigates to the right URL; as long as they have Internet access, they&#8217;re in.</p>
<h3>Oh Yeah? Try Mobile App Development!</h3>
<p>One of the things I&#8217;ve always found funny about the AJAX programming metaphor is that many developers think it&#8217;s new technology. The truth is that mobile application developers have long faced the same underlying issues. It&#8217;s kind of inevitable, really: when the network is slow or unavailable, you generally have two choices for building network-enabled (as opposed to completely standalone) applications. The first choice is to replicate the entire application, or its equivalent, on the device. You have a database application running against a big database server? Port it to the mobile platform and have it run against a local database, then have the local database synchronize itself with the database server whenever possible. (Advertisement: <a href="http://www.ianywhere.com/products/sql_anywhere.html">SQL Anywhere</a> has two different mobile database engines that can sync to all the big name database servers.)</p>
<p>The second choice is to use an asynchronous model. Talk to the server using a queuing methodology. Send out the requests, but don&#8217;t wait for them to come back. Let the user continue to work. When the responses do arrive, process them. There are many ways to do this. (Advertisement: <a href="http://www.ianywhere.com/products/qanywhere.html">QAnywhere</a> is one way.)</p>
<h3>Mobile AJAX?</h3>
<p>You might think that AJAX is the perfect technology for building cellphone-based applications. Especially with the powerful mid-range and high-end phones now available. And you might be right, except of course that most mobile browsers don&#8217;t support the functionality needed to run AJAX applications.</p>
<p>I say &#8220;most&#8221; because there is actually a &#8220;mobile AJAX&#8221; product on the market right now called <a href="http://www.ianywhere.com/products/mbusiness_anywhere.html">M-Business Anywhere</a> that lets you develop web applications with JavaScript-based local logic on mobile devices &mdash; it certainly sounds AJAXish, doesn&#8217;t it? In fact, it&#8217;s the basis for the <a href="http://www.avantgo.com">AvantGo</a> service, which mobilizes web content for free. But M-Business Anywhere can go further than that and mobilize enterprise web applications. No, it&#8217;s not strictly-speaking AJAX because there&#8217;s no XMLHttpRequest object, but it&#8217;s nevertheless an async development model. I know, because write now I&#8217;m developing the <a href="https://my.avantgo.com/rim/bb_beta.html">BlackBerry client</a> for the service.</p>
<h3>AJAX = Asynchronous <i>Java</i> and XML?</h3>
<p>But our focus here is Java, and Java ME specifically. How do AJAX and Java ME relate to each other?</p>
<p>Not directly, it would seem, unless you change your definition of AJAX. Maybe for Java ME developers &#8220;AJAX&#8221; really stands for <i>asynchronous Java and XML</i>. It&#8217;s what we do today to get our apps working well: background communication over HTTP using simple data exchange protocols, with local logic for the user interface.</p>
<p>Maybe we&#8217;re more bleeding edge than we thought!</p>
<p><i><a href="http://www.synclastic.com">Eric Giguere</a> is a software developer at <a href="http://www.ianywhere.com">Sybase iAnywhere</a> who has published extensively about Java ME programming. This entry is from his <a href="http://j2me.synclastic.com">J2ME Programming Guide.</i></p>
<p>Technorati Tags: <a href="http://technorati.com/tag/AJAX" rel="tag">AJAX</a>, <a href="http://technorati.com/tag/wireless" rel="tag"> wireless</a>, <a href="http://technorati.com/tag/mobile" rel="tag"> mobile</a>, <a href="http://technorati.com/tag/mobile+AJAX" rel="tag"> mobile AJAX</a>, <a href="http://technorati.com/tag/Java+ME" rel="tag"> Java ME</a>, <a href="http://technorati.com/tag/asynchronous" rel="tag"> asynchronous</a></p>
]]></content:encoded>
			<wfw:commentRss>http://j2me.synclastic.com/2006/11/15/mobile-ajax-and-java-me-closer-than-you-think/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Service-Oriented Architecture and Java ME: New Tech Tip</title>
		<link>http://j2me.synclastic.com/2006/10/26/service-oriented-architecture-and-java-me-new-tech-tip/</link>
		<comments>http://j2me.synclastic.com/2006/10/26/service-oriented-architecture-and-java-me-new-tech-tip/#comments</comments>
		<pubDate>Thu, 26 Oct 2006 22:13:18 +0000</pubDate>
		<dc:creator>Eric Giguere, J2ME expert and author</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://j2me.synclastic.com/2006/10/26/service-oriented-architecture-and-java-me-new-tech-tip/</guid>
		<description><![CDATA[My new Java ME Tech Tip Service-Oriented Architecture and Java ME has been published on the Sun site. It&#8217;s a general introduction to SOA, with a Java ME twist of course. More SOA tips are to follow.
Technorati Tags: Java ME,  J2ME,  SOA,  service-oriented architecture,  tech tip,  Eric Giguere
]]></description>
			<content:encoded><![CDATA[<p>My new Java ME Tech Tip <a href="http://developers.sun.com/techtopics/mobility/midp/ttips/soaintro/">Service-Oriented Architecture and Java ME</a> has been published on the Sun site. It&#8217;s a general introduction to SOA, with a Java ME twist of course. More SOA tips are to follow.</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Java+ME" rel="tag">Java ME</a>, <a href="http://technorati.com/tag/J2ME" rel="tag"> J2ME</a>, <a href="http://technorati.com/tag/SOA" rel="tag"> SOA</a>, <a href="http://technorati.com/tag/service-oriented+architecture" rel="tag"> service-oriented architecture</a>, <a href="http://technorati.com/tag/tech+tip" rel="tag"> tech tip</a>, <a href="http://technorati.com/tag/Eric+Giguere" rel="tag"> Eric Giguere</a></p>
]]></content:encoded>
			<wfw:commentRss>http://j2me.synclastic.com/2006/10/26/service-oriented-architecture-and-java-me-new-tech-tip/feed/</wfw:commentRss>
		</item>
		<item>
		<title>BlackBerry Programming Is Different</title>
		<link>http://j2me.synclastic.com/2006/09/21/blackberry-programming-is-different/</link>
		<comments>http://j2me.synclastic.com/2006/09/21/blackberry-programming-is-different/#comments</comments>
		<pubDate>Thu, 21 Sep 2006 15:01:05 +0000</pubDate>
		<dc:creator>Eric Giguere, J2ME expert and author</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://j2me.synclastic.com/2006/09/21/blackberry-programming-is-different/</guid>
		<description><![CDATA[You may wonder why I&#8217;ve chosen to create a separate blog, BlackBerry Developers At Work!, to discuss development issues for Research In Motion&#8217;s BlackBerry platform. The BlackBerry platform is a Java ME platform, after all, and RIM is on the JCP&#8217;s ME executive committee and on several expert groups for important Java ME standards, such [...]]]></description>
			<content:encoded><![CDATA[<p>You may wonder why I&#8217;ve chosen to create a separate blog, <a href="http://blackberry.synclastic.com">BlackBerry Developers At Work!</a>, to discuss development issues for Research In Motion&#8217;s <a href="http://www.blackberry.com">BlackBerry</a> platform. The BlackBerry platform is a Java ME platform, after all, and RIM is on the JCP&#8217;s <a href="http://www.jcp.org/en/participation/committee">ME executive committee</a> and on several expert groups for important Java ME standards, such as <a href="http://www.jcp.org/en/jsr/detail?id=271">MIDP 3.0</a>. So why treat BlackBerry programming separately from Java ME programming?</p>
<p>The truth is that BlackBerry programming <b>is different</b> in many ways from &#8220;regular&#8221; Java ME programming. Here are some of the differences:</p>
<ul>
<li><b>Enterprise mindset.</b> Although it&#8217;s true that RIM is pushing its way into the conumer market with the recent introduction of the <a href="http://blackberry.synclastic.com/blackberry-pearl-smartphone/">BlackBerry Pearl 8100 smartphone</a>, the BlackBerry platform is still primarily thought of as an enterprise-focused mobility solution. A BlackBerry can be tightly integrated with an enterprise-level messaging system using RIM&#8217;s <a href="http://blackberry.konsiz.com/blackberry-enterprise-server.html">BlackBerry Enterprise Server</a> in a way most J2ME devices cannot.</li>
<li><b>Different APIs.</b> Although the BlackBerry supports a number of different JSRs, each device also comes with an extensive set of RIM-specific APIs that are often more powerful and more comprehensive than what you&#8217;ll find in those JSRs, including a user interface model entirely separate from MIDP&#8217;s. While it&#8217;s true that MIDlets will run BlackBerry devices, it&#8217;s more common to write a BlackBerry-specific version of an application that uses the RIM-specific APIs than to depend entirely on what&#8217;s available in the Java ME standards.</li>
<li><b>Consistent and documented deployment model.</b> Unlike Java ME, where application deployment methods vary greatly from device to device, application deployment is handled consistently across all devices and carriers. Want to use certain APIs to access system or user information? No problem, <a href="http://www.blackberry.com/developers/downloads/jde/api.shtml">fill out a form</a> and pay a small fee to get your signing key, then program away. Want OTA deployment? No problem. Want to control what applications can do? No problem.</li>
<li><b>Different development tools.</b> This surprises Java ME developers, but you can&#8217;t just take a Java class file and install it on a BlackBerry. The BlackBerry&#8217;s VM is not actually a Java VM, it&#8217;s a Java-like VM with its own bytecodes that was developed specifically for the BlackBerry architecture. So Java class files need to be transformed into COD files before they can run. So yes, you can use Ant, Eclipse and/or NetBeans for code development, but you&#8217;ll still end up using RIM&#8217;s tools (at a minimum, their compiler and their signature tool) to build your application.</li>
</ul>
<p>Don&#8217;t think, though, that all is perfect in the BlackBerry world. The documentation is often maddeningly incomplete, obscure, or sometimes just wrong. The dependency on RIM for the development tools is frustrating (why can&#8217;t we have a signature tool that lets you specify the password for the certificate repository on the command line so that we can do automated builds?). The BlackBerry developer community is smaller than the Java ME community at large, making it hard to get in-depth help without joining RIM&#8217;s partner program. Every serious BlackBerry developer will have a similar list of &#8220;gotchas&#8221;.</p>
<p>So this is why I feel it&#8217;s important to keep the Java ME and BlackBerry discussions separate, hence the need for two different blogs. If you&#8217;re interested in BlackBerry programming, you should subscribe to both blogs, but if you&#8217;re a general Java ME enthusiast this blog is enough to read.</p>
<p>Anyhow, onwards and upwards!</p>
<p><!--adsense#banner--></p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Java+ME" rel="tag">Java ME</a>, <a href="http://technorati.com/tag/J2ME" rel="tag"> J2ME</a>, <a href="http://technorati.com/tag/BlackBerry" rel="tag"> BlackBerry</a>, <a href="http://technorati.com/tag/Research+In+Motion" rel="tag"> Research In Motion</a>, <a href="http://technorati.com/tag/BES" rel="tag"> BES</a>, <a href="http://technorati.com/tag/MIDP" rel="tag"> MIDP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://j2me.synclastic.com/2006/09/21/blackberry-programming-is-different/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mobile JUnit: Java ME Unit Testing</title>
		<link>http://j2me.synclastic.com/2006/08/09/mobile-junit-java-me-unit-testing/</link>
		<comments>http://j2me.synclastic.com/2006/08/09/mobile-junit-java-me-unit-testing/#comments</comments>
		<pubDate>Wed, 09 Aug 2006 14:06:12 +0000</pubDate>
		<dc:creator>Eric Giguere, J2ME expert and author</dc:creator>
		
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://j2me.synclastic.com/2006/08/09/mobile-junit-java-me-unit-testing/</guid>
		<description><![CDATA[I&#8217;ve been playing around with Mobile JUnit, a great new tool from Sony Ericsson. If you&#8217;re a Java SE or EE programmer, you&#8217;re probably familiar with the JUnit project, an open source unit testing framework for Java. With JUnit you write simple classes (test cases) that have a number of methods that use assertions to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with <a href="http://developer.sonyericsson.com/site/global/newsandevents/latestnews/newsjuly06/p_mobile_juint1.0_javame_cldc.jsp">Mobile JUnit</a>, a great new tool from Sony Ericsson. If you&#8217;re a Java SE or EE programmer, you&#8217;re probably familiar with the <a href="http://www.junit.org">JUnit</a> project, an open source unit testing framework for Java. With JUnit you write simple classes (test cases) that have a number of methods that use assertions to test various aspects of your code:</p>
<pre>
import com.sonyericsson.junit.framework.*;

public class MyTest extends TestCase {
    public void testOnePlusOne(){
        assertBoolean( 1 + 1 = 2 );
    }
}
</pre>
<p>You can build entire test suites of test cases and automatically run the tests using test runners that display their results either on the console or in a window (there are runners for AWT and for Swing).</p>
<p>Mobile JUnit is a rewrite of JUnit specifically for CLDC-based platforms. Because JUnit depends on reflection and reflection is not available with the CLDC, Mobile JUnit takes a different approach and gathers testing information at compile time and generating helper classes to actually run the tests. (As a side note, Mobile JUnit is based on JUnit 3.8.1 &mdash; later versions of JUnit have dependencies on Java 1.5 features like annotations.) It then compiles everything into a MIDlet and runs the MIDlet in the emulator for you. You can even do on-device testing (for Sony Ericsson phones) if necessary, without having to install the MIDlet on the device &mdash; Mobile JUnit takes care of that for you.</p>
<p>Even though Mobile JUnit is from Sony Ericsson and by default assumes you&#8217;re using it with the Sony Ericsson SDK for CLDC programming, Mobile JUnit can be used with any tool that is based on Sun&#8217;s Wireless Toolkit (WTK). If you&#8217;re looking to add some automated testing to your build procedure (Mobile JUnit integrates well with Ant) then check it out.</p>
<p><!--adsense--></p>
<p>Technorati Tags: <a href="http://technorati.com/tag/J2ME" rel="tag">J2ME</a>, <a href="http://technorati.com/tag/Java+ME" rel="tag"> Java ME</a>, <a href="http://technorati.com/tag/JUnit" rel="tag"> JUnit</a>, <a href="http://technorati.com/tag/Mobile+JUnit" rel="tag"> Mobile JUnit</a>, <a href="http://technorati.com/tag/unit+testing" rel="tag"> unit testing</a>, <a href="http://technorati.com/tag/testing" rel="tag"> testing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://j2me.synclastic.com/2006/08/09/mobile-junit-java-me-unit-testing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Revisiting J2ME Object Serialization</title>
		<link>http://j2me.synclastic.com/2006/07/25/revisiting-j2me-object-serialization/</link>
		<comments>http://j2me.synclastic.com/2006/07/25/revisiting-j2me-object-serialization/#comments</comments>
		<pubDate>Tue, 25 Jul 2006 15:47:02 +0000</pubDate>
		<dc:creator>Eric Giguere, J2ME expert and author</dc:creator>
		
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://j2me.synclastic.com/2006/07/25/revisiting-j2me-object-serialization/</guid>
		<description><![CDATA[A couple of weeks ago I received an email from someone who had read my J2ME Tech Tip Object Serialization in CLDC-based Profiles, written in 2002. As most of you probably know, object serialization â€” persisting the state of an object so that you can recreate the object later â€” is one of the things [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I received an email from someone who had read my J2ME Tech Tip <a href="http://java.sun.com/developer/J2METechTips/2002/tt0226.html#tip2">Object Serialization in CLDC-based Profiles</a>, written in 2002. As most of you probably know, object serialization â€” persisting the state of an object so that you can recreate the object later â€” is one of the things missing from the CLDC. Given that most devices these days are CLDC-based (with MIDP support), that tech tip was meant to solve a common problem that developers face when writing Java ME applications that need to store or communicate their state.</p>
<p>The basic idea is quite simple: define a common interface (<b>Persistent</b>) with methods that are invoked whenever the application wants the object to save or restore its state. It&#8217;s not automatic by any means, because the creator of the class has to write the code that does the saving (<b>persist</b>) and the restoring (<b>resurrect</b>). But with our trusty friends <b>DataInputStream</b> and <b>DataOutputStream</b> it&#8217;s pretty easy to do and with some forethought (put a version number at the start of the serialization stream) you can even write persistence code that is upwardly compatible.</p>
<p>Restoring the object is not as elegant as it could be, however. This is because we can only create objects via the <b>newInstance</b> method of the <b>Class</b> object. So what we do is create a prototype object using the null constructor (which, due to the lack of reflection, is the only one available to us) and then invoke <b>resurrect</b> to initialize the new object&#8217;s state.</p>
<p>This particular reader was having problems with the speed of the object restoration in my <b>VectorHelper</b> class. <b>VectorHelper</b> is a convenience class used to persist and restore <b>Vector</b> objects, as long as the <b>Vector</b> contained nothing but strings, integers or objects that implement <b>Persistent</b>.</p>
<p>Here&#8217;s the restoration code in question:</p>
<pre>
   public static Vector resurrect( byte[] persisted )
                            throws IOException {
        ByteArrayInputStream bin =
                    new ByteArrayInputStream( persisted );
        DataInputStream      din =
                    new DataInputStream( bin );

        Vector v = new Vector();
        int n = din.readInt();

        for( int i = 0; i < n; ++i ){
            int type = din.readByte();
            if( type == NULL ){
                v.addElement( null );
            } else if( type == INTEGER ){
                v.addElement( new Integer( din.readInt() ) );
            } else if( type == STRING ){
                v.addElement( din.readUTF() );
            } else if( type == PERSISTENT ){
                String cname = din.readUTF();
                int    len = din.readInt();
                byte[] tmp = new byte[ len ];

                din.readFully( tmp );

                try {
                    Class cl = Class.forName( cname );
                    Object o = cl.newInstance();
                    ((Persistent) o).resurrect( tmp );
                    v.addElement( o );
                }
                catch( IOException e ){
                    throw e;
                }
                catch( Exception e ){
                    throw new IOException( "Exception " +
                        e.toString() );
                }
            } else {
                throw new IOException( "Unknown " +
                   "type " + type );
            }
        }

        return v;
    }
</pre>
<p>Can you guess where the bottleneck might be?</p>
<p>It&#8217;s the code that restores <b>Persistent</b> objects:</p>
<pre>
    Class cl = Class.forName( cname );
    Object o = cl.newInstance();
    ((Persistent) o).resurrect( tmp );
    v.addElement( o );
</pre>
<p>The problem is that dynamically looking up a class (<b>Class.forName</b>) and/or instantiating it (<b>cl.newInstance</b>) is very slow on some devices. The solution for my reader was to speed up this process by removing the generic class lookup and instantiation code and replacing it with code specific to his application. For example, say you had two classes <b>Employee</b> and <b>Student</b> that both implemented <b>Persistent</b>. Then you could code:</p>
<pre>
    Object o;
    if( cname.equals( "com.mypackage.Employee" ) ){
        o = new Employee();
    } else if( cname.equals( "com.mypackage.Student" ) ){
        o = new Student();
    } else {
        throw new UnknownClassException(); // oops!
    }
    ((Persistent) o).resurrect( tmp );
    v.addElement( o );
</pre>
<p>And suddenly the restoration code is much faster.</p>
<p>The whole point of this example is that Java ME programming often boils down to writing specialized code instead of writing generic code. The examples in my J2ME Tech Tips and other articles tend to be generic because they need to work over a wide variety of platforms. And writing generic code often feels like the &#8220;right&#8221; or &#8220;correct&#8221; thing to do. But correctness in programming isn&#8217;t about conforming to abstract notions of what&#8217;s good and what&#8217;s bad, it&#8217;s about <b>writing code that works</b> and <b>meets user expectations</b>. This is particularly true with Java ME programming. You can get away with a lot of fat on desktop or server Java &mdash; you just run it on a faster machine or give the VM more memory. You can&#8217;t do that with Java ME applications.</p>
<p>Somedays when I&#8217;m feeling prickly I think that all Java programmers should learn Java on an old Motorola or Nokia phone with a 50K limit to the size of the application. Because it really forces you to think carefully about your algorithms and how you&#8217;re using memory. And in the end I think it makes you a better programmer. If I had to choose between hiring someone who&#8217;d learned Java by doing J2ME programming versus someone who&#8217;d learned it doing J2EE programming, I&#8217;d hire the J2ME coder.</p>
<p>Any Java coder can learn new APIs, but learning the <b>mindset</b> of efficient and effective Java coding is much harder to do if it&#8217;s not ingrained from day one.</p>
<p><!--adsense#banner--><br /><p>Technorati Tags: <a href="http://technorati.com/tag/J2ME" rel="tag">J2ME</a>, <a href="http://technorati.com/tag/Java+ME" rel="tag"> Java ME</a>, <a href="http://technorati.com/tag/serialization" rel="tag"> serialization</a>, <a href="http://technorati.com/tag/coding" rel="tag"> coding</a>, <a href="http://technorati.com/tag/programming" rel="tag"> programming</a>, <a href="http://technorati.com/tag/CLDC" rel="tag"> CLDC</a>, <a href="http://technorati.com/tag/learning+Java" rel="tag"> learning Java</a></p>
]]></content:encoded>
			<wfw:commentRss>http://j2me.synclastic.com/2006/07/25/revisiting-j2me-object-serialization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The J2ME Programming Guide</title>
		<link>http://j2me.synclastic.com/2006/07/19/the-j2me-programming-guide/</link>
		<comments>http://j2me.synclastic.com/2006/07/19/the-j2me-programming-guide/#comments</comments>
		<pubDate>Wed, 19 Jul 2006 14:20:43 +0000</pubDate>
		<dc:creator>Eric Giguere, J2ME expert and author</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://j2me.synclastic.com/2006/07/19/the-j2me-programming-guide/</guid>
		<description><![CDATA[Welcome to Eric Giguere&#8217;s J2ME programming guide. Technically, I should say &#8220;Java ME programming&#8221; instead of &#8220;J2ME programming&#8221;, but I still have a soft spot for the term J2ME. Let me explain and give you some idea of what I plan to do with this site.
What Does J2ME Stand For?
J2ME is an acronym for Java [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to Eric Giguere&#8217;s J2ME programming guide. Technically, I should say &#8220;Java ME programming&#8221; instead of &#8220;J2ME programming&#8221;, but I still have a soft spot for the term <strong>J2ME</strong>. Let me explain and give you some idea of what I plan to do with this site.</p>
<h3>What Does J2ME Stand For?</h3>
<p>J2ME is an acronym for <strong>Java 2 Micro Edition</strong>, known more formally as <strong>Java 2 Platform, Micro Edition</strong>. When Java 2 was introduced in 1999 as the formal name for the Java programming environment (renaming what until then had been known simply as &#8220;Java 1.2&#8243;), the Java platform was split into three variants:</p>
<ul>
<li><strong>Java 2 Standard Edition</strong> (J2SE), aka &#8220;desktop Java&#8221; â€” the Java we all knew and loved</li>
<li><strong>Java 2 Micro Edition</strong> (J2ME), aka &#8220;wireless Java&#8221; â€” Java for mobile phones, handheld devices, and other constrained environments</li>
<li><strong>Java 2 Enterprise Edition</strong> (J2EE), aka &#8220;server-side Java&#8221; â€” Java for server-side, database- and message-centric computing</li>
</ul>
<p>Of course, if a name changes once, there&#8217;s nothing to prevent it from changing twice&#8230;</p>
<h3>What does Java ME Stand For?</h3>
<p>In 2005, Sun decided that the &#8220;2&#8243; in &#8220;Java 2&#8243; no longer made any sense as a platform designation, given that Java 5 (aka Java 1.5) was now the standard and that Java 6 was in development. Henceforth, the three variants of the Java platform would be known as:</p>
<ul>
<li>Java Standard Edition (Java SE)</li>
<li>Java Micro Edition (Java ME)</li>
<li>Java Enterprise Edition (Java EE)</li>
</ul>
<p>So <strong>J2ME</strong> officially became <strong>Java ME</strong>. Sun sucked it in and went and renamed all references to these technologies on its websites and documents.</p>
<h3>J2ME Just Sounds Better</h3>
<p>So given that <strong>Java ME</strong> is the official shorthand term for wireless Java, why do I still refer to J2ME?</p>
<p>Call it force of habit&#8230; I&#8217;ve been writing about J2ME since 1999, when I first started writing <a href="http://www.ericgiguere.com/books/j2me.html">Java 2 Micro Edition: Professional Developer&#8217;s Guide</a>. This continued with the publication of my <a href="http://developers.sun.com/techtopics/mobility/allttips/">J2ME Tech Tips</a> and various articles on Sun&#8217;s developer site. And of  course the <a href="http://www.ericgiguere.com/books/midp/index.html">second book</a>. In short, the term is ingrained.</p>
<p>But I also find that &#8220;J2ME&#8221; rolls off the tongue much more easily, at least in English. &#8220;Java ME&#8221; is longer, and &#8220;JME&#8221; sounds like someone&#8217;s name. So that&#8217;s another reason to stick with J2ME. I suspect many of the old-timers (hello everyone on the <a href="http://swjscmail1.sun.com/kvm-interest.html">KVM-INTEREST</a> mailing list) feel the same way, though I&#8217;ve never asked anyone else.</p>
<h3>What To Expect From This Guide</h3>
<p>The <s>Java ME Programming Guide</s> J2ME Programming Guide is my new site for J2ME-related material, a replacement of sort for <a href="http://www.ericgiguere.com/j2me/index.html">Eric&#8217;s J2ME Pages</a>, which I never really fleshed out. Rather than refashion those pages, I&#8217;ve decided to start anew.</p>
<p>What you can expect here is the occasional post with tips, tutorials and news about J2ME programming. I&#8217;ll be updating some of my older material, announcing the publication of new material, and posting the occasional comment or essay about J2ME.</p>
<p>It&#8217;s my new window into the world of Java ME programming, and I hope you&#8217;ll ride along with me.</p>
<p><!--adsense#banner--></p>
<p>Technorati Tags: <a href="http://technorati.com/tag/J2ME" rel="tag">J2ME</a>, <a href="http://technorati.com/tag/Java+ME" rel="tag"> Java ME</a>, <a href="http://technorati.com/tag/Java" rel="tag"> Java</a>, <a href="http://technorati.com/tag/wireless" rel="tag"> wireless</a>, <a href="http://technorati.com/tag/J2SE" rel="tag"> J2SE</a>, <a href="http://technorati.com/tag/J2EE" rel="tag"> J2EE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://j2me.synclastic.com/2006/07/19/the-j2me-programming-guide/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
