2014-12-02 8 views
2

У меня есть приложение, которое я распространяю, чтобы предоставить REST API. Все отлично работает в основном сайте, но я получаю следующее в журнале исключений, когда я пытаюсь попасть в REST API:не удалось лениво инициализировать коллекцию ..., не удалось инициализировать прокси - нет сеанса

"Error","ajp-bio-8014-exec-3","12/02/14","12:54:06","table","failed to lazily initialize a collection of role: field, could not initialize proxy - no Session The specific sequence of files included or processed is: service.cfc'' " 
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: field, could not initialize proxy - no Session 
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:137) 
    at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242) 
    at coldfusion.runtime.xml.ListIndexAccessor.getSize(ListIndexAccessor.java:44) 
    at coldfusion.runtime.xml.ArrayHandler.serialize(ArrayHandler.java:69) 
    at coldfusion.runtime.xml.CFComponentHandler.serialize(CFComponentHandler.java:106) 
    at coldfusion.runtime.XMLizerUtils.serializeXML(XMLizerUtils.java:83) 
    at coldfusion.rest.provider.CFObjectProvider.writeTo(CFObjectProvider.java:378) 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) 
    at coldfusion.rest.servlet.CFRestServletContainer.service(CFRestServletContainer.java:141) 
    at coldfusion.rest.servlet.CFRestServletContainer.service(CFRestServletContainer.java:86) 
    at coldfusion.rest.servlet.CFRestServlet.serviceUsingAlreadyInitializedContainers(CFRestServlet.java:556) 
    at coldfusion.rest.servlet.CFRestServlet.invoke(CFRestServlet.java:434) 
    at coldfusion.rest.servlet.RestFilter.invoke(RestFilter.java:58) 
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) 
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 
    at coldfusion.rest.servlet.CFRestServlet.invoke(CFRestServlet.java:409) 
    at coldfusion.rest.servlet.CFRestServlet.service(CFRestServlet.java:400) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:422) 
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:198) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Отключение отложенной загрузки будет это исправить, но результаты в неприемлемых производительности (время загрузки из От 200 мс до 22 с). Я не уверен, как справиться с этим.

Я новичок в REST в ColdFusion, и мне кажется, что CFC обрабатываются необычным способом. Кажется, что они не инициализированы (метод init не работает), и теперь кажется, что ORM не обрабатывается одинаково. Я что-то упускаю?

Вот выдержка из моего кода производит эту ошибку:

component rest="true" restpath="item" 
{ 
    import model.beans.*; 

    remote item function getitem(numeric id restargsource="Path") restpath="{id}" httpmethod="GET" 
    { 
     var item = entityLoad("item",{ id = id },true); 

     return item; 
    } 

} 

И боб:

component persistent="true" table="item" output="false" extends="timestampedBean" batchsize="10" cacheuse="read-only" 
{ 
    /* properties */ 

    property name="id" column="id" type="numeric" ormtype="int" fieldtype="id" generator="identity"; 
    property name="title" column="title" type="string" ormtype="string"; 
    property name="description" column="description" type="string" ormtype="string"; 
    property name="status" column="status" type="numeric" ormtype="byte" default="0" ; 
    property name="user" fieldtype="many-to-one" cfc="user" fkcolumn="userid" inversejoincolum="userid" lazy="true" cacheuse="read-only"; 
    property name="field" type="array" fieldtype="many-to-many" cfc="field" fkcolumn="id" linktable="items_fields" inversejoincolumn="fieldid" lazy="extra" batchsize="10" cacheuse="read-only"; 
} 

Я также заметил в журнале стандартный вывод, что Hibernate регистрирует запрос, но затем его регистрирует ошибку «Нет сеанса»:

Hibernate: 
    select 
     item0_.id as id0_0_, 
     item0_.dtcreated as dtcreated0_0_, 
     item0_.dtmodified as dtmodified0_0_, 
     item0_.title as title0_0_, 
     item0_.description as descript6_0_0_, 
     item0_.status as status0_0_, 
     item0_.userid as userid0_0_ 
    from 
     item item0_ 
    where 
     item0_.id=? 
Dec 2, 2014 15:23:00 PM Error [ajp-bio-8014-exec-3] - failed to lazily initialize a collection of role: field, could not initialize proxy - no Session The specific sequence of files included or processed is: service.cfc'' 

Возможно, я также должен добавить, что этот стол «товаров» часть отношения «многие ко многим», поэтому «коллекция role: field» ссылается на внешнюю таблицу.

+0

сообщение об ошибке связано с ОРМ. Опубликуйте свой 'service.cfc' и код, который вы ожидаете работать, но не работаете для вас? – Henry

ответ

2

org.hibernate.LazyInitializationException - популярная проблема спящего режима. Основная причина в том, что у вас нет сеанса спящего режима, который открыт, из-за отсутствия транзакции. Существует несколько подходов к решению проблемы. Пожалуйста, прочтите следующие ссылки:

http://www.javacodegeeks.com/2012/07/four-solutions-to-lazyinitializationexc_05.html http://javarevisited.blogspot.ru/2014/04/orghibernatelazyinitializationException-Could-not-initialize-proxy-no-session-hibernate-java.html

Или вы можете использовать

<property name="hibernate.enable_lazy_load_no_trans" value="true"/>

после 4.1.6 гибернации версии. Смотри на Solve Hibernate Lazy-Init issue with hibernate.enable_lazy_load_no_trans

+0

Ошибка в соединениях в 4.1.6. Лучше использовать версию 4.1.7 – overthrown

0

установить список обнулить

пример:

перебирать объекты и устанавливать список каждый объект обнулить

entity.setList(null);

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

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