Serialization

November 9, 2009

Pengertian menurut wikipedia :

serialization is the process of converting an object into a sequence of bits so that it can be persisted on a storage medium (such as a file, or a memory buffer) or transmitted across a network connection link to be “resurrected” later in the same or another computer environment. When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. For many complex objects, such as those that make extensive use of references, this process is not straightforward

selanjutnya di bagian java :

Java provides automatic serialization which requires that the object be marked by implementing the java.io.Serializable interface. Implementing the interface marks the class as “okay to serialize,” and Java then handles serialization internally. There are no serialization methods defined on the Serializable interface, but a serializable class can optionally define methods with certain special names and signatures that if defined, will be called as part of the serialization/deserialization process. The language also allows the developer to override the serialization process more thoroughly by implementing another interface, the Externalizable interface, which includes two special methods that are used to save and restore the object’s state.

  1. There are three primary reasons why objects are not serializable by default and must implement the Serializable interface to access Java’s serialization mechanism. Not all objects capture useful semantics in a serialized state. For example, a Thread object is tied to the state of the current JVM. There is no context in which a deserialized Thread object would maintain useful semantics.
  2. The serialized state of an object forms part of its class’s compatibility contract. Maintaining compatibility between versions of serializable classes requires additional effort and consideration. Therefore, making a class serializable needs to be a deliberate design decision and not a default condition.
  3. Serialization allows access to non-transient private members of a class that are not otherwise accessible. Classes containing sensitive information (for example, a password) should not be serializable or externalizable.

The standard encoding method uses a simple translation of the fields into a byte stream. Primitives as well as non-transient, non-static referenced objects are encoded into the stream. Each object that is referenced by the serialized object and not marked as transient must also be serialized; and if any object in the complete graph of non-transient object references is not serializable, then serialization will fail. The developer can influence this behavior by marking objects as transient, or by redefining the serialization for an object so that some portion of the reference graph is truncated and not serialized. It is possible to serialize Java objects through JDBC and store them into a database. While Swing components do implement the Serializable interface, they are not portable between different versions of the Java Virtual Machine. As such, a Swing component, or any component which inherits it, may be serialized to an array of bytes, but it is not guaranteed that this storage will be readable on another machine.

Kira2 intinya serialization itu suatu mekanisme atau proses menyimpan/mengubah suatu object ke rangkaian byte-byte agar bisa disimpan ke dalam media penyimpanan seperti memory atau dalam bentuk file. Deretan byte tersebut dapat kita simpan menjadi suatu file atau dalam database atau ditransfer lewat jaringan. Proses untuk mendapatkan object dari sequence of bytes disebut proses deserialization. Bila object yang serializable memiliki object yang tidak
serializable, maka objek tersebut harus ditandai dengan deklarasi “transient”.

Kalo di java serialisasi ditandai dengan mengimplementasikan interface Serializable yang ada di paket java.io.Serializable. Sebenernya kebanyakan object di Java API udah mengimplementasikan interface ini, misalnya AWT, Swing, String, Arrays.

Trus kalo gitu kapan kita pake interface Serializable dan kenapa di java ga semua class secara default meng-implementasikan interface Serializable?

Berdasarkan kutipan diatas ada tiga alasan utama kenapa objek tidak Serializable secara default dan harus meng-implementasikan interface Serializable untuk mengakses serialisasi Jawa. Pertama ada objek yang tidak membutuhkan serialisasi, misalkan Thread, Socket, OutputStream dan subclass-nya.  Untuk apa menyimpan thread yang berjalan terus-menerus dan memakai memory komputer. Kedua membuat serialisasi suatu objek merupakan bagian kompatibilitas kelas. Menjaga kompatibilitas antara versi kelas Serializable memerlukan usaha tambahan dan pertimbangan karena bukan untuk kondisi default. Ketiga Serialisasi memungkinkan akses ke kelas yang berisi informasi sensitif misalnya password, so tidak boleh dilakukan Serializable atau externalizable.

