2014-03-07 76 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

相關問題