2014-03-07 77 views
2

我想在我的应用程序中使用Jboss AS托管Infinispan,以便我可以使用Jboss Admin console来管理它。 我试图基于Infinispan的文档的以下步骤,Jboss,Infinispan,如何配置Jboss作为托管缓存管理器

1)创建名为配置

import javax.annotation.Resource; 
import javax.enterprise.context.ApplicationScoped; 
import javax.enterprise.inject.Produces; 

import org.infinispan.manager.EmbeddedCacheManager; 

public class Config { 
    @Produces 
    @ApplicationScoped 
    @Resource(lookup = "java:jboss/infinispan/test") 
    private EmbeddedCacheManager defaultCacheManager; 

    public void printObject() { 
     System.out.println("defaultCacheManager:" + defaultCacheManager); 
    } 
} 

2)创建一个servlet类只是用于制备配置对象并调用printObject()方法

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class TestServlet extends HttpServlet { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 3200037917839533696L; 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     doIt(req, resp); 
    } 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     doIt(req, resp); 
    } 

    protected void doIt(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     try { 
      Config config = new Config(); 
      config.printObject(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

3)经由standalone.xml全局配置增加了应用依赖性

<subsystem xmlns="urn:jboss:domain:ee:1.0"> 
     <global-modules> 

      <module name="org.infinispan" slot="main"/> 
      <module name="javax.enterprise.api" slot="main"/> 
      <module name="javax.faces.api" slot="main"/> 
      <module name="javax.inject.api" slot="main"/> 
      <module name="javax.annotation.api" slot="main"/> 
     </global-modules> 
</subsystem> 

4)从我的应用程序

但是,删除了所有的Infinispan相关罐子当我尝试调用printObject()从servel方法是子系统名为test

<subsystem xmlns="urn:jboss:domain:infinispan:1.2" default-cache-container="test"> 
     <cache-container name="test" default-cache="entity" start="EAGER"> 
      <local-cache name="entity"/> 
     </cache-container> 
</subsystem> 

5)增加了新的高速缓存容器打印

13:37:24206 INFO [标准输出](HTTP - 127.0.0.1-9090-1)defaultCacheManager:空

为什么发生这种情况,如果有任何事情从我身边漏掉,请纠正我。

+0

请看看我的答案。它正在为我工​​作,我也在我的正在运行的应用程序中使用它。让我知道是否有任何问题,或者您需要根据您的要求进行一些修改。 – Braj

回答

6

试试这个

@Resource(lookup = "java:jboss/infinispan/container/test") 
private EmbeddedCacheManager defaultCacheManager; 

或者

这里是一个示例代码:

Config.java:定义为托管bean

它是在时间初始化服务器启动的默认构造函数被调用,其引用被存储在一个静态字段中以便从一个字段访问它在应用程序中的地方。

配置类必须为单例。不要在代码中的任何地方拨打new Config()。它由服务器自己创建。

只要需要在应用程序中调用Config.getInstance()

它还处理缺少配置的情况(在开发机器上)。

import java.io.Serializable; 
import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 

import org.infinispan.Cache; 
import org.infinispan.configuration.cache.CacheMode; 
import org.infinispan.configuration.cache.ConfigurationBuilder; 
import org.infinispan.manager.CacheContainer; 
import org.infinispan.manager.DefaultCacheManager; 
import org.infinispan.manager.EmbeddedCacheManager; 

@ManagedBean(name = "Config", eager = true) 
@ApplicationScoped 
public class Config { 

    @Resource(name = "java:jboss/infinispan/container/test") 
    private CacheContainer container; 

    private Cache<String, Object> entityCache = null; 

    private static Config configInstance = null; 

    public Config() { 
     configInstance = this; 
    } 

    @PostConstruct 
    public void start() { 
     entityCache = container.getCache("entity"); 
    } 

    public static Config getInstance() { 
     if (configInstance == null) { 
      createInstance(); 
     } 
     return configInstance; 
    } 

    public Cache<String, Object> getEntityCache() { 
     return entityCache; 
    } 

    private static void createInstance() { 
     configInstance = new Config(); 

     if (configInstance.container == null) { 
      ConfigurationBuilder confBuilder = new ConfigurationBuilder(); 
      confBuilder.clustering().cacheMode(CacheMode.LOCAL); 

      EmbeddedCacheManager cacheManager = new DefaultCacheManager(confBuilder.build()); 
      cacheManager.start(); 

      configInstance.container = cacheManager; 
     } 
     configInstance.start(); 
    } 

} 
+1

谢谢。我已经试过你的答案,并正在努力。但我可以看到你正在使用Jsf。我是新注释的东西,所以我正在对此进行一些研究。另外,我不明白为什么Infinispan文档http://infinispan.org/docs/6.0.x/user_guide/user_guide.html#_use_a_jboss_as_7_configured_cache中给出的示例不是很好。让我更多地研究这个Mbean概念,然后我会更新这个。 –

+0

好极了,最后它为你工作。其实我也在我的正在运行的应用程序中使用这个存根,并且它完美地工作。祝你好运... – Braj

相关问题