very slow connection from client to server
blackwolff Feb 25, 2009 8:59 AMHi,
why does the client always needs so much time (about 5-10 seconds) to get a connection to the jboss server? Even if I try to connect to the server the second or third time.
The client runs on a Windows-System, the JBoss-Server on a Linux-System.
If I do the same things with JBoss on Windows all works fine.
public class MyClass {
public Object getSession() throws NamingException {
Object theObject = MyCache.getInstance().getSessionWithKey(getSessionName());
if(theObject == null) {
theObject = getFromJNDI("MyEAR/" + getSessionName" + "/remote");
MyCache.getInstance().setSessionWithKey(getSessionName(), theObject);
}
return theObject;
}
private String getSessionName() {
return "MySession";
}
private Object getFromJNDI(String name) throws NamingException {
Context ctx = null;
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
try {
ctx = getInitialContext();
if (ctx == null)
return null;
return ctx.lookup(name);
} catch (NamingException ne) {
throw ne;
}
finally {
try {
ctx.close();
} catch (NamingException ne1) {}
}
}
private Context getInitialContext() throws NamingException {
try {
Properties properties = new Properties();
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.PROVIDER_URL, "jnp://anIpAdress:1099");
return new InitialContext(properties);
} catch (NamingException namingexception) {
throw namingexception;
}
}
}
public class MyCache
{
private static MyCache inst = null;
private HashMap sessionCache = new HashMap();
private MyCache() {
super();
}
public static MyCache getInstance() {
if(inst == null)
inst = new MyCache();
return inst;
}
public Object getSessionWithKey(String aName) {
Object sessionObject = (Object)getSessionCache().get(aName);
return sessionObject;
}
public void setSessionWithKey(String aName, Object anObject) {
getSessionCache().put(aName, anObject);
}
public void clear() {
setSessionCache(new HashMap());
}
public HashMap getSessionCache() {
return sessionCache;
}
public void setSessionCache(HashMap sessionCache) {
this.sessionCache = sessionCache;
}
}
public interface MySession {
public Collection doSomething();
}
@Stateless(mappedName = "MySession", name = "MySession")
@Remote(MySession.class)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MySessionBean implements MySession {
@PersistenceContext
EntityManager em;
public Collection doSomething() {
return new ArrayList();
}
}