private GenericMessageListener loadListener(String serverKey, Element server) throws GenericServiceException { String serverName = server.getAttribute("jndi-server-name"); String jndiName = server.getAttribute("jndi-name"); String queueName = server.getAttribute("topic-queue"); String type = server.getAttribute("type"); String userName = server.getAttribute("username"); String password = server.getAttribute("password"); String className = server.getAttribute("listener-class"); if (UtilValidate.isEmpty(className)) { if (type.equals("topic")) className = JmsListenerFactory.TOPIC_LISTENER_CLASS; else if (type.equals("queue")) className = JmsListenerFactory.QUEUE_LISTENER_CLASS; } GenericMessageListener listener = listeners.get(serverKey); if (listener == null) { synchronized (this) { listener = listeners.get(serverKey); if (listener == null) { ClassLoader cl = this.getClass().getClassLoader(); try { Class<?> c = cl.loadClass(className); Constructor<GenericMessageListener> cn = UtilGenerics.cast( c.getConstructor( ServiceDispatcher.class, String.class, String.class, String.class, String.class, String.class)); listener = cn.newInstance(dispatcher, serverName, jndiName, queueName, userName, password); } catch (Exception e) { throw new GenericServiceException(e.getMessage(), e); } if (listener != null) listeners.put(serverKey, listener); loadable++; } } } if (listener != null && !listener.isConnected()) { listener.load(); if (listener.isConnected()) connected++; } return listener; }