Membuat object menjadi serializable :


import java.io.Serializable;
import java.util.Date;
import java.util.Calendar;

public class PersistentTime implements Serializable {
private Date time;
public PersistentTime() {
time = Calendar.getInstance().getTime();
}

public Date getTime() {
return time;
}
}

Menyimpan object menjadi suatu file :


import java.io.FileOutputStream;
import java.io.IOException;

public class FlattenTime {
public static void main(String [] args) {
PersistentTime time = new PersistentTime();
FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
fos = new FileOutputStream("time.obj");
out = new ObjectOutputStream(fos);
out.writeObject(time);
out.close();
} catch(IOException ex) {
ex.printStackTrace();
}
}
}

Ada 2 aturan mengenai Serializable Objek :

  1. The object to be persisted must implement the Serializable interface or inherit that implementation from its object hierarchy
  2. The object to be persisted must mark all nonserializable fields transient

Untuk lebih jelas nya silahkan baca di Wikipedia or ada juga sample n penjelasannya dari Sun :D


Tips Menjadi Karyawan Sukses

November 6, 2009

Ingin menjadi Karyawan yang Sukses? Di senangi sama BOSS/Atasan, meraih karir dengan cepat, naik pangkat terus? Ingin gaji naik? Ingin juga di senangi sama bawahan / asisten Anda? Ingin semua menyenangkan? Di lingkungan kerja terasa nyaman dan selalu bergairah?

Silahkan baca dan terapkan tips berikut ini di Lingkungan Kerja anda. Beberapa hal yang wajib anda tanamkan di diri anda adalah :

1. SIKAP

Pondasi utama yang harus anda lakukan adalah menata sikap, kurangi sikap negative anda dan lebihkan sikap positif anda. Contoh yang bisa membuat anda cepat berkembang dan pintar adalah:

Sikap Berpikir Positif

Apapun hal yang anda hadapi, apapun berita yang anda terima dan keadaan apapun yang sedang menimpa anda, jalani saja dengan sikap positif, tidak cepat mengambil keputusan dan lakukan segalanya menuju arah solusi, dan bukan menuju arah masalah. Jadi jika dimarahin boss pun, berpikir positif saja, mungkin si boss lagi ngetest anda.

Sikap Mau Belajar

Belajarlah terus kepada atasan anda, kalau bisa belajar langsung ke 1, 2 tingkat di atas Anda. Pelajari kelebihan dan sisi Positif dari mereka, Pelajari semua yang bisa membuat mereka senang : Hobbinya , Prestasinya, Spesialisasinya. Pelajari kelemahan mereka, tapi jangan kasih tahu mereka yah. Nah kalo merasa sudah cukup ilmu, cari perusahaan baru yang kasih gaji lebih besar atau bikin usaha baru. Dijamin anda sukses.

How To Work For An Idiot

Belajar hal – hal biasa bukan berarti anda bodoh ataupun anda kurang mampu. Belajar adalah proses mengasah diri yang terus dilakukan tanpa henti.

Belajarlah kepada asisten/bawahan anda, seperti halnya anda belajar kepada atasan anda. Berbagilah ilmu dan saling mendukung agar anda mendapatkan support dan dukungan penuh dari bawahan anda, sehingga mereka akan berlaku jujur dan obyektif.

Sikap Suka Menolong

Di suasana kerja, anda harus selalu enjoy dan senang aja menolong. Tidak pandang bulu, semua orang yg ada di lingkungan kerja anda seperti petugas keamanan, office boy, bagian kebersihan dll. Menolong tanpa pamrih, tetapi target anda mencoba orang yang anda tolong merasa Tertolong. Sikap suka menolong biasanya di ikuti dengan sikap pemaaf dan jujur dalam bertindak.

2. MANAJEMEN DIRI

