unable to call getKeys using JNDI
---------------------------------
Key: JBCACHE-84
URL: http://jira.jboss.com/jira/browse/JBCACHE-84
Project: JBoss Cache
Type: Bug
Versions: 1.2
Reporter: Bela Ban
Assigned to: Bela Ban
Priority: Minor
Fix For: 1.2.1
I an unable to call getKeys on a TreeCache. I get the Cache by doing a JNDI
lookup. Once I get it I can do a put and get with no problem. When I call
getKeys I get an NotSerializableException on java.util.HashMap$KeySet.
Here is my JUnit test and results..
| package com.cexp.common.enterprise;
|
| import java.util.Set;
| import java.util.Collection;
| import java.util.Iterator;
|
| import junit.framework.TestCase;
|
| import org.apache.commons.logging.Log;
| import org.apache.commons.logging.LogFactory;
| import org.jboss.cache.TreeCacheMBean;
| import javax.naming.NameNotFoundException;
| import javax.naming.InitialContext;
| import javax.naming.NameParser;
| import javax.naming.NamingException;
| import javax.naming.Context;
| import javax.naming.Name;
|
|
| /** Simple tests for the ContextFramework.
| * @author kkalmbac
| *
| */
| public class TestCache extends TestCase {
| /** the logger. */
| private static Log log = LogFactory.getLog(TestCache.class);
| private InitialContext context;
| private TreeCacheMBean theCache;
| public static Object lookup(Context context, Name name)
| throws NamingException
| {
| // Try the lookup twice because, if the naming server has gone down,
| // the jndi connection in the context is stale and doesn't seem to
| // get recreated until after the first lookup attempt. The second
| // lookup attempt will then succeed.
|
| int lookupCount = 0;
| int lookupAttempts = 2;
|
| while (lookupCount++ < lookupAttempts)
| {
| try
| {
| if(log.isDebugEnabled()){
| log.debug("lookup() name=" + name);
| }
| return context.lookup(name);
| }
| catch (NamingException e)
| {
| if(log.isDebugEnabled()){
| log.debug("lookup() NamingException", e);
| }
| if (lookupCount == lookupAttempts)
| throw e;
| }
| }
|
| return null;
| }
| public static Object lookup(Context context, String name)
| throws NamingException
| {
| NameParser parser = context.getNameParser(context.getNameInNamespace());
| return lookup(context, parser.parse(name));
| }
|
| protected InitialContext getContext() {
| if (context == null) {
| try {
| context = new InitialContext();
| } catch (Exception e) {
| log.error("could not get initial context", e);
| }
| }
|
| return context;
| }
|
| private TreeCacheMBean getCache() {
| if (log.isDebugEnabled())
| {
| log.debug("getCache()");
| }
|
| if (theCache == null)
| {
| try
| {
| theCache = (TreeCacheMBean)lookup(getContext(),
"MyTreeCache");
| if (log.isDebugEnabled())
| {
| log.debug("cache found " + theCache);
| }
| }
| catch (NameNotFoundException e)
| {
| }
| catch (Exception e)
| {
| }
| }
|
| return theCache;
| }
| /** Constructor.
| * @param s the test name
| */
| public TestCache(String s) {
| super(s);
|
| System.setProperty(
| "java.naming.factory.initial",
| "org.jnp.interfaces.NamingContextFactory");
| System.setProperty(
| "java.naming.factory.url.pkgs",
| "org.jboss.naming:org.jnp.interfaces");
| System.setProperty(
| "jnp.socketFactory",
| "org.jnp.interfaces.TimedSocketFactory");
| System.setProperty("java.naming.provider.url", "jnp://localhost:1099");
| System.setProperty("jnp.timeout", "0");
| System.setProperty("jnp.sotimeout", "0");
|
|
| }
|
| /** Simple tests for the UserContext. */
| public void testGetKeys() {
| TreeCacheMBean cache = getCache();
| try {
| cache.put("/","Test","value");
| Object o = cache.get("/", "Test");
| System.out.println("We got " + o);
| Set s = cache.getKeys("/");
| } catch (Exception e) {
| e.printStackTrace();
| }
| }
| }
|
Here is the results..
| We got value
| java.lang.reflect.UndeclaredThrowableException
| at $Proxy0.getKeys(Unknown Source)
| at com.cexp.common.enterprise.TestCache.testGetKeys(TestCache.java:135)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:324)
| at junit.framework.TestCase.runTest(TestCase.java:154)
| at junit.framework.TestCase.runBare(TestCase.java:127)
| at junit.framework.TestResult$1.protect(TestResult.java:106)
| at junit.framework.TestResult.runProtected(TestResult.java:124)
| at junit.framework.TestResult.run(TestResult.java:109)
| at junit.framework.TestCase.run(TestCase.java:118)
| at junit.framework.TestSuite.runTest(TestSuite.java:208)
| at junit.framework.TestSuite.run(TestSuite.java:203)
| at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392)
| at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276)
| at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167)
| Caused by: java.io.NotSerializableException: java.util.HashMap$KeySet
| at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
| at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
| at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
| at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
| at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
| at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
| at
org.jboss.remoting.RemoteMethodInvocationResult.<init>(RemoteMethodInvocationResult.java:47)
| at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:284)
| at
org.jboss.remoting.transport.socket.SocketServerInvoker$Client.run(SocketServerInvoker.java:208)
|
Any help at all would be appreciated.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
JBoss-Development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-development