2014-01-06 38 views
2

MAX_CONNECTIONS属性设置为(无限数目的连接),但仍是EMS服务器不断吐出这tibemsd.log连接失败:达到最大连接数0

[管理员:somehost]:连接失败:达到最大连接数0

这怎么可能?

谢谢!

+0

听起来像Tibco EMS试图保护自己。您是否尝试过使用公共池进行连接池? – rjdkolb

回答

0

任何有兴趣,

它似乎有最多256个管理连接,可以同时打开到EMS服务器的限制。 由于某种原因,此限制显然不受max_connections属性的控制。

下面是一个小例子来验证这一点。

import com.tibco.tibjms.admin.TibjmsAdmin; 
public class AdminConnectionTest{ 
public static void main(String args[}){ 
    int counter =0; 
    try{ 
    for(int i=0;i<1000;i++){ 
    TibjmsAdmin admin = new TibjmsAdmin("tcp://localhost:7222","someuser","someuser"); 
    counter++; 
    } 

    }catch(Exception e){ 
    System.out.println("Connections created: "+counter); 
    System.out.println(e.getMessage()); 
    try{ 
    Thread.sleep(20000); //Some delay to make it possible to verify this from emsadmin 
    }catch(Exception ee){System.out.println(ee.getMessage());} 
    } 
} 
} 
0

为了保护客户端免于连接服务器,我写了一个简单的commons pool2类。

import com.tibco.tibjms.admin.TibjmsAdmin; 
import com.tibco.tibjms.admin.TibjmsAdminException; 
import org.apache.commons.pool2.PooledObject; 
import org.apache.commons.pool2.PooledObjectFactory; 
import org.apache.commons.pool2.impl.DefaultPooledObject; 

public class TibcoAdminPoolableObjectFactory implements PooledObjectFactory<TibjmsAdmin>{ 
    @Override 
    public PooledObject<TibjmsAdmin> makeObject() throws Exception { 
     TibjmsAdmin admin = new TibjmsAdmin("tcp://tibco:7222","USER","password"); 
     return new DefaultPooledObject<>(admin); 
    } 
    @Override 
    public void destroyObject(PooledObject<TibjmsAdmin> po) throws Exception { 
     po.getObject().close(); 
    } 
    @Override 
    public boolean validateObject(PooledObject<TibjmsAdmin> po) { 
     try { 
      po.getObject().getQueue("xyzabc"); 
     } catch (TibjmsAdminException ex) { 
      System.out.println(ex.getMessage()); 
      return false; 
     } 
     return true; 
    } 
    @Override 
    public void activateObject(PooledObject<TibjmsAdmin> po) throws Exception {} 
    @Override 
    public void passivateObject(PooledObject<TibjmsAdmin> po) throws Exception {} 
} 

GenericObjectPool<TibjmsAdmin> pool = new GenericObjectPool<>(new TibcoAdminPoolableObjectFactory()); 
TibjmsAdmin admin = pool.borrowObject(); 
QueueInfo infos[] = admin.getQueues("YOURQUEUE"); 
pool.returnObject(admin);//in a finally block