After investigating into the source, I'll notice that changing from
com.google.gwt.event.shared.EventBus to
com.google.web.bindery.event.shared.EventBus is a way to work it out,
the above compiler's error get disappeared, but I also need to update
the method fire() in CurrentUserChangedEvent class too.
// old
// public static void fire(HasHandlers source, CurrentUser
currentUser) {
// source.fireEvent(new CurrentUserChangedEvent(currentUser));
//
// }
// new
public static void fire(EventBus eventBus, CurrentUser
currentUser) {
eventBus.fireEvent(new CurrentUserChangedEvent(currentUser));
}
The compiler compiles successfully, after I run puzzlebazzar, a run-
time error comes into life unexpectedly:
C:\Users\varman\devwork\projects\webapp\puzzlebazar-nb\puzzlebazar>ant
devmode
Buildfile: C:\Users\varman\devwork\projects\webapp\puzzlebazar-nb
\puzzlebazar\build.xml
libs:
javac:
[javac] C:\Users\varman\devwork\projects\webapp\puzzlebazar-nb
\puzzlebazar\build.xml:53: warning
: 'includeantruntime' was not set, defaulting to
build.sysclasspath=last; set to false for repeatabl
e builds
devmode:
[java] Mar 25, 2012 9:54:58 PM
com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl exec
ute
[java] WARNING: Service exception while executing
com.puzzlebazar.shared.action.GetCurrentUserA
ction: Service exception executing action "GetCurrentUserAction",
java.lang.NullPointerException: No
API environment is registered for this thread.
[java] com.gwtplatform.dispatch.shared.ServiceException: Service
exception executing action "Ge
tCurrentUserAction", java.lang.NullPointerException: No API
environment is registered for this threa
d.
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchIm
pl.java:161)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.execute(AbstractDispatchImpl
.java:111)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl.execute(AbstractDispa
tchServiceImpl.java:81)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
569)
[java] at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServ
let.java:208)
[java] at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServ
let.java:248)
[java] at
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemote
ServiceServlet.java:62)
[java] at
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
[java] at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[java] at
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:
263)
[java] at
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:
178)
[java] at
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.j
ava:91)
[java] at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.ja
va:62)
[java] at
com.gwtplatform.dispatch.server.AbstractHttpSessionSecurityCookieFilter.doFilter(
AbstractHttpSessionSecurityCookieFilter.java:67)
[java] at
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:
163)
[java] at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.ja
va:58)
[java] at
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.ja
va:118)
[java] at
com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
[java] at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java
:1088)
[java] at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
360)
[java] at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
[java] at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
[java] at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
729)
[java] at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
[java] at
org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:
49)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
[java] at org.mortbay.jetty.Server.handle(Server.java:324)
[java] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
505)
[java] at org.mortbay.jetty.HttpConnection
$RequestHandler.content(HttpConnection.java:843)
[java] at
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
[java] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
[java] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
[java] at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
395)
[java] at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:488)
[java] Caused by: java.lang.NullPointerException: No API
environment is registered for this thr
ead.
[java] at
com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreAp
iHelper.java:86)
[java] at
com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(Da
tastoreApiHelper.java:96)
[java] at
com.google.appengine.api.datastore.Key.<init>(Key.java:104)
[java] at
com.google.appengine.api.datastore.Key.<init>(Key.java:92)
[java] at
com.google.appengine.api.datastore.KeyFactory.createKey(KeyFactory.java:
72)
[java] at com.googlecode.objectify.Key.<init>(Key.java:80)
[java] at com.googlecode.objectify.Key.<init>(Key.java:67)
[java] at
com.googlecode.objectify.impl.AsyncObjectifyImpl.get(AsyncObjectifyImpl.java:
143)
[java] at
com.googlecode.objectify.impl.ObjectifyImpl.get(ObjectifyImpl.java:81)
[java] at
com.puzzlebazar.server.model.UserDAO.getOrCreateSession(UserDAO.java:
316)
[java] at
com.puzzlebazar.server.model.UserDAO.getSessionUserKey(UserDAO.java:
103)
[java] at
com.puzzlebazar.server.model.UserDAO.getSessionUser(UserDAO.java:113)
[java] at
com.puzzlebazar.server.handler.GetCurrentUserActionHandler.execute(GetCurrentUser
ActionHandler.java:47)
[java] at
com.puzzlebazar.server.handler.GetCurrentUserActionHandler.execute(GetCurrentUser
ActionHandler.java:32)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchIm
pl.java:153)
[java] ... 38 more
[java] Mar 25, 2012 9:55:09 PM
com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl exec
ute
[java] WARNING: Service exception while executing
com.puzzlebazar.shared.action.GetCurrentUserA
ction: Service exception executing action "GetCurrentUserAction",
java.lang.NullPointerException: No
API environment is registered for this thread.
[java] com.gwtplatform.dispatch.shared.ServiceException: Service
exception executing action "Ge
tCurrentUserAction", java.lang.NullPointerException: No API
environment is registered for this threa
d.
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchIm
pl.java:161)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.execute(AbstractDispatchImpl
.java:111)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl.execute(AbstractDispa
tchServiceImpl.java:81)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
569)
[java] at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServ
let.java:208)
[java] at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServ
let.java:248)
[java] at
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemote
ServiceServlet.java:62)
[java] at
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
[java] at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[java] at
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:
263)
[java] at
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:
178)
[java] at
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.j
ava:91)
[java] at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.ja
va:62)
[java] at
com.gwtplatform.dispatch.server.AbstractHttpSessionSecurityCookieFilter.doFilter(
AbstractHttpSessionSecurityCookieFilter.java:67)
[java] at
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:
163)
[java] at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.ja
va:58)
[java] at
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.ja
va:118)
[java] at
com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
[java] at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java
:1088)
[java] at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
360)
[java] at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
[java] at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
[java] at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
729)
[java] at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
[java] at
org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:
49)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
[java] at org.mortbay.jetty.Server.handle(Server.java:324)
[java] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
505)
[java] at org.mortbay.jetty.HttpConnection
$RequestHandler.content(HttpConnection.java:843)
[java] at
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
[java] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
[java] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
[java] at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
395)
[java] at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:488)
[java] Caused by: java.lang.NullPointerException: No API
environment is registered for this thr
ead.
[java] at
com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreAp
iHelper.java:86)
[java] at
com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(Da
tastoreApiHelper.java:96)
[java] at
com.google.appengine.api.datastore.Key.<init>(Key.java:104)
[java] at
com.google.appengine.api.datastore.Key.<init>(Key.java:92)
[java] at
com.google.appengine.api.datastore.KeyFactory.createKey(KeyFactory.java:
72)
[java] at com.googlecode.objectify.Key.<init>(Key.java:80)
[java] at com.googlecode.objectify.Key.<init>(Key.java:67)
[java] at
com.googlecode.objectify.impl.AsyncObjectifyImpl.get(AsyncObjectifyImpl.java:
143)
[java] at
com.googlecode.objectify.impl.ObjectifyImpl.get(ObjectifyImpl.java:81)
[java] at
com.puzzlebazar.server.model.UserDAO.getOrCreateSession(UserDAO.java:
316)
[java] at
com.puzzlebazar.server.model.UserDAO.getSessionUserKey(UserDAO.java:
103)
[java] at
com.puzzlebazar.server.model.UserDAO.getSessionUser(UserDAO.java:113)
[java] at
com.puzzlebazar.server.handler.GetCurrentUserActionHandler.execute(GetCurrentUser
ActionHandler.java:47)
[java] at
com.puzzlebazar.server.handler.GetCurrentUserActionHandler.execute(GetCurrentUser
ActionHandler.java:32)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchIm
pl.java:153)
[java] ... 38 more
[java] Mar 25, 2012 9:55:20 PM
com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl exec
ute
[java] WARNING: Service exception while executing
com.puzzlebazar.shared.action.GetCurrentUserA
ction: Service exception executing action "GetCurrentUserAction",
java.lang.NullPointerException: No
API environment is registered for this thread.
[java] com.gwtplatform.dispatch.shared.ServiceException: Service
exception executing action "Ge
tCurrentUserAction", java.lang.NullPointerException: No API
environment is registered for this threa
d.
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchIm
pl.java:161)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.execute(AbstractDispatchImpl
.java:111)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl.execute(AbstractDispa
tchServiceImpl.java:81)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
569)
[java] at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServ
let.java:208)
[java] at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServ
let.java:248)
[java] at
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemote
ServiceServlet.java:62)
[java] at
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
[java] at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[java] at
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:
263)
[java] at
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:
178)
[java] at
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.j
ava:91)
[java] at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.ja
va:62)
[java] at
com.gwtplatform.dispatch.server.AbstractHttpSessionSecurityCookieFilter.doFilter(
AbstractHttpSessionSecurityCookieFilter.java:67)
[java] at
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:
163)
[java] at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.ja
va:58)
[java] at
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.ja
va:118)
[java] at
com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
[java] at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java
:1088)
[java] at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
360)
[java] at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
[java] at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
[java] at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
729)
[java] at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
[java] at
org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:
49)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
[java] at org.mortbay.jetty.Server.handle(Server.java:324)
[java] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
505)
[java] at org.mortbay.jetty.HttpConnection
$RequestHandler.content(HttpConnection.java:843)
[java] at
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
[java] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
[java] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
[java] at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
395)
[java] at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:488)
[java] Caused by: java.lang.NullPointerException: No API
environment is registered for this thr
ead.
[java] at
com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreAp
iHelper.java:86)
[java] at
com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(Da
tastoreApiHelper.java:96)
[java] at
com.google.appengine.api.datastore.Key.<init>(Key.java:104)
[java] at
com.google.appengine.api.datastore.Key.<init>(Key.java:92)
[java] at
com.google.appengine.api.datastore.KeyFactory.createKey(KeyFactory.java:
72)
[java] at com.googlecode.objectify.Key.<init>(Key.java:80)
[java] at com.googlecode.objectify.Key.<init>(Key.java:67)
[java] at
com.googlecode.objectify.impl.AsyncObjectifyImpl.get(AsyncObjectifyImpl.java:
143)
[java] at
com.googlecode.objectify.impl.ObjectifyImpl.get(ObjectifyImpl.java:81)
[java] at
com.puzzlebazar.server.model.UserDAO.getOrCreateSession(UserDAO.java:
316)
[java] at
com.puzzlebazar.server.model.UserDAO.getSessionUserKey(UserDAO.java:
103)
[java] at
com.puzzlebazar.server.model.UserDAO.getSessionUser(UserDAO.java:113)
[java] at
com.puzzlebazar.server.handler.GetCurrentUserActionHandler.execute(GetCurrentUser
ActionHandler.java:47)
[java] at
com.puzzlebazar.server.handler.GetCurrentUserActionHandler.execute(GetCurrentUser
ActionHandler.java:32)
[java] at
com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchIm
pl.java:153)
[java] ... 38 more
-----------------------------------------
Please help me to solve it, I really really really would like to learn
this demo application right from the source code; because I know there
are lots of the best practices are all there; they could explain me
well.