OpenBaseMovil 3.0 final Released
Finally, we are releasing OpenBaseMovil 3.0.
This version fixes some bugs found in RC3 and adds a lot of interesting things:
- app-template is an application template from which you can create the skeleton for your application, simply running ant in the folder will ask you a few questions and create your new project.
- PasswordKeeper, this is a sample application built with the app-template. You can download a working version for you phone at the download page and also the source code to learn how to create applications.
- Best of all, the Quick Start Guide which is also available for download. This guide explains how to use the app-template and follows the process of PasswordKeeper.
With this release we hope that you have every thing you need to create your own applications, and don’t forget that the BaseMovil developer program is open (in a yet restricted beta) allowing you to to get access to the sync engine, application and database hosting, and more… for FREE for developers.
Just a quick note, I wrote PasswordKeeper in about 8 hours while I created the Quick Start Guide and refined the app-template, so we could say that it took me about 4 hours to write the entire application. It may contain bugs, it’s a 0.1 version, but I think that the result is a good one for just 4 hours.
We would love to hear from you, your applications, your thoughts, feature requests… feel free to use the comments and the project page at Source Forge.















elisoj
Hi Narciso,
I just downloaded PasswordKeeper and wanted to let you know that – at least on my Nokia 6233 – the menu doesn’t work. I cannot use / trigger any of the menu items (Categories, Search, Tools etc), because all available commands are “Help” and “Exit”.
Does this really work on your mobile phone?
Currently I am reading the quick start guide, maybe I can fix that on my own later on
P.S. PIN setup worked fine, it’s apparently just the menu.
Narciso Cerezo
Hi Elisoj,
To “click” the menu options you don’t need the commands, just the center button or pressing the joystick depending on your phone.
Nokia 6233 is a Series40 phone, and I must admit that it’s been a while since we tested a Series40 (because of the limitation on the RecordStore size).
The application actually works on my Nokia E70 (and in the emulator). I will try it with a SonyEricsson K750, but from our experience with our commercial applications it runs fine on SonyEricsson phones from JP-5 onwards, and all Nokia S60 phones.
We will try to get a S40 phone to do some testing.
Thanks for your valuable input!
elisoj
You are partly right and I am partly stupid, but this doesn’t solve the problem completely
.
The “center” button on the joystick is the one the “Help” command is bound to, that’s why I can’t use it to do menu commands.
But since you are apparently working with the game api, I can use number “5″ to trigger the desired event. I should have thought of this…
So the goal will be to make sure the help button is not being bound to the center button. Maybe by changing the command category to something else, I don’t know which (only have been working with Command.ITEM and Command.EXIT so far).
EDIT: This won’t help, even if no menu item is bound to the center key, it won’t trigger anything. Don’t know why, I have done this before somewhere …
Hope this helps and thanks again for all this stuff, it’s like Christmas.
P.S. As for the “valuable input”: I like being a problem dropper *g*
PP.S. Is there a known limit for the RecordStore size for Nokia 6233? My tests say there are 144 kB free for RMS, should it be more?
Narciso Cerezo
Now that you mention it, I remember that I tested one of our commercial applications in a Nokia 6131 (basically the same as yours, S40 3rd FP1) and that was a big issue, as this phones create 3 slots for commands instead of the usual 2, and they assign the centre button to the centre command.
You might have noticed that alerts are created with full screen canvas and custom “commands”, that way we get the same aspect and behaviour on every phone.
That’s what we are planning for the next round: a totally graphic environment that uses full screen canvas. Something like the micro window toolkit.
When using the full screen you control everything.
The framework already solves many issues like this one, but the only way to create a consistent user experience is through the full screen canvas.
So I’m afraid but there’s no quick solution now for S40 3rd edition phones but to use the “5″ (nasty) button.
For the menus we could maybe switch to full screen and not use commands, but that is not fully applicable to the list browsers since they usually need commands. Though if you don’t need many commands that can be achieved through the speed options that appear as a graphical toolbar.
In our experience you can not trust the position or order or behaviour of commands. The standard says that the priority will do for positioning, but each phone places them as it suits it. Some, like the N70 will exit the application if you use a Command.CANCEL (we started detecting N70 and changing it for Command.SCREEN but it was nasty as it placed the “yes” and “no” answers in a dialog as two options in a submenu) and why we finally started doing everything with canvas.
For this concrete situation, we could simply drop the exit command (as there’s a menu option for it), so it would only leave the help command and it would (hopefully) be assigned to the left button and left the center one unassigned and available for menu selection.
You can try it just by removing the line of code that adds the main menu to the exit points in the MainController.
Narciso Cerezo
As for the question on the RecordStore limit, on S40 phones each RecordStore is limited to a maximum size.
That does not happens on S60 or SonyEricsson phones.
The maximum size depends on the model, from 32Kb for the older ones (S40 1st ed) to up to 262Kb for the more recent ones (like yours probably).
The DeviceInfo class on the core library performs that kind of tests and can tell you the actual limit.
And currently, the storage library detects that there’s a limit and when it is less than 1Mb it uses compression to store information. That is slower, but is compensated by the fact that the RMS system is simpler and faster in the S40 models than in the S60.
That is another thing we have in stock for the near future, a new version of the storage library to overcome that limitation using “file” splitting.
EDIT: Some models limit the amount of memory for Java apps, some like the S40 do not, but they limit the size of each individual RecordStore. So you might have some Mb of free memory, but the RMS will report only the space left for a single RecordStore.
elisoj
Hm, that’s tricky. I once implemented a LIST using canvas, because the normal list was too limited for what I wanted. Within keyPressed I checked for the center/fire button like this:
protected void keyPressed(int x){
int game = this.getGameAction(x);
if(x != Canvas.KEY_NUM5 && game == Canvas.FIRE){…}
}
This way I made sure that the application only reacts on the fire button and not on number 5.
And as I said: In your app the fire button also does not work when it is unassigned. But my code works on 6233, so could it be you are not checking the keys using the Game API?
BTW: Is the micro window toolkit like the Open Windowing Toolkit from Nextel and Motorola?
P.S. Interesting tech talk here
Narciso Cerezo
I will review the code, you are probably right and we are not dealing properly with the game actions.
About the MWT, I discovered it recently and I don’t really know much about it.
We have a partial implementation of a windowing toolkit, but the caveat for that are the edit boxes.
You need to detect the model, to be sure if there’s a full or normal keyboard, and play with the timings. For example, my E70 has both a normal keyboard and a full keyboard when you open it (it rotates the screen to landscape orientation).
But precisely the edit boxes are one of the main reasons for a window toolkit: they are very buggy in the S60 3rd edition models (like my E70).
PS: very interesting tech talk, indeed.
Nik
resource.pack target doesnt work on windows platform.
—
resource.pack:
[resource-pack] Merging files
BUILD FAILED
D:\temp\openbasemovil\PasswordKeeper-0.1-src\build.xml:699: com.elondra.rp.PackE
xception: Base directory does not exist: D:\temp\openbasemovil\PasswordKeeper-0.
1-src\tempopenbasemovilPasswordKeeper-0.1-src\res\lang\passkeep
Narciso Cerezo
Hi Nik,
Thanks for your comment.
Could you fill it as a bug report at SourceForge, please?
We will fix it as soon as possible.
Nik
Hi, Narciso.
Sure. Thank you.
bobohund
Hello Narciso,
this looks very promising!
Do you have any idea when the new storage engine with the file splitting feature will be released (I’m running on Blackberry, so the storage for the database is currently limited to 64kb) ?
Stefan
Hi bobohund,
did you get the DB working at all on the device or the simulator?
Because I’m trying to get the DB working on a Blackberry Device myself but end up getting NPEs.
If you can actually use it but with a 64kb limitation, I would really appreciate any information on how to do it.
Regards,
Stefan
bobohund
Hi Stefan,
i just grabbed the following packages from the svn and added them as sub-project (Library) into my JDE project.
openbasemovil-core/src/main/**/*.*
openbasemovil-errorlog/src/main/**/*.*
openbasemovil-logimpl-console/src/main/**/*.*
openbasemovil-script/src/main/**/*.*
openbasemovil-storage/src/main/**/*.*
openbasemovil-db/src/main/**/*.*
Afterwards i accessed the API as it is described in the database-developer-guide.
I got NPE’s too, but they mostly happend as the LogImpl from the openbasemovil-logimpl-console was missing. In this case the logger factory just returns null as logger which causes the application to die with lots of NPE’s
Regards
Sebastian
Narciso Cerezo
Hi bobohund,
Did you finally made it work?
If you use the compiled libraries instead of the sources you would not have the errors from the LogImpl.
We have a “logmpl-production” that we used some time go, but we did not include it because it is just an empty implementation that does nothing, but mainly because the build system first runs the “commenter” task that removes all references to the log system when compiling the production libraries and applications. This has the benefit of reducing the final size and also the empty calls.
The debug versions are compiled without the commenter, so they keep the call, and the application in debug mode is also linked with the logimpl-console lib so the output is shown.
I’m reviewing some information that Stefan has kindly sent me, and we will be dedicating more resources to the BB compatibility soon. We’re dealing with carriers in Spain and they have a strong interest with BB.
I can not still put a release date for the new storage library, but I can tell that it has bubbled up a lot in our feature plan, so it will probably be the next thing to address.
Nevertheless, with the current implementation the storage library applies compression when it detects a limit below 1Mb, and you could expect a gain of between 30% and 40%. It is not enough for many cases but it’s a small relief.
I’ll keep you informed, and we will also release beta versions when they became available so you can try them.
Thanks for your comments and collaboration.
Stefan
Hi bobohund,

