2016-03-01 66 views
1

我試圖通過Entity Data Filtering Dynamic and Configurable Query Parameters來改進我的服務。所有資源都在GET上正確響應。當我執行POST方法時,服務器凍結。 App Server內存不足。具有可選實體篩選功能的Jersey在沒有選擇URI的情況下停止響應

問題:有人知道爲什麼會發生這種情況?我做錯了什麼?

編輯:使用LoggingFilter.class激活它可能在其他情況下看到確認響應,而不僅僅是使用POST方法。

  • 作品

    GET)/休息/結構域/實體/ 1?選擇= ID,名字

  • 服務器停止響應

    GET)/休息/ domain/Entity/1

在第二個請求中,服務器收到它並且LoggingFilter顯示狀態碼200.所以我認爲這個問題在編組器上。

CONFIG:

該應用程序部署在WSO2 AS 5.2.1。

ApplicationConfig類:

@javax.ws.rs.ApplicationPath("rest") 
public class ApplicationConfig extends ResourceConfig { 

    public ApplicationConfig() { 

     property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true); 
     property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true); 
     property(MarshallerProperties.BEAN_VALIDATION_MODE, BeanValidationMode.NONE); 

     register(SelectableEntityFilteringFeature.class); 
     property(SelectableEntityFilteringFeature.QUERY_PARAM_NAME, "select"); 

     register(new MoxyJsonConfig().setFormattedOutput(true).resolver()); 

    } 
} 

error.log中

java.lang.OutOfMemoryError: Java heap space 
     at org.eclipse.persistence.core.queries.CoreAttributeGroup.newItem(CoreAttributeGroup.java:711) 
     at org.eclipse.persistence.core.queries.CoreAttributeGroup.getItem(CoreAttributeGroup.java:488) 
     at org.eclipse.persistence.core.queries.CoreAttributeGroup.addAttribute(CoreAttributeGroup.java:178) 
     at org.eclipse.persistence.core.queries.CoreAttributeGroup.addAttribute(CoreAttributeGroup.java:144) 
     at org.eclipse.persistence.internal.jaxb.ObjectGraphImpl.addAttributeNodes(ObjectGraphImpl.java:36) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:131) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:114) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createObjectGraph(MoxyObjectProvider.java:90) 
     at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.transform(MoxyObjectProvider.java:76) 

回答

0

一些調試的同事發現後發生,因爲我有雙向實體。

比方說,我們有客戶E地址:

@Entity 
public class Customer { 

    @Id 
    private long id; 

    @OneToOne(mappedBy="customer", cascade={CascadeType.ALL}) 
    private Address address; 

} 

@Entity 
public class Address implements Serializable { 

    @Id 
    private long id; 

    @OneToOne 
    @JoinColumn(name="ID") 
    @MapsId 
    @XmlInverseReference(mappedBy="address") 
    private Customer customer; 

} 

在這種情況下,可選擇的過濾器會忽略@XmlInverseReference當它試圖建立ObjectGraph和它去OOM。

相關問題