/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.cluster.cache.bean;
import org.jboss.cache.Cache;
import org.jboss.cache.CacheException;
import org.jboss.cache.Fqn;
import org.jboss.cache.Node;
import org.jboss.cache.config.Configuration;
import org.jboss.cache.lock.IsolationLevel;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
/**
* Proxy to the TreeCache MBean. Mainly used to be able to transport transactions from a test
* client to a TreeCache.
*
* @version $Revision: 81036 $
* @ejb.bean type="Stateful"
* name="test/TreeCacheTester"
* jndi-name="ejb/test/TreeCacheTester"
* view-type="remote"
* @ejb.transaction type="Supports"
*/
public class TreeCacheTesterBean implements SessionBean
{
/** The serialVersionUID */
private static final long serialVersionUID = 171897143867111119L;
Cache cache = null;
/**
* @throws CreateException
* @ejb.create-method
*/
public void ejbCreate() throws CreateException
{
log("I'm being created");
}
/**
* @param cluster_name
* @param props
* @param caching_mode
* @throws CreateException
* @ejb.create-method
*/
public void ejbCreate(String cluster_name,
String props,
int caching_mode) throws CreateException
{
try {
// cache=new TreeCache(cluster_name, props, 10000);
Configuration config = new Configuration();
config.setClusterName(cluster_name);
config.setClusterConfig(props);
config.setCacheMode(Configuration.legacyModeToCacheMode(caching_mode));
config.setTransactionManagerLookupClass("org.jboss.cache.JBossTransactionManagerLookup");
//cache = DefaultCacheFactory.getInstance().createCache(config);
} catch (Exception e) {
throw new CreateException(e.toString());
}
}
// /**
// *
// * @param name
// * @ejb.create-method
// */
// public void ejbCreate(String name) throws CreateException {
// MBeanServer server=null;
// ObjectName cache_service;
//
// try {
// this.name=name;
// cache_service=ObjectName.getInstance(name);
//
// // is this the right way to get hold of the JBoss MBeanServer ?
// List servers=MBeanServerFactory.findMBeanServer(null);
// if(servers == null || servers.size() == 0)
// throw new CreateException("TreeCacheTesterBean.ejbCreate(): no MBeanServers found");
// server=(MBeanServer)servers.get(0);
// cache=(TreeCacheMBean)MBeanProxy.create(TreeCacheMBean.class, cache_service, server);
// }
// catch(Exception ex) {
// throw new CreateException(ex.toString());
// }
// }
public void ejbActivate()
{
}
public void ejbPassivate()
{
}
public void ejbRemove()
{
log("I'm being removed");
if (cache != null) {
cache.stop();
cache.destroy();
cache = null;
}
}
public void setSessionContext(SessionContext ctx)
{
}
/**
* @return
* @ejb.interface-method
*/
public Vector getMembers()
{
List members = cache.getMembers();
return members == null ? null : new Vector(members);
}
/**
* @param mode
* @ejb.interface-method
*/
public void setCacheMode(int mode) throws Exception
{
cache.getConfiguration().setCacheMode(Configuration.legacyModeToCacheMode(mode));
}
/**
* @param level
* @ejb.interface-method
*/
public void setIsolationLevel(IsolationLevel level)
{
cache.getConfiguration().setIsolationLevel(level);
}
/**
* @param fqn
* @return
* @ejb.interface-method
*/
public Set getKeys(String fqn) throws CacheException
{
Node node = cache.getRoot().getChild(Fqn.fromString(fqn));
return node == null ? null : node.getKeys();
}
/**
* @param fqn
* @param key
* @return
* @ejb.interface-method
*/
public Object get(String fqn, String key) throws CacheException {
return cache.get(Fqn.fromString(fqn), key);
}
/**
* @param fqn
* @return
* @ejb.interface-method
*/
public boolean exists(String fqn)
{
return cache.getRoot().hasChild(Fqn.fromString(fqn));
}
/**
* @param fqn
* @param data
* @throws Exception
* @ejb.interface-method
*/
public void put(String fqn, Map data) throws Exception
{
cache.put(Fqn.fromString(fqn), data);
}
/**
* @param fqn
* @param key
* @param value
* @return
* @throws Exception
* @ejb.interface-method
*/
public Object put(String fqn, String key, Object value) throws Exception
{
return cache.put(Fqn.fromString(fqn), key, value);
}
/**
* @param fqn
* @throws Exception
* @ejb.interface-method
*/
public void remove(String fqn) throws Exception
{
cache.removeNode(Fqn.fromString(fqn));
}
/**
* @param fqn
* @param key
* @return
* @throws Exception
* @ejb.interface-method
*/
public Object remove(String fqn, String key) throws Exception
{
return cache.remove(Fqn.fromString(fqn), key);
}
// /**
// * @param fqn
// * @ejb.interface-method
// */
// public void releaseAllLocks(String fqn)
// {
// cache.releaseAllLocks(fqn);
// }
//
// /**
// * @param fqn
// * @return
// * @ejb.interface-method
// */
// public String print(String fqn)
// {
// return cache.print(fqn);
// }
/**
* @param fqn
* @return
* @ejb.interface-method
*/
public Set getChildrenNames(String fqn) throws CacheException
{
Node node = cache.getRoot().getChild(Fqn.fromString(fqn));
return (node == null ? null : node.getChildrenNames());
}
// /**
// * @return
// * @ejb.interface-method
// */
// public String printDetails()
// {
// return cache.printDetails();
// }
//
// /**
// * @return
// * @ejb.interface-method
// */
// public String printLockInfo()
// {
// return cache.printLockInfo();
// }
/**
* @ejb.interface-method
* @param members
* @param method
* @param args
* @param synchronous
* @param exclude_self
* @param timeout
* @return
* @throws Exception
*/
// public List callRemoteMethods(Vector members, Method method, Object[] args,
// boolean synchronous, boolean exclude_self,
// long timeout) throws Exception {
// return cache.callRemoteMethods(members, method, args, synchronous,
// exclude_self, timeout);
// }
/**
* @param members
* @param method_name
* @param types
* @param args
* @param synchronous
* @param exclude_self
* @param timeout
* @return
* @throws Exception
* @ejb.interface-method
*/
// public List callRemoteMethods(Vector members, String method_name, Class[] types,
// Object[] args, boolean synchronous,
// boolean exclude_self, long timeout) throws Exception {
// return cache.callRemoteMethods(members, method_name, types, args,
// synchronous, exclude_self, timeout);
// }
private void log(String msg)
{
System.out.println("-- [" + Thread.currentThread().getName() + "]: " + msg);
}
}