Porsi kerja anda harus maksimal, artinya anda harus mengerjakan tanggung jawab yang dibebankan kepada anda yang diberikan oleh Perusahaan sesuai dengan kedudukan/posisi jabatan yang anda sandang harus 150%.

Artinya yang 50% adalah memang tugas anda, dan yang 100% adalah Tugas bawahan anda. Maksudnya, jika sewaktu waktu atasan anda berhalangan atau tidak bisa bekerja, Anda bisa menolong dan membantu tugasnya secara benar. Inilah kesempatan anda di uji oleh Perusahaan, jika anda melakukan dengan benar maka berita bagus akan selalu bersama anda. Tentu saja anda harus melakukannya dengan sepengetahuan atasannya atasan anda, supaya mereka tau andalah the man behind the gun, jadi pujian nggak jatuh di atasan anda terus.

Anda juga harus siap mengerjakan pekerjaan Atasan anda jika sewaktu – waktu mereka berhalangan hadir, jadi bikin anda mandiri dan siap di segala medan. Kalau atasannya atasan anda lihat kan pasti akan merasa nyaman memberi anda gaji yang besar.

3. MAIN STRATEGY

Bekerja cerdik dan pintar, bisa mengatur Strategy semulus mungkin. Anda sebisa mungkin tidak selalu memilih – milih pekerjaan yg dibebankan pada saat itu, jika menerima hal baru, jalani saja sebagai sebuah ujian diri/tantangan. Jika tidak menerima suatu pekerjaan baru, anda sudah sedikit merasa monoton? Coba lirik dan amati Pekerjaan Atasan anda, kalau perlu pelajari dan lakukan pekerjaan itu bersama Atasan anda, meminta ijin atau mencoba belajar mengerjakan pekerjaan atasan anda adalah HAL yang Special dan patut anda senangi. Ini penting artinya bagi Karir anda!

Makanya waktu dulu saya selalu Tertawa jika ada teman saya melarang atau mengatakan saya bodoh,..Koq mau maunya ngerjain pekerjaan orang lain, gaji udah jelas beda, masak pekerjaan atasan dikerjain sich ? dia bilang begitu.. Saya hanya menjawab, ingin belajar dan tahu pekerjaan atasan itu seperti apa.

Nah, ternyata ada manfaatnya yg besar sekali. Suatu ketika atasan mendadak sakit, tidak bisa datang untuk bekerja, padahal saat itu pekerjaannya cukup banyak. Nah kesempatan inilah yg harus gunakan sebaik mungkin, sewajarnya dan memang harus perlu membantu mengerjakan pekerjaan atasan tersebut, dan berusaha meyakinkan kepada BOSS besar bahwa semuanya bisa diatasi dan bisa berjalan lancar. Yakinkan BOSS besar anda bahwa semua pekerjaan berhasil baik, jual talenta & skill anda di saat ini.

Siapa tahu, di saat atasan anda nanti mendapatkan Promosi Karir atau dipindahkan ke Posisi lain, maka 90% atasan anda akan merekomendasikan ke BOSS Besar bahwa anda layak menggantikan Posisi nya.

4. MENGAMBIL HATI

Anda harus pandai mengambil hati/mencuri perhatian. Anda mampu melakukan tindakan ­tindakan yang positif dan cemerlang disituasi yang penting. Anda mampu membuat orang lain merasa nyaman dan menaruh hormat kepada anda. Maaf, bedakan dengan Mencari MUKA. Kalau mencari muka biasanya suatu tindakan membual, Akting layaknya Aktor terkenal disaat BOSS sedang mengamati anda. Mencari muka biasanya dijalankan pada saat ­saat tertentu saja, dan biasanya kegiatan yang dilakukan tidak seimbang dengan kebiasaan waktu – waktu kerja normal. Jadi, pilihlah sikap mengambil hati ya?

5. BERANI BERKOMPETISI