thanks for the directions
I used the SVN Source and re-did my code for generating the Database and it works perfectly now
Right now I’m experimenting a bit on how much of my entries I can get into a database without the RecordStore throwing RecordStoreFullException.
After that I’ll see if I can split the tables properly and still be able to handle it as a single table in my application
Narciso Cerezo
Hi Stefan & Sebastian,
Did you made any changes to te code to make it work on the BB?
We’re preparing a contributor agreement, and we are willing to accept new developers for the project.
Think about it
As for the storage engine with file splitting, I’ve just remembered that about 2 years ago we tried to create a MIDP implementation to run on top of CDC (in order to make it work on Windows Mobile, as the IBM MIDP/CLDC runtime was very buggy but the Personal Profile/CDC seemed to work well). For that, we created implementations for the lcdui and rms packages. That project finally died, but I think that rms implementation can be easily adapted to create a file-splitting implementation of the storage engine.
with file splitting.
I’ll check out, we might come up really fast with a storage library
bobohund
Hi Narciso,
i got the database to work on BB simulator, but i haven’t made tests on a real device yet. No modifications to your sources where necessary, but i imported your sources into JDE to build and deploy them successfully. Currently i don’t know any way to just include prebuild jar files into an blackberry cldc application so this was the easyiest way to go.
Narciso Cerezo
Hi Sebastian,
Thanks for the info. Stefan reported the same, but I think that he has tested it on a real BB device.
We’ll investigate on how to use the prebuilt libraries for BB, but the important thing is that you can use it, no matter how.
Stefan
I didn’t test it on a real device yet, but I will as soon as i get my current code running again ;P Did some coding this morning, but wasn’t able to test it yet.
I’ll get back to you as soon as i can.
Stefan
I can now confirm, that the database works on a real device.
After getting my code working again I loaded the Application onto my BB and it worked exactly as it was in the simulator.
Narciso Cerezo
Great!
Very good news, and thanks for the information.
We hope to be able to give you a new storage engine for overriding the limitations.
Next week will be a busy one with the 3GSM show, but the next one we’ll try to give you an approximate release date.
Stefan
I also filed 2 Bug Reports on Sourceforge so you could include the fixes for them in the next release.
I’ve been trying to get around any limitations myself. It’s messy right now but kinda works. I didn’t touch your code at all, maybe that’s why it’s a bit messy. As I have to work with that I get from your public functions
I’ll see what I can come up with which may be handy and actually usable ;P
Narciso Cerezo
Thanks again, Stefan.
We’ll review the bugs and fix them for the next release.
sigma12
I am not sure whether this is the right forum to post this question but I want to know that when I create a database using openbasemovil, where is the database file store (1) when I am using nokia S60 emulator to test and (2) on the device. I mean at which location the database is created. Will appreciate any pointers.
Narciso Cerezo
Hi sigma12,
The database storage engine uses the RMS, so the actual location and contents vary a lot between devices.
I can’t tell you exactly where the S60 emulator places the files. Sun WTK’s and emulators based on it by various manufacturers store the rms files in the appdb folder. For WTK 2.2 it was just beneath the root instalation folder of the WTK, for WTK 2.5.2 a folder called j2mewtk is created on the user home folder, and the appdb folder is on it.
On the device, usually the rms files are not accessible due to security constraints.
But on Symbian phones it is possible to get to them. For 2nd edition devices they are placed in the same folder of the .jar file and it is a single file that can be more or less viewed with an hexadecimal editor. For 3rd edition devices, this was improved and it is more difficult to actually view the contents of the file.
In fact, with 2nd edition phones you could move the data file from one device to another and it will work, but that doesn’t work for 3rd edition.
Of course, you need FExplorer or similar software on Symbian to view the internal filesystem.
We will provide in the future a file based storage, but probably only for BlackBerry, since the file storage has many drawbacks in terms of security and API access (applications need to be signed).
sigma12
Hi Narciso Cerezo,
Thanks for your reply. It is quite helpful indeed. Is it possible to access this database created on Symbian phone (S60) 3rd edition and transfer it to a PC?
I have a database on PC (server) and I want to create a java module to synchronize it with the database present on symbian device. Do you think it is possible?
Thanks in advance for your inputs.
Narciso Cerezo
Hi sigma12,
What you are looking for is exactly what we do with BaseMovil, the framework from which OpenBaseMovil was born.
OpenBaseMovil has all the features (in fact we are migrating BaseMovil to sit on top of OpenBaseMovil) but synchronization.
We offer synchronization services in a variety of ways and business models, and you can even try them free.
Please, contact me for more information: narciso /at/ elondra /dot/ com
Regards,
Narciso
jdonadob
Help me please.
I’m trying to use the method Find of the class Table but doesn’t work. I do the same of the tutorial but empty RowSet is returned.
row = tabla.find( “User”, “ADMIN” )
User is the field name and ADMIN is the word I’m looking for.
What is happening ?
Thank You.
Narciso Cerezo
Hello jdonadob,
The find method will do only an exact match, and depending on the way you declared the index on the User field it will be case insensitive or not.
Check the case sensitive parameter when creating the index.
Also, if you want to find a word inside the field content instead of an exact match, you can use the findFuzzy method which will look over the index contents for words starting with ADMIN. In this case the index should be created as full text, so it will index the words separately instead of the full field contents.
All of this is explained in the quick start guide and in the database developer guide, where you can find examples for the different index types and finder methods.
Hope that helps.
jdonadob
Thanks for answer.
I created the table on this way:
Estructura = new Table( Tabla );
Estructura.addColumn(“User”, bm.db.Constants.FT_STRING, 25, false, null);
Estructura.addColumn(“Password”, bm.db.Constants.FT_STRING, 25, false, null);
BaseDatos.createTable( Estructura );
Estructura.close();
Estructura = BaseDatos.getTable(Tabla);
Estructura.createIndex( “Primary”, “User” );
Registro = Estructura.createRow();
Registro.setField( FieldIndex( “User”, Estructura ) , “ADMIN” );
Registro.setField( FieldIndex( “Password”, Estructura ), “12345″ );
Registro.save();
I tried several ways and this is unique one that worked, the other ways throw error.
Then I look for as follows:
row = tabla.find( “User”, “ADMIN” );
and the row variable, which is of type RowSet, is returned with no rows.
jdonadob
I’m sorry, I forgot one thing.
The FieldIndex function was created by me. It returns de Id of the field which match with the name passed by parameter. I did it on that way becouse if I put the field name in the setField method then it throws error; it only works if I put the Id and no the field name.