Apache flex Flex+;SBI&x2B;我想我错过了什么

Apache 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

所以,我的问题是:我所有的项目都配置好了,但我没有延迟加载

这是一个样本项目,我正在准备真正的项目即将到来。 简单地说,我有3个表:Category、Product、Client和前两个表之间的关联Buy

在Flex端,我有两个简单的datagrid,第一个包含产品,第二个包含与所选产品关联的客户机。 在服务器端,SpringBlazeDS集成架构和检索所有产品的服务

我的配置文件: web.xml

在此处输入代码
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:)我的日志中没有错误,但是懒散的加载似乎不起作用。。。我所有的数据库都已加载。