Di Posisi Pekerjaan apapun, Kompetisi harus ada. Artinya anda siap bersaing, berkompetisi secara sehat dengan Rekan kerja anda yang Posisi nya setara dengan Anda. Anda tidak bisa menilai bahwa anda akan menang dalam persaingan, kecuali anda bekali dengan Sikap Sabar, Positif dan selalu Belajar terus.

Berkompetisi di sini bukan berarti anda sibuk mencari kesalahan kesalahan orang lain seperti kerjaannya Pak/Ibu HRD, tetapi justru anda bisa menang dalam persaingan ini jika anda mampu menutupi/membantu mengatasi masalah/kelemahan – kelemahan orang lain.

Datang dan hadirlah ditengah- tengah rekan kerja anda sebagai seorang juru selamat, seorang pemberi solusi/pemecah suatu masalah.

Jika demikian, maka suasana Kompetisi tersebut berjalan mulus dan sesuai dengan rencana anda. Dan orang lainpun tidak akan merasa dirugikan.

Maka coba anda Praktekkan, lalu lihat perkembangan diri anda dalam 1 tahun. Zaman sekarang ini , hal – hal dibawah ini sudah dianggap biasa dan nggak terlalu dilirik oleh Atasan & Pemilik Perusahaan:

  • Datang bekerja Tepat waktu/tidak pernah Bolos
  • Rajin bekerja dan Ramah
  • Bekerja sesuai Job
  • Pekerja Keras & Tekun

Karena hal – hal itu sudah biasa dan memang harus begitu. Nah 1 tambahan EXTRA yang bisa mendukung 5 poin diatas adalah Tonjolkan sesuatu yg BEDA dari Anda!

Beda dalam hal ini sesuatu Skills/Keahlian yang tidak dimiliki kebanyakan orang. Sesuatu hal yang membikin orang lain merasa salut dan anda selalu dibutuhkan dalam urusan ini. Coba temukan sesuatu yg Special di diri anda ?

Misalnya sesuatu yg Special itu adalah Anda pandai bernegosisasi, Anda Pandai menghibur, Anda selalu membuat orang lain Ketawa, Anda selalu muncul ide – ide cemerlang dan sebagainya. Hal ini kelihatan sepele, tetapi hal inilah yg sering orang lain ingat tentang diri anda.

Dikutip dari CDC FTUI


MVC Structure in J2ME

November 4, 2009

MVC (Model-View-Controller) is one of the most classic patterns for UI structure design. The MVC pattern is a way to divide the application, or even part of the application, into three parts: Model, which is the body of the application and includes the business logic; View, which represents the user interface; Controller, whose job is process the user input and system event, delegate the job to model service and update the view accordingly. MVC structure has different scales, even in a single class; the structure can be implemented with
different functions. Several examples will show — from simple to complex — how an all-in-one class J2ME[awv1] client transformed to a J2ME[awv2] client with integrated MVC structure; how three classes are organized and how the functions distributed among these classes. The pros and cons in every client type will also be discussed, so as to help the developers select the proper client type.

 

MVC structure in J2ME :


JAX-RPC & JAX-WS

November 4, 2009

Web services have been around a while now. First there was SOAP. But SOAP only described what the messages looked like. Then there was WSDL. But WSDL didn’t tell you how to write Web services in Java™. Then along came JAX-RPC 1.0. After a few months of use, the Java Community Process (JCP) folks who wrote that specification realized that it needed a few tweaks, so out came JAX-RPC 1.1. After a year or so of using that specification, the JCP folks wanted to build a better version: JAX-RPC 2.0. A primary goal was to align with industry direction, but the industry was not merely doing RPC Web services, they were also doing message-oriented Web services. So “RPC” was removed from the name and replaced with “WS” (which stands for Web Services, of course). Thus the successor to JAX-RPC 1.1 is JAX-WS 2.0 – the Java API for XML-based Web services.

