Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring+Hibernate+JSP / 3 сообщений из 3, страница 1 из 1
24.12.2012, 08:34:46
    #38090179
Goffman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring+Hibernate+JSP
Доброе утро, помогите разобраться с Hibernate.
Ситуация, вроде бы стандартная, но решения не могу найти.

Есть класс контроллера, который достает объект отчета из БД через хибернейт, и передает этот отчет в jsp-страницу.
Проблема в том, что когда обращаюсь к отчету из jsp, получаю ошибку

Код: plaintext
org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

код контроллера
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@Controller
public class TekInspectService {

    @Autowired
    private SessionFactory sessionFactory;

    @RequestMapping(value = "/tek/inspect/{reportId}/{resultCode}/{dbtarget}/viewreport.do")
    public String viewReport(@PathVariable int reportId,
                             @PathVariable int resultCode,
                             @PathVariable String dbtarget,
                             Model model
                             )
    {


        Session session = SessionFactoryUtils.openSession(sessionFactory);
        try {

            TekInspectReport report = (TekInspectReport) session.get(TekInspectReport.class, reportId);
            model.addAttribute("report", report);
            return "tek_insp_rep";
        } finally {
            session.close();
        }

    }
}



конфигурация session-factory
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    <bean id="dataSourceFinProd" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:/FinProductDS"/>
    </bean>

    <bean id="finProdSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSourceFinProd"/>
        <property name="packagesToScan" value="ru.vsmpo.srsp.tek.ispect"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                <prop key="show_sql">true</prop>
            </props>
        </property>
    </bean>



страница jsp
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<div id="header">
    <div>ПРОТОКОЛ ПРОВЕРКИ ОФОРМЛЕНИЯ</div>
    <div>${report.tek.docName}</div>
</div>

<div id="tek_inspection_area">

    <c:forEach var="rec" items="${report.tekInspectList}">
        <div>${rec.message}</div>
    </c:forEach>
</div>



Понятно, что проблема кроется в том, что я закрываю сессию в finally,
но если я не буду этого делать, то Datasource не возвращается обратно в пул.
Как быть?
...
Рейтинг: 0 / 0
24.12.2012, 11:04:58
    #38090312
pavel_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring+Hibernate+JSP
Гугли по словам OpenSessionInView. В принципе все хорошо расписано.
...
Рейтинг: 0 / 0
24.12.2012, 13:11:54
    #38090547
Goffman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring+Hibernate+JSP
спасибо, вроде бы разобрался

может кому то пригодиться

web.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>finProdSessionFactory</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>




контроллер
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
@Controller
public class TekInspectService {

    @Autowired
    private SessionFactory sessionFactory;

    @RequestMapping(value = "/tek/inspect/{reportId}/{resultCode}/{dbtarget}/viewreport.do")
    public String viewReport(@PathVariable int reportId,
                             @PathVariable int resultCode,
                             @PathVariable String dbtarget,
                             Model model
                             )
    {

        Session session = sessionFactory.getCurrentSession();
        TekInspectReport report = (TekInspectReport) session.get(TekInspectReport.class, reportId);
        model.addAttribute("report", report);
        return "tek_insp_rep";


    }
}



...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring+Hibernate+JSP / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]