[英]How to enable infinispan cache in my WEB application?
這是問題所在:
我有一個Dynamic Web Application
,這里有一個sessions
列表作為一個靜態字段,並且我現在正在研究將來可能出現的群集問題。
我想將我的靜態HashMap
移到一個可以獨立於服務器訪問的地方,換句話說,一旦我有2台服務器,並且其中一台具有靜態HashMap
的服務器消失,另一台服務器應該能夠使用以下方法恢復HashMap
在infinispan
緩存中,不會因服務器故障而丟失。
因此,我嘗試實現一些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.