Sunday, December 13, 2009

Push API, open your application on push

J2ME Push API :

It's a very powerful concept to receive some information asynchronously on particular port, instead of forcing the application to use synchronous polling techniques.

It is introduced on MIDP 2.0 (JSR 118).

How to invoke application:

Initially your application is on sleep mode. As soon as any push message comes to a particular port which is register for push messages, in place of moving into inbox, it invokes the application first.
It makes an alternate entry point for application to invoke it.

It does not make any change in application life cycle, but only creates an alternative way to start your application without invoking by user.


fig 2



It's responsibility shared between AMS and MIDlet, which is split as :
1 : When MIDlet is on sleep : AMS monitors the push event continuously. When any push message hit the registered port, AMS invokes the appropriate MIDlet to handle it.
2 : When MIDlet is running : MIDlet directly handles the push event.


//This code execute when MIDlet activates by push
public void messageReceivedHandler (TextMessage receivedMessage) {
String senderAddress = receivedMessage.getAddress();
String receivedMessageBody = "No msg received as yet";
//Receives the text message from sms
receivedMessageBody = receivedMessage.getPayloadText();
System.out.println("Received Message = "+receivedMessageBody);
}



/**
* Notification that a message arrived.
* @param conn the connection with messages available
*/
public void notifyIncomingMessage(MessageConnection conn) {
if ((thread == null) || (conn == smsconn)) {
done = false;
thread = new Thread(this);
thread.start();
System.out.println("Notify Incoming Message received..");
}
else
System.out.println("Incoming Msg, but thread is alive");
}

Wednesday, November 4, 2009

Sign your J2ME Midlet

MIDlet Signing process steps can be summarized into :
1. Generate public/private key pairs.
2. Generate Certificate Signing Request (CSR) and submit it to CA .
3. Sign the MIDLet with the certificate.


Software requirements:
1. Sun java 2 SDK or JRE
2. Sun Wireless Tool Kit (WTK)

Steps :

1. Generate public/private key pairs
a. Create a Keystore:
From command line Navigate to java 2 SDK bin directory and type the below command :
keytool -genkey -keyalg rsa -keystore -alias
it prompts you to enter a password for your keystore, your name, organization, and address.
b. List the generated keypairs
To see your generated keypairs entry ,type the below command :
keytool -keystore -list

2. Generate Certificate Signing Request (CSR) and submit it to CA :
You need to generate a (CSR) for the enrollment process.
a. generate CSR
Type the below command to create a CSR for the key pair in the keystore:
keytool –certreq –file –keystore -alias
b. submit the generated CSR to CA

3. Sign the MIDLet with the certificate:
Once the CA has approved your request, you will receive the certificate, the steps are:
a. Import the certificate to your Keystore
Use the below command
keytool –import –trustcacerts –keystore -alias -file
b. Sign the JAD file
Use JadTool utility to signs a JAR file by adding both of the certificate and the JAR file’s digital signature to the Java Application Descriptor (JAD) file, the process will be :
b.a. Adding the certificate to JAD

use JadTool.jar tadd the certificate as the value of an attribute named MIDlet-Certificate-m-n, where m is the number of the certificate chain, and n is an integer that, for new certificates, begins at one and increments by one each time you add a new certificate to the JAD file.
Java -jar %WTK_HOME%\bin\JadTool.jar -addcert -keystore -alias -storepass -inputjad -outputjad
You should see the below attributes added to your output jad file MIDlet-Certificate-1-1,MIDlet-Certificate-1-2,MIDlet-Certificate-1-3.
b.b. Adding JAR’s digital signature to the JAD
Gets the JAR’ digital signature, stores it as the value of the MIDlet-Jar-RSA-SHA1 attribute of the output JAD file.
java -jar %WTK_HOME%\bin\jadtool.jar -addjarsig -jarfile -keystore -alias -storepass -keypass -inputjad -outputjad
Where The default value for -jarfile is the MIDlet-Jar-URL property in the JAD file.

Blackberry singleton object return issue, and chunk stream returning property

If you want to run to instance of any class, they do not work parallel at a time. That make a big issue that I found while working with a application. Like if you want to run / record audio and video stream using multimedia API's, then it is not possible. Because for that you need to run audio and video simultaneously. Which is not possible due to singleton object returning nature of lower layer of Blackberry OS.

Also, if you want to run it via. invocation of camera, it it also creates a big issue that it buffered all the stream data internally while you recording stream. Once you stop the stream then, it throws all the stream in a buffer provided by you. So, you can't do any live recording of audio or video strem due to the OS issue on blackberry.

Even multimedia api's also supported by 4.6 and above OS devices. Else, for the lower OS device, you really need to invoke the Camera.