infinispan cache.put() throws null pointer exception even when values put are not null

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-13 00:23:52

问题


trying to add content to infinispan cache and I get null pointer exception when i use the put method. Mine is a JSF web application. We are trying to achieve session replication using wildfly 13.

import org.infinispan.Cache;
public class index extends AbstractPageBean implements java.io.Serializable {
    @Resource(lookup = "java:jboss/infinispan/cache/web/web_repl")  
    Cache<String, String> ilsCache;  
    public Cache<String, String> getCache() {
        return ilsCache;
    }

    public void prerender() {
        ilsCache.put("Message", "Hello");
        logger.info("CACHE " + getCache());
    }

Log file

2018-08-21 14:21:57,134 ERROR [biz.autoscan.ils.index] (default task-1) index.java::Exception occured  : java.lang.NullPointerException
    at biz.autoscan.ils.index.btnLogin_action(index.java:930)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
    at java.lang.Thread.run(Thread.java:745)

Any idea why I still get null pointer exception fro cache.put()?

Edit: We are using WildFly 13 in domain mode and Infinispan in replication mode. My aim is to store the session object in the infinispan cache and share it between all the nodes.

Infinispan subsystem in domain.xml: This is how I have configured infinispan. We are using only two servers at the moment hence we have gone with replication mode.

<subsystem xmlns="urn:jboss:domain:infinispan:6.0">
    <cache-container name="web" aliases="ilsee" default-cache="web_repl" module="org.wildfly.clustering.web.infinispan">
        <transport channel="ee" lock-timeout="60000"/>
        <local-cache name="Username"/>
        <replicated-cache name="web_repl">
            <transaction mode="BATCH"/>
        </replicated-cache>
        <distributed-cache name="dist">
            <transaction mode="NON_XA"/>
            <file-store/>
        </distributed-cache>
    </cache-container>
</subsystem>

回答1:


The answer depends on how you configure your server.

I will provide a generic example. First, you need to configure your standalone.xml file

<subsystem xmlns="urn:infinispan:server:core:9.2">
 <cache-container module="org.infinispan.extension:ispn-9.2" name="infinispan_container" default-cache="default">
   <transport/>
   <global-state/>
   <distributed-cache name="default"/>
   <distributed-cache name="myCache"/>
 </cache-container>
</subsystem>

Then in your Java application, you need to inject the resource using

@Resource(lookup = "java:jboss/datagrid-infinispan/container/infinispan_container/cache/myCache")
Cache cache;

As you can see infinispan_container and myCache are values that you provided in the XML configuration file.

There are two possible ways for your application to utilize Infinispan within Wildfly: embedded mode and server mode. You can find more information http://infinispan.org/docs/stable/user_guide/user_guide.html#usage_3



来源:https://stackoverflow.com/questions/51944012/infinispan-cache-put-throws-null-pointer-exception-even-when-values-put-are-no

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!