这是问题所在:
我有一个Dynamic Web Application
,这里有一个sessions
列表作为静态字段,并且我现在正在研究将来可能出现的群集问题。
我想将我的静态HashMap
移到一个可以独立于服务器访问的地方,换句话说,一旦我有2台服务器,并且其中一个具有静态HashMap
的服务器死了,那么另一台服务器应该能够使用HashMap
缓存恢复infinispan
,不会因服务器故障而丢失。
因此,我尝试实现一些EmbededCacheManager
和一些CashContainers
,但是在大多数情况下,我遇到了一个问题,就是我无法将infinispan
jar添加到我的项目中,而无法使用怪胎的缓存。
我四处搜寻,但找不到找到将依赖项添加到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;
独立文件
<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中找到了您需要的与
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
}
}
这将允许您使用直接从缓存中获取的会话列表。
希望我能帮到你。否则,祝您好运,您将需要它:)
关于java - 如何在我的WEB应用程序中启用infinispan缓存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48749143/