通过AppEngine调整Jersey的加载时间

时间:2013-03-08 15:52:23

标签: java google-app-engine jersey java-ws

我的应用程序服务无法启动或响应甚至预热请求,因为Jersey扫描库所用的时间过长。

我创建了应用程序并硬编码了泽西资源的所有路径。

<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.livily.rest.JerseyApplication</param-value>
</init-param>

泽西岛应用程序拥有所有类

public Set<Class<?>> getClasses()
{
Set<Class<?>> s = new HashSet<Class<?>>();
s.add(com.livily.rest.visitor.UserRatingUtil.class);
}

然而,球衣正在扫描很多提供者

Mar 8, 2013 3:39:40 PM com.sun.jersey.core.spi.component.ProviderServices getServiceClasses
CONFIG:     Provider found: class com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$StringConstructor

这样做大约50-100次然后

Mar 8, 2013 3:39:41 PM com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller createResource
FINEST: A new abstract resource created by IntrospectionModeler: AbstractResource("/current-status", - CurrentStatus: 1 constructors, 0 fields, 0 setter methods, 1 res methods, 0 subres methods, 0 subres locators )

每一个

总时间约为4-10秒,而appengine并不喜欢这样,因为它希望快速包裹装载;否则它会开始发出奇怪的500错误(甚至是静态文件)。

我很难过;任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我使用packages属性来命名应扫描哪些包,如下所示......

    <init-param>
         <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>com.foo.myproviders</param-value>
    </init-param>

答案 1 :(得分:1)

设置 jersey.config.disableAutoDiscovery 。有关详细信息,请参阅Configuration Properties

<init-param>
    <param-name>jersey.config.disableAutoDiscovery</param-name>
    <param-value>true</param-value>
</init-param>