簡體   English   中英

Jboss,Infinispan,如何將Jboss配置為托管緩存管理器

[英]Jboss ,Infinispan, How to configure Jboss As managed cache manager

我試圖在我的應用程序中使用Jboss AS管理的Infinispan ,以便可以使用Jboss Admin console進行管理。 我根據Infinispan文檔嘗試了以下步驟,

1)創建一個名為Config的類

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,僅用於制作Config對象並調用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)在名為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)從我的應用程序中刪除了所有與Infinispan相關的罐子

但是,當我嘗試從servel調用printObject()方法時,它正在打印null

13:37:24,206 INFO [stdout](http--127.0.0.1-9090-1) defaultCacheManager:null

為什么會發生這種情況,如果我身邊錯過任何事情,請糾正我。

試試這個

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

要么

這是一個示例代碼:

Config.java:

它的定義是在服務器啟動時初始化的托管Bean,其默認構造函數稱為在其引用存儲在靜態字段中以從應用程序中的任何位置訪問它的默認構造函數。

Config類必須為單例。 不要在代碼中的任何位置調用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();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM