Providing custom ModelAdapter implementation using ExtensionCompoment doesn't work.
misqu23 Sep 16, 2010 9:21 AMHi
In our application for simplicity we don't use dto. We are using jpa entites in the client/server communication, but using this approach we have to use library such as gilead for proper clonning and merging entities. We have been using gilead with gwt-dispatcher and I'm trying to use it with errai as well.
I looked into the errai-persistenc e code and I'm trying to write my own extension component which will provide our GileadModelAdapter.
Below there is the code snippet of our PersistenceErraiExtension and GileadModelAdapter :
import java.util.logging.Logger; import org.jboss.errai.bus.client.api.ResourceProvider; import org.jboss.errai.bus.client.framework.ModelAdapter; import org.jboss.errai.bus.server.annotations.ExtensionComponent; import org.jboss.errai.bus.server.api.ErraiConfig; import org.jboss.errai.bus.server.api.ErraiConfigExtension; /** * @author Marcin Misiewicz * */ @ExtensionComponent public class PersistenceErraiExtension implements ErraiConfigExtension { private final static Logger log = Logger.getLogger(PersistenceErraiExtension.class.getName()); /* (non-Javadoc) * @see org.jboss.errai.bus.server.api.ErraiConfigExtension#configure(org.jboss.errai.bus.server.api.ErraiConfig) */ @Override public void configure(ErraiConfig config) { log.info("Configuring persistence extension."); //Map<Class<?>, ResourceProvider> extensionBindings = new HashMap<Class<?>, ResourceProvider>(); final ModelAdapter modelAdapter = new GileadModelAdapter(); ResourceProvider<ModelAdapter> modelAdapterProvider = new ResourceProvider<ModelAdapter>() { @Override public ModelAdapter get() { return modelAdapter; } }; log.info("adding binding for: "+modelAdapter.getClass()); config.addBinding(ModelAdapter.class, modelAdapterProvider); } }
import java.util.logging.Logger; import org.jboss.errai.bus.client.framework.ModelAdapter; /** * @author Marcin Misiewicz * */ public class GileadModelAdapter implements ModelAdapter { private final static Logger log = Logger.getLogger(GileadModelAdapter.class.getName()); /* (non-Javadoc) * @see org.jboss.errai.bus.client.framework.ModelAdapter#clone(java.lang.Object) */ @Override public Object clone(Object entity) { log.info("Cloning entity"); return null; } /* (non-Javadoc) * @see org.jboss.errai.bus.client.framework.ModelAdapter#merge(java.lang.Object) */ @Override public Object merge(Object dto) { log.info("Merging dto"); return null; } }
As you can see the code is very simple. Right know I only want to check if loading extension works.
Of course extension is loaded during the bootstrap of the errai :
14:40:39,239 INFO [Errai] Starting Errai Service 14:40:41,082 INFO [OrderedBootstrap] Bootstrap Errai 14:40:41,110 INFO [DefaultComponents] using dispatcher implementation: org.jboss.errai.bus.server.SimpleDispatcher 14:40:41,141 INFO [DefaultComponents] using session provider implementation: org.jboss.errai.bus.server.HttpSessionProvider 14:40:41,187 INFO [LoadExtensions] beging searching for Errai extensions ... 14:40:41,213 INFO [LoadExtensions] found extension org.jboss.errai.tools.monitoring.MonitorExtension 14:40:46,374 INFO [LoadExtensions] found extension pl.scentia.smartoffice.persistence.server.utils.PersistenceErraiExtension 14:40:46,388 INFO [PersistenceErraiExtension] Configuring persistence extension. 14:40:46,403 INFO [PersistenceErraiExtension] adding binding for: class pl.scentia.smartoffice.persistence.server.utils.GileadModelAdapter 14:40:46,405 INFO [LoadExtensions] added extension binding: org.jboss.errai.bus.client.framework.ModelAdapter 14:40:46,405 INFO [LoadExtensions] total extension binding: 1 14:40:46,492 INFO [DiscoverServices] auto-discovery of services disabled. 14:40:46,493 INFO [BootstrapContext] Running deferred bootstrap tasks ... 14:40:46,493 INFO [OrderedBootstrap] Bootstrap complete. Ready to rumble!
As you can see extension is loaded, but unfortunately when I call rpc services I can't see the messages coming from GileadModelAdapter. I thought that for some reason errai still uses NoopModelAdapater which is default ModelAdapter but adding loging messages to the clone and merge operations of the NoopModelAdapter also doesn't produce any log messages.
So it seems that providing custom implementation of the model adapter is still in development, am I right ?
If not please tell what am I doing wrong ?
Regards