Quantcast
Channel: Apache Timeline
Viewing all articles
Browse latest Browse all 5648

wicket-atmosphere EventBus.post throwing Null pointer exception sometime

$
0
0
Hi,
Recently I am stuck with problem of Wicket-atmosphere and it seems to be
very strange to me.
In my application, I am publishing data through Hazelcast and after
HazelCast receives data, it uses wicket atmosphere's EventBus.post() method
to push the data and then methods with @subscribe annotation receives the
same and process. Now it's working fine but sometime it's giving nullpointer
exception. There is no proper scenario when EventBus.post() will through
null pointer exception but suddenly it's giving nullpointer exception for
few EventBus.post() and after few exception EventBus.post() again start
working. This become very strange thing to me now. I am giving all the code
below. Please help me to identify the issue why I am getting the error.

*hazelcast.verison = 2.2
wicket-atmosphere.version = 0.5
atmosphere.version = 1.0.4*

*Web.xml*

<servlet>
<servlet-name>wicket</servlet-name>

<servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>WebPortal</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>configuration</param-name>
<param-value>deployment</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.useWebSocket</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.useNative</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>org.atmosphere.cpr.sessionSupport</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>filterMappingUrlPattern</param-name>
<param-value>/ssp/*</param-value>
</init-param>
<init-param>

<param-name>org.atmosphere.cpr.broadcastFilterClasses</param-name>

<param-value>org.atmosphere.client.TrackMessageSizeFilter</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

*atmosphere.xml*

<atmosphere-handlers>
<atmosphere-handler context-root="/*"
class-name="org.atmosphere.handler.ReflectorServletProcessor">
<property name="filterClassName"
value="org.apache.wicket.protocol.http.WicketFilter" />
</atmosphere-handler>
</atmosphere-handlers>

*WebPortal object:*

public class WebPortal extends AuthenticatedWebApplication {

public WebPortal() {

EventBus eventbus = new EventBus(this);
HazelcastBroadcaster bc = (HazelcastBroadcaster)
BroadcasterFactory.getDefault()
.get(HazelcastBroadcaster.class, "confEvnt");
bc.setApplication(this);
bc.getBroadcasterConfig().addFilter(new
TrackMessageSizeFilter());
bc.getBroadcasterConfig().setBroadcasterCache(new
HeaderBroadcasterCache());

*HazelcastBroadcaster*

public class HazelcastBroadcaster extends AbstractBroadcasterProxy {

private ITopic topic;
private WebApplication application;
private static HazelcastInstance hazelcastInstance =
SspHazelcast.getInstance();

public HazelcastBroadcaster(String id, AtmosphereConfig config) {
this(id, URI.create("http://localhost:6379"), config);

public HazelcastBroadcaster(String id, URI uri, AtmosphereConfig
config) {
super(id, uri, config);

@Override
public void incomingBroadcast() {
topic.addMessageListener(new MessageListener<String>() {
@Override
public void onMessage(Message<String> message) {
String stringMessage = message.getMessageObject();
EventBus.get(application).post(stringMessage);

});

*Hazelcast.xml:*

<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config
hazelcast-basic.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group>
<name>ssp</name>
<password>ssp-pass</password>
</group>
<network>
<port auto-increment="true">7301</port>
<join>
<tcp-ip enabled="true">
<interface>127.0.0.1</interface>
</tcp-ip>
</join>
<interfaces enabled="true">
<interface>127.0.0.1</interface>
</interfaces>
</network>
</hazelcast>

*Exception:*

java.lang.NullPointerException
at
org.apache.wicket.protocol.http.servlet.ServletWebRequest.getContextRelativeUrl(ServletWebRequest.java:207)
at
org.apache.wicket.protocol.http.servlet.ServletWebRequest.getClientUrl(ServletWebRequest.java:161)
at
org.apache.wicket.atmosphere.AtmosphereWebRequest.getClientUrl(AtmosphereWebRequest.java:104)
at org.apache.wicket.request.UrlRenderer.<init>(UrlRenderer.java:63)
at
org.apache.wicket.request.cycle.RequestCycle.newUrlRenderer(RequestCycle.java:145)
at
org.apache.wicket.request.cycle.RequestCycle.getUrlRenderer(RequestCycle.java:170)
at
org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.renderHead(AbstractDefaultAjaxBehavior.java:96)
at
org.apache.wicket.ajax.AjaxEventBehavior.renderHead(AjaxEventBehavior.java:79)
at org.apache.wicket.Component.renderHead(Component.java:2700)
at
org.apache.wicket.ajax.AbstractAjaxResponse.writeHeaderContribution(AbstractAjaxResponse.java:465)
at
org.apache.wicket.ajax.XmlAjaxResponse.writeComponent(XmlAjaxResponse.java:101)
at
org.apache.wicket.ajax.AbstractAjaxResponse.writeComponents(AbstractAjaxResponse.java:214)
at
org.apache.wicket.ajax.AbstractAjaxResponse.writeTo(AbstractAjaxResponse.java:145)
at
org.apache.wicket.ajax.AjaxRequestHandler.respond(AjaxRequestHandler.java:363)
at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:830)
at
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:97)
at
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:253)
at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
at
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:281)
at org.apache.wicket.atmosphere.EventBus.post(EventBus.java:241)
at org.apache.wicket.atmosphere.EventBus.post(EventBus.java:212)
at
com.ericsson.ssp.common.messaging.SSPHazelcastBroadcaster$1.onMessage(SSPHazelcastBroadcaster.java:139)
at
com.hazelcast.impl.ListenerManager.callListener(ListenerManager.java:418)
at
com.hazelcast.impl.ListenerManager.callListeners(ListenerManager.java:333)
at com.hazelcast.impl.BaseManager$2.run(BaseManager.java:1357)
at
com.hazelcast.impl.executor.ParallelExecutorService$ParallelExecutorImpl$ExecutionSegment.run(ParallelExecutorService.java:212)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

*One more point. *

org.apache.wicket.atmosphere.@Subscribe method is written on top of a method
and multiple object of the same class can exist. So, my Eventbus.post will
notify all the object contains subscribe method.

Viewing all articles
Browse latest Browse all 5648

Trending Articles