reference_modules_java - NibiruOS/mobile GitHub Wiki

Java

The ar.com.oxen.nibiru.mobile.java project contains common classes that are shared among platforms that are Java-based. This includes Android, even when it is not Java-based, strictly speaking. Currently, the only platform that does not use classes from this project is GWT.

Generic cross components

Asynchronous callbacks

When making an async server call, Java code needs to spawn a new thread (diferently from GWT, where this is done automatically. However, due to UI rendering lifecycle, Vaadin platform needs to make server calls synchronous (because Vaadin UI protcol is already asynchrnous). Since Vaadin code executes on the server, the response for an async call to other server would not be notified to the browser.

A potential solution would be implementing a push approach. However, this is quite complex and requires extra network usage. A simpler solution is abstracting thread creation to allow both, synchronous and asynchronous calls.

AsyncManager interface was created with this goal in mind. It has 2 implementations:

Inversion of control

The ar.com.oxen.nibiru.mobile.java.ioc package provides default Guice-based configuration modules. Currently, the only one is DefaultJavaModule.

Unified API components

Event handling

The ar.com.oxen.nibiru.mobile.java.event.guava package provides a Guava-based EventBus implementation.

Classes implementing this are GuavaEvent and GuavaEventBus.

HTTP requests

The ar.com.oxen.nibiru.mobile.java.http.httpclient package provides an Apache HTTP Components implementation for HttpManager. Apache HTTP Client is provided natively by Android, so using this library we can take advantage of this.

The class implementing this functionality is HttpClientHttpManager

Object serialization

JSON serialization is provided using Jackson processor. The ar.com.oxen.nibiru.mobile.java.serializer.jackson package contains this implementation (JacksonSerializer). JSON serialization is configured using an org.codehaus.jackson.map.ObjectMapper instance. If you need yo customize serialization, you can write a javax.inject.Provider<ObjectMapper> for this class.

User interface

i18n

The ar.com.oxen.nibiru.mobile.java.ui.i18n contains classes used for internationalization.

The MessageInvocationHandler class is used, in conjuntion with a Java proxy, in order to read messages from a resource bundle according to method name. This way, interfaces for i18n messages can be used on both, GWT and Java. This approach unifies both models.

MessageProvider is responsible for creating such proxy.