我正在研究特定的应用程序,一个spring + hibernate安装程序。我在flex中有一个前端,现在我试图添加一个jstl前端。我得到的延迟初始化异常是当我尝试从jstl模型和视图控制器中调用一个方法时,我从我的flex调用中调用该方法时没有任何问题。spring + jstl + hibernate懒惰初始化异常,如何在Flex前端找到工作
这里是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd” 版本= “2.4”>
<display-name>HTML test project</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>com.bamboo.common.factory.Log4JContextListener</listener-class>
</listener>
<!--<context-param>
<param-name>webAppRootKey</param-name>
<param-value>app.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<servlet>
<servlet-name>ApplicationContextFactory</servlet-name>
<servlet-class>com.bamboo.common.factory.ApplicationContextFactory</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<!-- JSTL dispatcher-servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
这里我打开我的应用程序上下文,这是我理解的负荷从后端,我会用豆子,把我的Hibernate配置和方面的conf igurations。之后,我加载了弹性消息传递servlet,我知道它允许flex和spring进行通信,最后是调度程序servlet,它将把所有的.htm请求映射到jstl控制器和视图。
这里是我的应用程序上下文:
<?xml version="1.0" encoding="UTF-8"?>
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd“>
<!-- ========================= GENERAL DEFINITIONS ========================= -->
<!-- ========================= DATA ACCESS OBJECT DEFINITIONS ======================== -->
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/catWDB</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<list>
<value>/com/bamboo/catW3/catW3.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.connection.pool_size">3</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="transactionManager" lazy-init="true" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="categoryDAOTarget" class="com.bamboo.catW3.DAO.impl.CategoryDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="containerDAOTarget" class="com.bamboo.catW3.DAO.impl.ContainerDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="productDAOTarget" class="com.bamboo.catW3.DAO.impl.ProductDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="productOptionDAOTarget" class="com.bamboo.catW3.DAO.impl.ProductOptionDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="productStatusDAOTarget" class="com.bamboo.catW3.DAO.impl.ProductStatusDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="userDAOTarget" class="com.bamboo.catW3.DAO.impl.UserDAOImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
<!-- ========================= BUSINESS OBJECT DEFINITIONS ======================== -->
<bean id="catalogFacadeTarget" class="com.bamboo.catW3.business.impl.CatalogFacadeImpl">
<property name="categoryDAO"><ref local="categoryDAOTarget"/></property>
<property name="containerDAO"><ref local="containerDAOTarget"/></property>
<property name="productDAO"><ref local="productDAOTarget"/></property>
<property name="productOptionDAO"><ref local="productOptionDAOTarget"/></property>
<property name="productStatusDAO"><ref local="productStatusDAOTarget"/></property>
<property name="userDAO"><ref local="userDAOTarget"/></property>
</bean>
<!-- ================================ VIEW RESOLVER ===================================== -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<!-- ========================= ASPECT CONFIGURATION ======================== -->
<bean id="catalogFacade" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="target">
<ref local="catalogFacadeTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="contains*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="login*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>
所以我想做的事情,并假设我到现在为止,是共享目录FacadeTarget bean与Flex,并从jstl设置与控制器。因此,我可以调用我从Flex调用相同的方法,现在从控制使用模型和查看方法。我以为这样我就不会遇到任何问题。这里是我的调度员的servlet:
<?xml version="1.0" encoding="UTF-8"?>
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd“>
<!-- URL mapping -->
<bean id="urlMap"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<props>
<prop key="/welcome.htm">welcome</prop>
<prop key="/welcome">welcome</prop>
<prop key="/catalog.htm">catalog</prop>
<prop key="/catalog">catalog</prop>
</props>
</property>
</bean>
<!-- Controllers -->
<bean name="welcome"
class="com.bamboo.catW3.business.impl.Welcome">
<property name="successView">
<value>welcome</value>
</property>
<property name="catalogFacadeImpl" ref="catalogFacadeTarget"/>
</bean>
<bean name="catalog"
class="com.bamboo.catW3.business.impl.Catalog">
<property name="successView">
<value>catalog</value>
</property>
<property name="catalogFacadeImpl" ref="catalogFacadeTarget"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
现在这个工作正常,即使我的intellij IDE强调了catalogFacadeTarget引用,并且说我无法解析bean,这会很棒:如果有人知道如何让他变成并且,也许让我明白了:
<property name="catalogFacadeImpl" ref="*catalogFacadeTarget*"/>
这是工作的罚款对于那些没有复杂的人际关系简单的物体,比如我有一个不涉及任何表用户,我可以从这样做模型和查看方法在jstl控制器上:
List users = catalogFacadeImpl.getUserList();
没问题,我得到用户列表并打印它。但是,如果我尽量让这更复杂的物体上,具有与自身的关系的东西,就像对象类别:
List categories = catalogFacadeImpl.getCategoryList();
我得到exceptcion:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.bamboo.catW3.domain.Category.categories, no session or session was closed
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:488)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
这通常是hbm和配置关系的问题,然而,这不可能是这样,因为从flex我称这种方法非常相同,并没有任何问题。所以我猜想我并没有像我一样分享这个bean。不,这也不会给我这个错误。
我现在非常困惑,任何有关在哪里寻找的建议都会深表感谢。非常感谢你,试图张贴HBM,以防万一它帮助,但是这个帖子很长。
考虑编辑这个问题。这些问题往往不会被阅读。 – 2010-11-14 22:57:49
未来会记住,得到这个答案,但不是完全阅读。谢谢 – Ernest 2010-11-15 13:41:12