我花了2天做什麼,但試圖讓Infinispan的在集羣環境中工作,它不工作。我不想運行單獨的infinispan服務器,我只想將其嵌入到在羣集Glassfish上運行的應用程序中。這不可能嗎?我有一個示例JSF應用程序,您可以將值加載到應該位於緩存中的映射中。我拉起一個集羣實例,添加值,它們顯示出來。但是當我去到另一個集羣實例時,它將地圖顯示爲空。的Infinispan:clustred情況下不共享緩存
我知道我做錯了什麼,我只是不知道是什麼。一直在尋找互聯網,並沒有關於如何使其工作的綜合教程。
配置(從教程coppied,理應顯示集羣http://www.mastertheboss.com/infinispan/infinispan-tutorial-part-2/page-2):
<infinispan>
<global>
<transport clusterName="demoCluster"/>
<globalJmxStatistics enabled="true"/>
</global>
<default>
<jmxStatistics enabled="true"/>
<clustering mode="distribution">
<hash numOwners="2" rehashRpcTimeout="120000"/>
<sync/>
</clustering>
</default>
</infinispan>
語境收聽:
package hazelcache.test;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;
@WebListener()
public class Listener implements ServletContextListener
{
EmbeddedCacheManager manager;
@Override
public void contextInitialized(ServletContextEvent sce)
{
try
{
manager = new DefaultCacheManager("config.xml");
manager.start();
sce.getServletContext().setAttribute("cacheManager", manager);
}
catch (IOException ex)
{
Logger.getLogger(Listener.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce)
{
manager.stop();
}
}
豆:
package hazelcache.test;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;
@ManagedBean(name="clusterTest")
public class ClusteredCacheBean extends CacheTestBean
{
EmbeddedCacheManager manager;
public ClusteredCacheBean() throws IOException
{
System.out.println("Before setStuffz()");
manager = (EmbeddedCacheManager) ((ServletContext)FacesContext.getCurrentInstance().
getExternalContext().getContext()).getAttribute("cacheManager");
setStuffz(manager.getCache("stuffz"));
System.out.println("After setStuffz()");
}// end ClusteredCacheBean()
private static EmbeddedCacheManager createCacheManagerProgramatically() {
return new DefaultCacheManager(GlobalConfigurationBuilder.defaultClusteredBuilder().build());
}
@Override
public String addToCache()
{
String forwardTo = null;
manager.getCache("stuffz").put(getId(), getName());
return forwardTo;
}// end addToCache()
@Override
public List getStuffzList()
{
System.out.println("Stuffz: " + getStuffz().size());
return new LinkedList(manager.getCache("stuffz").entrySet());
}
}// end class ClusteredCacheBean
我真的不知道是什麼在這一點上做...
您沒有包含setStuffz和getStuffz的源代碼。我也看不到任何使用createCacheManagerProgramatically或addToCache。 –
createCacheManagerProgramatically未使用。 addToCache從jsf調用。
public Map getStuffz() { return stuffz; } public void setStuffz(Map stuffz) { this.stuffz = stuffz; } – Creature