簡體   English   中英

如何在我的WEB應用程序中啟用infinispan緩存?

[英]How to enable infinispan cache in my WEB application?

這是問題所在:

我有一個Dynamic Web Application ,這里有一個sessions列表作為一個靜態字段,並且我現在正在研究將來可能出現的群集問題。

我想將我的靜態HashMap移到一個可以獨立於服務器訪問的地方,換句話說,一旦我有2台服務器,並且其中一台具有靜態HashMap的服務器消失,另一台服務器應該能夠使用以下方法恢復HashMapinfinispan緩存中,不會因服務器故障而丟失。

因此,我嘗試實現一些EmbededCacheManager和一些CashContainers ,但是在大多數情況下,我遇到了一個問題,就是我無法將infinispan jar添加到我的項目中,而無法使用infinispan緩存。

我四處搜尋,但找不到將依賴項添加到我的WEB項目中的方法。 網上的所有教程(例如本教程): http : //infinispan.org/docs/stable/getting_started/getting_started.html ,都在使用Maven,但我沒有。 我需要一個免費的Maven解決方案。

另外,我的代碼:

static List<Session> sessions = new ArrayList<Session>(); 

我想工作的是:

@Resource(lookup = "java:jboss/infinispan/container/myCache")
public CacheContainer myCache;

但是我根本做不到。 我在網上搜索了一下,發現我需要將infinispan依賴項添加到MANIFEST.MF文件中的項目中,一旦完成,就需要這樣:

Manifest-Version: 1.0
Dependencies: org.infinispan export

我將manifest文件夾添加到src \\ META-INF文件夾中(我也創建了該文件夾,因為它不存在),現在可以導入infinispan.cache

但是然后,我無法構建我的整個項目,在我添加的部分中,它始終在我的standalone.xml文件中顯示一些錯誤。

這是代碼:

<subsystem xmlns="urn:jboss:domain:infinispan:4.0">
        <cache-container name="myCache" default-cache="default" module="org.wildfly.clustering.server">
            <transport lock-timeout="60000"/>
            <replicated-cache name="sessions" mode="SYNC">
            </replicated-cache>
        </cache-container>
        ...
<\subsystem>

在控制台中,WildFly 10 btw是一行寫的,顯示出現問題的行和列,問題出在第二行和第四列(我不知道第四列在哪里,因為standalone.xml的前幾個字符是制表符...?)

希望您能解決我的問題,因為我不知道下一步該怎么做。 謝謝。

好的,我按照您的步驟進行了一些更改,

Java的:

@Resource(lookup = "java:jboss/infinispan/container/myCache")
public CacheContainer myCache;

Standalone.xml

<replicated-cache name="sessions" mode="SYNC">
      <transaction mode="BATCH"/>   //added this line
</replicated-cache>

另外,在同一個standalone.xml文件中,由於缺少jgroup子系統的依賴關系而出現錯誤

<subsystem xmlns="urn:jboss:domain:jgroups:4.0">

解決方案是,我在standalone-full-ha.xml中找到了與jgroup有關的所有依賴jgroups ,然后將它們全部復制到了standalone.xml (我建議他為該任務建立Total Commander,工具比較兩個文件)

您的MANIFEST.MF文件是正確的,並且他在src / META-INF文件夾中的位置也是正確的。

我曾經在infinispan遇到過類似的問題,所有問題都與Maven及其依賴項有關,但是有一個解決方法。

您需要進入wildfly文件夾,在該文件夾中找到module \\ system \\ layers \\ base \\ org \\ infinispan \\ main文件夾,在其中找到以下文件:infinispan-core-8.2.4.Final(也許是其他版本),然后您必須轉到:Wildfly \\ module \\ system \\ layers \\ base \\ org \\ infinispan \\ commons \\ main那里,您將找到此文件:infinispan-commons-8.2.4.Final(也許是其他版本)

這些文件是您的wildfly使用的文件(顯然是:)),它們具有所需的infinispan函數的正確版本。

將兩個文件都復制到WEB / WebContent / WEB-INF / lib(我確定您還有其他jar)。如果還有其他infinispan jar,請將其刪除,因為使用與服務器相同的版本很重要。

完成后,您可以執行以下操作:

Java的:

private List<Session> sessions() {
    Cache<Integer, List<Session>> c = myCache.getCache("sessions");
    // since you List is not a HashMap, you will need to make sure that
    // you get this right
    List<Session> l = c.get(1); // this returns the List, but with the key 1, read all the code, you will understand
    if (l != null) { // if its ok, then return the list
        return l;
    } else { // you need to make sure the list exist in the cache, just for the first time, all the other times, l will be different then null
        l = new ArrayList<Session>(); // make an empty list
        c.put(1, l); //add it to the cache
        return l; // use the list as you wish
    }
}

這將允許您使用直接從緩存中獲取的會話列表。

希望我能為您服務。 否則,祝您好運,您將需要它:)

暫無
暫無

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

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