JAX-WS 2.0 is the successor to JAX-RPC 1.1. There are some things that haven’t changed, but most of the programming model is different to a greater or lesser degree. The topics introduced in this tip will be expanded upon in a series of tips which we will publish over the coming months that will compare, in detail, JAX-WS and JAX-RPC. At a high level though, here are a few reasons why you would or would not want to move to JAX-WS from JAX-RPC.

Reasons you may want to stay with JAX-RPC 1.1:

  • If you want to stay with something that’s been around a while, JAX-RPC will continue to be supported for some time to come.
  • If you don’t want to step up to Java 5.
  • If you want to send SOAP encoded messages or create RPC/encoded style WSDL.

Reasons to step up to JAX-WS 2.0:

  • If you want to use the new message-oriented APIs.
  • If you want to use MTOM to send attachment data.
  • If you want better support for XML schema through JAXB.
  • If you want to use an asynchronous programming model in your Web service clients.
  • If you need to have clients or services that can handle SOAP 1.2 messages.
  • If you want to eliminate the need for SOAP in your Web services and just use the XML/HTTP binding.
  • If you like playing with leading edge technology.

 

What remains the same & different?


Blackberry : Sepuluh Tips Terpopuler untuk Mengembangkan Aplikasi Smartphone BlackBerry

November 4, 2009

BlackBerry App World kini tersedia untuk mendukung peluncuran di Asia Pasifik BlackBerry App World akan menyediakan cara baru bagi pengembang untuk menjangkau sekitar 32 juta pengguna smartphone BlackBerry di seluruh dunia. Aplikasi ini dirancang untuk membuka berbagai peluang baru bagi pelanggan dan pengembang BlackBerry.

Jadi, apa sajakah sepuluh pertanyaan terpopuler yang harus dipertimbangkan pengembang saat membuat aplikasi inovatif untuk platform BlackBerry? Berikut adalah 10 saran pertanyaan saat akan mulai mengembangkan aplikasi.

  • Apakah aplikasi tersebut berfungsi?
    Aplikasi yang terbaik harus “berfungsi”, meskipun programnya rumit. Pengguna harus dapat menggunakan fungsi dasar aplikasi tanpa perlu membuka panduan pengguna atau memeriksa forum pengguna.
  • Apakah aplikasi tersebut akan lulus dari tes lampu lalu lintas?
    Pengguna harus dapat menggunakan fitur aplikasi dalam waktu yang sama seperti saat menunggu lampu lalu lintas berubah dari merah ke hijau. Misalnya, dalam aplikasi BlackBerry Messaging, pengguna dapat memindai beberapa pesan, bahkan mengetik balasan cepat hanya dalam beberapa menit.
    Apakah aplikasi tersebut mengantisipasi tindakan pengguna?
  • Aplikasi harus intuitif dan dikembangkan dengan benar-benar mengantisipasi cara penggunaannya. Aplikasi juga harus memiliki tata letak yang jelas dan penempatan ikon yang intuitif untuk memastikan pengguna dapat menavigasi serta menggunakan fungsinya secara cepat dan mudah.
  • Apakah aplikasi tersebut sesuai dengan pengalaman BlackBerry?
    Pengguna smartphone BlackBerry akan sangat nyaman dan terkesan dengan aplikasi yang memanfaatkan pengalaman BlackBerry secara keseluruhan. Misalnya, aplikasi jaringan sosial melalui ponsel yang menggunakan kamera perangkat untuk mengambil foto dan GPS terintegrasi untuk memberi tag berbasis lokasi, akan lebih bernilai dibandingkan aplikasi yang tidak memanfaatkan satupun fitur asli perangkat.
  • Apakah aplikasi tersebut akan meminimalkan penggunaan daya baterai?
    Pengembang harus memastikan bahwa aplikasi tidak menurunkan performa perangkat secara keseluruhan, terutama masa pakai baterai. Meskipun penting bagi pengguna, namun aplikasi tidak akan dianggap sebagai pilihan yang baik jika sangat mengurangi masa pakai baterai perangkat.
  • Apakah aplikasi tersebut memanfaatkan “push”?
    Aplikasi smartphone BlackBerry yang berhasil harus memanfaatkan teknologi push yang inovatif dari RIM. Dengan teknologi push, pengguna smartphone BlackBerry tidak perlu mencari informasi baru, karena informasi tersebut akan tersedia. Fungsi ini mengubah cara interaksi pengguna dengan perangkat selular melalui pengurangan frekuensi pencarian informasi baru. Aplikasi push yang berhasil juga menggunakan jaringan nirkabel secara cermat, sehingga hanya mengirimkan informasi bila diperlukan atau bila pengguna memintanya.
  • Apakah aplikasi tersebut menggunakan akses nirkabel secara cermat?
    Aplikasi yang menggunakan sumber nirkabel secara cermat akan selalu menyediakan pengalaman pengguna yang lebih baik secara keseluruhan dan mengurangi beban pada jaringan operator. Misalnya, aplikasi cuaca melalui ponsel yang diatur untuk diperbarui setiap jam hanya akan mengirim atau menerima data jika kondisi cuaca berubah. Misalnya, aplikasi cuaca melalui ponsel akan diperbarui setiap jam, meskipun kondisi cuaca pada hari tersebut tidak berubah. Hal ini menunjukkan penggunaan jaringan nirkabel yang tidak efisien, karena sebenarnya data tidak perlu dikirim.
  • Apakah aplikasi tersebut berfungsi secara offline dan online?
    Untuk aplikasi yang memerlukan akses Internet, pengembang harus mempertimbangkan cara penggunaan program saat pengguna berada di wilayah yang menerima sedikit sinyal atau tidak sama sekali. Karena itu, aplikasi smartphone BlackBerry harus memanfaatkan teknologi push untuk memastikan informasi penting disimpan secara lokal di perangkat, sehingga sambungan nirkabel tidak perlu digunakan.
  • Apakah aplikasi tersebut memiliki antarmuka pengguna yang responsif?
    Aplikasi BlackBerry yang terbaik memiliki antarmuka pengguna yang cepat dan responsif terhadap perintah.
  • Apakah aplikasi tersebut memanfaatkan fitur spesifik di perangkat?
    Pengembang harus membuat aplikasi dengan memperhatikan model perangkat spesifik karena biasanya lebih menarik dibandingkan aplikasi yang menyediakan sedikit fitur kustom atau tidak sama sekali. Seperti penandaan foto GPS, aplikasi yang menggunakan fitur GPS asli di perangkat untuk menentukan lokasi pengguna saat mencari fasilitas lokal, akan lebih bernilai dibandingkan aplikasi yang mengharuskan pengguna memasukkan kode pos atau nama kota.

Blackberry : How to find that memory leak

November 4, 2009

Releasing an application with a memory leak can be one of the most embarrassing moments for a developer in the application’s lifecycle. Since mobile devices tend to have less free memory than a PC, the impact of a memory leak becomes more pronounced. Following the steps below will help ensure developers don’t encounter this situation when developing their application for BlackBerry® smartphones.

Leaks? What leaks?
Let’s start by clarifying how developers can end up with a memory leak in a Java® development environment. The Java Virtual Machine performs garbage collection on demand which frees up memory allocated by objects not referenced by anything else in the system – this puts Java applications in a better position than applications in a development environment like C++, for example. However, when an object that’s not needed anymore is left referenced by another object in your application, the JVM system has no way to know that this object should be freed up. This is especially true if instances of such an object get accumulated over time.

Our experience with BlackBerry development shows that in practice one of the most common cases for the creation of a memory leak is when registering listeners for system-wide events – for example, when registering your own email folder using ApplicationMessageFolderListener. However, a memory leak can be created by just adding an object instance to the global runtime store and never removing it. Here is a very simple application that creates a new leak every time it is started:


import net.rim.device.api.system.Application;
import net.rim.device.api.system.RuntimeStore;
import java.util.Random;

class TestMemoryLeaks {
public static void main(String[] args) {
//create a memory leak by adding an item to the runtimestore and never removing it
RuntimeStore store = RuntimeStore.getRuntimeStore();
store.put((new Random()).nextLong(), new TestMemoryLeaks());
}
}

Of course, memory leaks can also exist within the scope of an application, but their impact is limited since they will be eliminated when the application terminates (unless the application is designed to always run in the background). In this category also fall all implementations of listeners registered for application-wide scope – for example AccelerometerListener. For such listeners, the underlying system uses WeakReferences; when the application terminates and no other objects have “strong” references to the listener, the system will automatically remove such WeakReferences and free up the objects.


PHP : Convert latin diacritics

November 4, 2009

Code to convert latin diacritics to their traditional 7bit representation, for example :

- à,ç,é,î,… to a,c,e,i,…
- ß to ss
- ä,Ä,… to ae,Ae,…
- ë,… to e,…

(mb_convert “7bit” would simply delete any offending characters).

<?php
/**
* @args string $text line of encoded text
* string $from_enc (encoding type of $text, e.g. UTF-8, ISO-8859-1)
*
* @returns 7bit representation
*/
function to7bit($text,$from_enc) {
$text = mb_convert_encoding($text,'HTML-ENTITIES',$from_enc);
$text = preg_replace(
array('/&szlig;/','/&(..)lig;/',
'/&([aouAOU])uml;/','/&(.)[^;]*;/'),
array('ss',"$1","$1".'e',"$1"),
$text);
return $text;
}
?>

Enjoy :-)


Code Conventions for the Java Programming Language

November 4, 2009

This Code Conventions for the Java Programming Language document contains the standard conventions that we at Sun follow and recommend that others follow. It covers filenames, file organization, indentation, comments, declarations, statements, white space, naming conventions, programming practices and includes a code example.

Why have code conventions? Code conventions are important to programmers for a number of reasons:

  • 80% of the lifetime cost of a piece of software goes to maintenance.
  • Hardly any software is maintained for its whole life by the original author.
  • Code conventions improve the readability of the software, allowing engineers to understand new code more quickly and thoroughly.

Please download this document :)


Blackberry : What Is – TooManyThreadsError

November 4, 2009

A single application can create up to 16 threads. The total number of threads that can exist on a BlackBerry device from all applications is 128. Therefore, if an application has already created 16 threads, the 17th attempt fails and a TooManyThreadsError exception is thrown. Similarly, if there are 128 threads already created on the BlackBerry device and an application attempts to create another thread, a TooManyThreadsError exception is thrown.


Blackberry : How to – Create a singleton using the RuntimeStore

November 4, 2009

An application may require one or more singleton objects to be accessed from within the application itself or by other applications. The static variable ‘_instance’, in the sample below, is initialized to null for each process running on the system. Therefore, the getInstance() method needs to check the ‘_instance’ variable each time it is invoked.

To create a singleton using the RuntimeStore, use the following sample:

import net.rim.device.api.system.*;

class MySingleton {
 private static MySingleton _instance;
 private static final long GUID = 0xab4dd61c5d004c18L;

 // constructor
 MySingleton() {}

 public static MySingleton getInstance() {
  if (_instance == null) {
   _instance = (MySingleton)RuntimeStore.getRuntimeStore().get(GUID);
   if (_instance == null) {
    MySingleton singleton = new MySingleton();

    RuntimeStore.getRuntimeStore().put(GUID, singleton);
    _instance = singleton;
   }
  }

  return _instance;
 }
}

Use Cases

A singleton based on the above sample code might be used in the following scenarios:

  • A network manager class that handles all network-related requests for an application
  • A packet/message sender class
  • A debugging/logging class