2012-09-13 32 views
3

我们正在使用Grizzly和Jersey构建Web服务,并通过网络搜索一路学习。我们注意到启动一个灰熊网络服务器的两种不同的方式,但没有看到一种方式是否比另一种更好。任何人都可以帮忙吗?什么是启动GrizzlyWebServer的最佳方式?

1 - 使用GrizzlyWebContainerFactory:

public static void main(String[] args) throws IOException { 
Map initParams = new HashMap(); 
initParams.put("com.sun.jersey.config.property.packages", "net.gilstraps.server"); 
SelectorThread selector = GrizzlyWebContainerFactory 
.create("http://localhost:9998/", initParams); //noinspection ResultOfMethodCallIgnored 
System.in.read(); 
threadSelector.stopEndpoint(); 
System.exit(0); 
} 
} 

2 - 使用GrizzlyWebServer

GrizzlyWebServer gws = new GrizzlyWebServer(8080, "/var/www"); 

// Jersey web resources 
ServletAdapter jerseyAdapter = new ServletAdapter(); 
jerseyAdapter.addInitParameter("com.sun.jersey.config.property.packages", 
"com.example"); 
jerseyAdapter.setContextPath("/jersey"); 
jerseyAdapter.setServletInstance(new ServletContainer()); 

// Another non-Jersey servlet 
ServletAdapter simpleServletAdapter = new ServletAdapter(); 
simpleServletAdapter.setContextPath("/simple"); 
simpleServletAdapter.setServletInstance(new SimpleServlet()); 

// register all above defined adapters 
gws.addGrizzlyAdapter(jerseyAdapter, new String[] {"/jersey"}); 
gws.addGrizzlyAdapter(simpleServletAdapter, new String[] {"/simple"}); 

// let Grizzly run 
gws.start(); 

那么哪种方式更好?

由于 --Alex

回答

1

起初我使用您的方法#1,但然后一旦我需要提供一个更复杂的配置中,我发现我需要法#2来访问该对象GrizzlyWebServer 。

例如使用GrizzlyWebServer,您可以控制工作线程池的大小。 (我应该注意Grizzly docs只建议这样做是你有IO界限的工作要完成)。

grizzlyWebServer.setCoreThreads(30); 
grizzlyWebServer.setMaxThreads(50); 

我无法找到一个方法来调整与方法#1线程池的大小,因此,我建议你的方法#2,以提高可配置性。

0

起初我使用的是方法#1,但是一旦我需要提供更复杂的配置,我发现我需要方法#2来访问ServletAdapter对象。

例如使用ServletAdapter我们可以设置它是否必须在启动时加载。

jerseyAdapter.setProperty("load-on-startup", 1);

相关问题