2016-03-01 1 views
1

Я пытаюсь улучшить свои услуги с помощью Entity Data Filtering Dynamic and Configurable Query Parameters. Все ресурсы правильно реагируют на GET. Когда я выполняю методы POST, сервер зависает. На сервере приложений не хватает памяти.Джерси с выбираемой фильтрацией объектов перестает отвечать без SELECT по URI

ВОПРОС: Кто-то знает, почему это происходит? Я делаю что-то неправильно?

EDIT: С помощью LoggingFilter.class активирована возможность видеть ответ подтверждения в других ситуациях, а не только с помощью методов POST.

  • Работы

    (GET)/отдых/домен/Entity/1? Выберите = идентификатор, имя

  • сервер перестает отвечать на запросы

    (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

После некоторой отладки сотрудник обнаружил, что происходит, потому что у меня есть двунаправленные сущности.

Допустим, мы имеем клиентов е Адрес:

@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.

Смежные вопросы