Restlet 2.0.11增加线程数

时间:2012-02-15 04:04:49

标签: java restlet-2.0

我正在尝试使用restlet 2.0.11运行服务器,但服务器由于线程太多而放弃。 有人可以通过一个例子来帮助我增加服务器的线程数吗?

try
{
    Server server = new Server(Protocol.HTTP, m_iPort, ContentProvider.class);
    server.start();
}
catch (Exception e)
{
    e.printStackTrace();
}

我搜索了一个样本,但是

getContext().getParameters().add("maxThreads", "512"); 

给我空指针异常。

2 个答案:

答案 0 :(得分:1)

Eric的回答对于Restlet 2.0.11可能是正确的,但由于这仍然是Google对Restlet maxThreads的最高匹配,我认为我应该发布更新。

我不知道改变了什么版本的Restlet / Jetty,但Restlet 2.3.7不再遵守maxThreads和minThreads设置。你现在必须打电话

server.getContext().getParameters().add("threadPool.maxThreads", "256");

据我所知,这可能是Jetty项目中的一个化妆品重构,是一个喜欢清理代码的贡献者,而不考虑用户在升级库时会遇到什么。此外,Jetty似乎根本没有警告您无效的参数。它只是默默地忽略它们。这正是您不希望看到的自由形式String-String参数。

答案 1 :(得分:0)

要在org.restlet.Server的实例上设置更高maxThreads,您可以获取org.restlet.Server的实例作为其创建时返回的实例,然后获取其Context,获取参数列出并使用整数分配新属性maxThreads,如下所示:

import org.restlet.Component;
import org.restlet.Server;
//...
Server server = mycomponent.getServers().add(Protocol.HTTP, "localhost", 9090);
server.getContext().getParameters().add("maxThreads", "512");

看起来你的错误是你正在抓取Component或Java程序本身的上下文属性,并且自然地分配参数将被忽略。

富勒示例:

http://www.programcreek.com/java-api-examples/index.php?api=org.restlet.data.Protocol

案例链接中的整个程序出现故障:

package carpool.serverMain;

import java.util.ArrayList; 

import org.json.JSONObject; 
import org.restlet.Component; 
import org.restlet.Server; 
import org.restlet.data.Protocol; 

import carpool.common.DebugLog; 
import carpool.configurations.CarpoolConfig; 
import carpool.configurations.EnumConfig.Gender; 
import carpool.dbservice.LocationDaoService; 
import carpool.factory.JSONFactory; 
import carpool.service.*; 



public class ServerMain { 

 //private static Log log = LogFactory.getLog(ServiceMain.class); 

 private static ServerMain me; 

 private Component component; 

 public void init(String[] arguments) { 

 } 

 /**
  * Start the Thread, accept incoming connections 
  *  
  * Use this entry point to start with embedded HTTP Server 
  *  
  * @throws Exception 
  */ 
 public void start() throws Exception { 
  component = new Component(); 

  // Add a new HTTP server listening on port 

  Server server = component.getServers().add(Protocol.HTTP, 8015); 
  server.getContext().getParameters().add("maxThreads", "256"); 

  // Attach the sample application 
  RoutingService routingService = new RoutingService(); 

  component.getDefaultHost().attach(routingService); 

  // Start the component. 
  //log.info("ready to start"); 
  DebugLog.d("ready to start"); 
  component.start(); 

 } 

 /**
  * Stops RESTlet application 
  */ 
// public void stop() { 
//  component.getDefaultHost().detach(component.getApplication()); 
// } 

 public static ServerMain getInstance() { 
  if (me == null) { 
   me = new ServerMain(); 
  } 

  return me; 
 } 



 public static void main(String... args) throws Exception { 
  CarpoolConfig.initConfig(); 
  DebugLog.initializeLogger(); 
  LocationDaoService.init(); 
  DebugLog.d("Excuting"); 
  // Load server logic 
  try { 
   ServerMain.getInstance().init(args); 
   ServerMain.getInstance().start(); 
  } catch (Exception e) { 
   //log.error("Failed to start server", e); 
  } 
  Thread thread = new CleanThreadService(); 
  thread.start(); 
 } 

}