Apache flex Flex+;SBI&x2B;我想我错过了什么
所以,我的问题是:我所有的项目都配置好了,但我没有延迟加载 这是一个样本项目,我正在准备真正的项目即将到来。 简单地说,我有3个表:Category、Product、Client和前两个表之间的关联Buy 在Flex端,我有两个简单的datagrid,第一个包含产品,第二个包含与所选产品关联的客户机。 在服务器端,SpringBlazeDS集成架构和检索所有产品的服务 我的配置文件: web.xmlApache flex Flex+;SBI&x2B;我想我错过了什么,apache-flex,spring,integration,blazeds,dphibernate,Apache Flex,Spring,Integration,Blazeds,Dphibernate,所以,我的问题是:我所有的项目都配置好了,但我没有延迟加载 这是一个样本项目,我正在准备真正的项目即将到来。 简单地说,我有3个表:Category、Product、Client和前两个表之间的关联Buy 在Flex端,我有两个简单的datagrid,第一个包含产品,第二个包含与所选产品关联的客户机。 在服务器端,SpringBlazeDS集成架构和检索所有产品的服务 我的配置文件: web.xml 在此处输入代码 springblazeds集成 springblazeds集成 log4jCon
在此处输入代码
springblazeds集成
springblazeds集成
log4jConfigLocation
/WEB-INF/classes/log4j.properties
上下文配置位置
/WEB-INF/config/applicationContext.xml
openSessionInViewFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
冲洗模式
总是
openSessionInViewFilter
/消息代理/*
org.springframework.web.util.Log4jConfigListener
org.springframework.web.context.ContextLoaderListener
SpringMVCServlet调度器
SpringMVCServlet调度器
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/config/webApplicationContext.xml
1.
RDSDispatchServlet
flex.rds.server.servlet.FrontEndServlet
messageBrokerId
_消息代理
useAppserverSecurity
假的
10
RDSDispatchServlet
/CFIDE/main/ide.cfm
SpringMVCServlet调度器
/消息代理/*
index.html
index.htm
applicationContext.xml
<beans xmlns="..">
<bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="txManager" />
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>tuto/Product.hbm.xml</value>
<value>tuto/Client.hbm.xml</value>
<value>tuto/Category.hbm.xml</value>
<value>tuto/Buy.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/tuto" />
<property name="username" value="root" />
</bean>
</beans>
<beans xmlns=".....">
<bean id="hibernate-lazy-adapter" class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg value="net.digitalprimates.persistence.hibernate.HibernateAdapter"/>
<property name="properties">
<value>
{
"hibernate": {
"sessionFactory": {"class":"net.digitalprimates.persistence.hibernate.utils.SpringSessionUtil", "getCurrentSessionMethod":"getCurrentSession"
}, "loadMethod":"load"
}
}
</value>
</property>
</bean>
<flex:message-broker>
<flex:remoting-service default-adapter-id="hibernate-lazy-adapter" default-channels="my-amf" />
</flex:message-broker>
<bean id="productService" parent="transactionProxy">
<property name="target">
<bean class="tuto.ServiceProductImpl">
<property name="productDAO"><ref bean="productDAO"/></property>
</bean>
</property>
<flex:remoting-destination/>
</bean>
<bean id="productDAO" class="tuto.DAOProductHibernate" lazy-init="default">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
需要进行传播
需要进行传播
需要进行传播
需要传播,只读
tuto/Product.hbm.xml
tuto/Client.hbm.xml
tuto/Category.hbm.xml
tuto/Buy.hbm.xml
org.hibernate.dialogue.hsql方言
真的
webApplicationContext.xml
<beans xmlns="..">
<bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="txManager" />
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>tuto/Product.hbm.xml</value>
<value>tuto/Client.hbm.xml</value>
<value>tuto/Category.hbm.xml</value>
<value>tuto/Buy.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/tuto" />
<property name="username" value="root" />
</bean>
</beans>
<beans xmlns=".....">
<bean id="hibernate-lazy-adapter" class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg value="net.digitalprimates.persistence.hibernate.HibernateAdapter"/>
<property name="properties">
<value>
{
"hibernate": {
"sessionFactory": {"class":"net.digitalprimates.persistence.hibernate.utils.SpringSessionUtil", "getCurrentSessionMethod":"getCurrentSession"
}, "loadMethod":"load"
}
}
</value>
</property>
</bean>
<flex:message-broker>
<flex:remoting-service default-adapter-id="hibernate-lazy-adapter" default-channels="my-amf" />
</flex:message-broker>
<bean id="productService" parent="transactionProxy">
<property name="target">
<bean class="tuto.ServiceProductImpl">
<property name="productDAO"><ref bean="productDAO"/></property>
</bean>
</property>
<flex:remoting-destination/>
</bean>
<bean id="productDAO" class="tuto.DAOProductHibernate" lazy-init="default">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
{
“冬眠”:{
“sessionFactory”:{“类”:“net.digitalprimates.persistence.hibernate.utils.SpringSessionUtil”,“getCurrentSessionMethod”:“getCurrentSession”
},“加载方法”:“加载”
}
}
product.hbm.xml
<hibernate-mapping package="tuto">
<class name="Product" table="product">
<id name="productId" type="long" column="product_id">
<generator class="increment"/>
</id>
<property name="name" column="name" type="string" not-null="true" length="40"/>
<many-to-one name="category" column="category_id" class="Category" not-null="true" lazy="false">
</many-to-one>
<set name="clients" table="buy" cascade="delete">
<key column="product_id"/>
<many-to-many column="client_id" class="Client"/>
</set>
</class>
</hibernate-mapping>
下面是ProductDAO.java中的代码
public Collection<Product> findAll() {
Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
try {
return session.createQuery("from Product").list();
} catch (HibernateException e) {
throw SessionFactoryUtils.convertHibernateAccessException(e);
}
}
public Collection findAll(){
Session Session=SessionFactoryUtils.getSession(getSessionFactory(),false);
试一试{
return session.createQuery(“来自产品”).list();
}捕获(休眠异常e){
抛出SessionFactoryUtils.convertHibernateAccessException(e);
}
}
如果您需要更多信息来帮助,请询问,我只是不想在第一条消息中发布太多代码:)
如您所见,我只是从数据库中检索产品,但当我在datagrid中选择一个产品时,会填充客户机的datagrid,因此也会加载客户机!
另外,我有一个日志跟踪,我可以看到Product表上有多个请求,Client表上也有多个请求。
在我看来只有一个应该在这里!没有
我在等你的建议,非常感谢
Arnaud.BlazeDS中没有延迟加载机制。如果需要,您必须编写自己的框架,或者使用Livecycle数据服务中的数据管理。也有一个目标是这样做,但我从来没有玩过它 另一种选择是使用拆分模型并使用远程方法,以便在选择相应产品时获得客户端。问题已解决 更改此项:
<flex:message-broker>
<flex:remoting-service default-adapter-id="hibernate-lazy-adapter" default-channels="my-amf" />
</flex:message-broker>
<flex:remoting-destination/>
为此:
<flex:message-broker>
</flex:message-broker>
<flex:remoting-destination service-adapter="hibernate-lazy-adapter" channels="my-amf"/>
在所有bean中,更改以下内容:
<flex:message-broker>
<flex:remoting-service default-adapter-id="hibernate-lazy-adapter" default-channels="my-amf" />
</flex:message-broker>
<flex:remoting-destination/>
为此:
<flex:message-broker>
</flex:message-broker>
<flex:remoting-destination service-adapter="hibernate-lazy-adapter" channels="my-amf"/>
现在它可以工作了:)感谢你的回答,我忘记说我在使用dpHibernate:)我的日志中没有错误,但是懒散的加载似乎不起作用。。。我所有的数据库都已加载。