Flex+BlazeDS+Spring+Hibernate架构整合示例
发布时间:2020-12-15 00:59:24 所属栏目:百科 来源:网络整理
导读:? ?如下图所示建立工程: 所需lib包一览: 代码如下: StsHibernateTemplate.java package com.stswg.dao.base;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibern
?
?如下图所示建立工程: 所需lib包一览: 代码如下: StsHibernateTemplate.java package com.stswg.dao.base; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.HibernateTemplate; public class StsHibernateTemplate extends HibernateTemplate { @Autowired @Override public void setSessionFactory(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); } } CustomerDaoImpl.java package com.stswg.dao.impl; import java.util.List; import org.apache.commons.lang.StringUtils; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import com.stswg.dao.CustomerDao; import com.stswg.dao.base.StsHibernateTemplate; import com.stswg.entity.Customer; public class CustomerDaoImpl extends StsHibernateTemplate implements CustomerDao { private String[] data = { "富士康电子","仁宝电脑","富士通软件","太极实业","万科地产","中铁2局","海南航空","德赛电池","东湖高新","哈药集团","太平洋保险","平安保险","太极集团","中粮地产","世贸股份","中国中铁","金山软件","中国银行","建设银行","华阳软件" }; @Override public int insertCustomer() { int index = new Double(Math.floor(Math.random() * data.length)).intValue(); Customer customer = new Customer(); customer.setName(data[index]); customer.setAddress(data[index] + "公司所在地址"); customer.setTelephone("021-67376464"); save(customer); return 1; } @Override public int selectCustomerCount() { Criteria criteria = getSession().createCriteria(Customer.class); return criteria.list().size(); } @SuppressWarnings("unchecked") @Override public List<Customer> selectCustomer(String name) { Criteria criteria = getSession().createCriteria(Customer.class); if(StringUtils.isNotEmpty(name)) { criteria.add(Restrictions.like("name","%" + name + "%")); } return criteria.list(); } @Override public int deleteCustomer() { deleteAll(selectCustomer(null)); return 1; } }
CustomerDao.java package com.stswg.dao; import java.util.List; import com.stswg.entity.Customer; public interface CustomerDao { public int deleteCustomer(); public int insertCustomer(); public int selectCustomerCount(); public List<Customer> selectCustomer(String name); }
BaseEntity.java package com.stswg.entity.base; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public class BaseEntity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; public void setId(Integer id) { this.id = id; } public Integer getId() { return id; } public boolean isNew() { return (this.id == null); } }
Customer.java package com.stswg.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import com.stswg.entity.base.BaseEntity; @Entity @Table(name="t_customer") public class Customer extends BaseEntity { @Column(name="name") private String name; @Column(name="address") private String address; @Column(name="telephone") private String telephone; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } }
NoCacheFilter.java package com.stswg.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; public class NoCacheFilter implements Filter { public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException { try { HttpServletResponse res = (HttpServletResponse) response; res.addHeader("Cache-Control","no-store"); res.addHeader("Pragma","no-store"); chain.doFilter(request,response); } catch(Exception e) { } } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
CustomerServiceImpl.java package com.stswg.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.flex.remoting.RemotingDestination; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.stswg.dao.CustomerDao; import com.stswg.entity.Customer; import com.stswg.service.CustomerService; @RemotingDestination public class CustomerServiceImpl implements CustomerService { @Autowired private CustomerDao customerDao; @Transactional(propagation=Propagation.REQUIRED) public int insertCustomer() { return customerDao.insertCustomer(); } @Transactional(readOnly=true) public int selectCustomerCount() { return customerDao.selectCustomerCount(); } @Transactional(readOnly=true) public List<Customer> selectCustomer(String name) { return customerDao.selectCustomer(name); } @Transactional(propagation=Propagation.REQUIRED) public int deleteCustomer() { return customerDao.deleteCustomer(); } }
CustomerService.java package com.stswg.service; import java.util.List; import com.stswg.entity.Customer; public interface CustomerService { public int deleteCustomer(); public int insertCustomer(); public int selectCustomerCount(); public List<Customer> selectCustomer(String name); }
jdbc.properties #DataSource(C3P0) jdbc.driverClassName=org.hsqldb.jdbcDriver jdbc.url=jdbc:hsqldb:mem:. jdbc.username=sa jdbc.password= jdbc.initialPoolSize=10 jdbc.minPoolSize=5 jdbc.maxPoolSize=30 jdbc.acquireIncrement=5 jdbc.maxIdleTime=10 jdbc.maxStatements=0 #Hibernate hibernate.dialect=org.hibernate.dialect.HSQLDialect hibernate.show_sql=false hibernate.jdbc.batch_size=20 hibernate.generate_statistics=true hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider hibernate.cache.use_query_cache=true hibernate.cache.use_second_level_cache=true hibernate.cache.use_structured_entries=true hibernate.hbm2ddl.auto=create-drop
#Log4j #Configuring loggers log4j.rootLogger=error,console,file #Configuring Appenders log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=C://logs.log #Configuring layouts log4j.appender.console.layout=org.apache.log4j.SimpleLayout log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
<?xml version="1.0" encoding="UTF-8"?> <service id="remoting-service" class="flex.messaging.services.RemotingService"> <adapters> <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> </adapters> <default-channels> <channel ref="my-amf"/> <channel ref="my-secure-amf"/> </default-channels> </service>
<?xml version="1.0" encoding="UTF-8"?> <services-config> <services> <service-include file-path="remoting-config.xml" /> </services> <channels> <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel" > <endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint url="https://{server.name}:{server.port}/{context.root}/spring/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition> </channels> <logging> <target class="flex.messaging.log.ConsoleTarget" level="Error"> <properties> <prefix>[BlazeDS] </prefix> <includeDate>false</includeDate> <includeTime>false</includeTime> <includeLevel>false</includeLevel> <includeCategory>false</includeCategory> </properties> <filters> <pattern>Endpoint.*</pattern> <pattern>Service.*</pattern> <pattern>Configuration</pattern> </filters> </target> </logging> <system> <redeploy> <enabled>false</enabled> </redeploy> </system> </services-config>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:flex="http://www.springframework.org/schema/flex" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd"> <context:property-placeholder location="classpath:jdbc.properties" /> <context:annotation-config/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" p:driverClass="${jdbc.driverClassName}" p:jdbcUrl="${jdbc.url}" p:user="${jdbc.username}" p:password="${jdbc.password}" p:initialPoolSize="${jdbc.initialPoolSize}" p:minPoolSize="${jdbc.minPoolSize}" p:maxPoolSize="${jdbc.maxPoolSize}" p:acquireIncrement="${jdbc.acquireIncrement}" p:maxIdleTime="${jdbc.maxIdleTime}" p:maxStatements="${jdbc.maxStatements}" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-ref="dataSource"> <property name="annotatedClasses"> <list> <value>com.stswg.entity.Customer</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> ${hibernate.dialect} </prop> <prop key="hibernate.show_sql"> ${hibernate.show_sql} </prop> <prop key="hibernate.jdbc.batch_size"> ${hibernate.jdbc.batch_size} </prop> <prop key="hibernate.generate_statistics"> ${hibernate.generate_statistics} </prop> <prop key="hibernate.cache.provider_class"> ${hibernate.cache.provider_class} </prop> <prop key="hibernate.cache.use_query_cache"> ${hibernate.cache.use_query_cache} </prop> <prop key="hibernate.cache.use_second_level_cache"> ${hibernate.cache.use_second_level_cache} </prop> <prop key="hibernate.cache.use_structured_entries"> ${hibernate.cache.use_structured_entries} </prop> <prop key="hibernate.hbm2ddl.auto"> ${hibernate.hbm2ddl.auto} </prop> </props> </property> <property name="eventListeners"> <map> <entry key="merge"> <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/> </entry> </map> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"/> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="customerDao" class="com.stswg.dao.impl.CustomerDaoImpl" /> <bean id="customerService" class="com.stswg.service.impl.CustomerServiceImpl" /> <flex:message-broker services-config-path="/WEB-INF/flex/services-config.xml" /> <!-- <flex:remoting-destination ref="customerService" /> --> </beans>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <display-name>Spring-Flex-BlazeDS DEMO</display-name> <filter> <filter-name>noCacheFilter</filter-name> <filter-class> com.stswg.filter.NoCacheFilter </filter-class> </filter> <filter-mapping> <filter-name>noCacheFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>flex.messaging.HttpFlexSession</listener-class> </listener> <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>/spring/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>FlexDemo.html</welcome-file> </welcome-file-list> </web-app>
代码如下: style.css /* CSS file */ Application { fontSize: 14; }
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" verticalAlign="top" layout="vertical" initialize="prerender()" paddingTop="5" paddingBottom="5" paddingRight="5" paddingLeft="5" > <mx:Style source="assets/css/style.css" /> <mx:AMFChannel id="myamf" uri="/demo/spring/messagebroker/amf"/> <mx:ChannelSet id="channelSet" channels="{[myamf]}"/> <mx:RemoteObject id="customerService" destination="customerService" channelSet="{channelSet}"> <mx:method name="selectCustomerCount" result="resultSelectCustomerCount(event);" fault="faultError(event);" /> <mx:method name="insertCustomer" result="resultInsertCustomer(event);" fault="faultError(event);" /> <mx:method name="selectCustomer" result="resultSelectCustomer(event);" fault="faultError(event);" /> <mx:method name="deleteCustomer" result="resultDeleteCustomer(event);" fault="faultError(event);" /> </mx:RemoteObject> <mx:Script> <!--[CDATA[ import mx.collections.ArrayCollection; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.controls.Alert; private function prerender() : void { customerService.selectCustomerCount(); } public function searchCustomer() : void { var name : String = txtName.text; customerService.selectCustomer(name); } public function resultSelectCustomerCount(event:ResultEvent) : void { var count : int = event.result as int; if(count == 0) { customerService.insertCustomer(); } customerService.selectCustomer(""); } public function resultSelectCustomer(event:ResultEvent) : void { var dataset : ArrayCollection = event.result as ArrayCollection; dataGrid.dataProvider = dataset; } public function insertCustomer() : void { customerService.insertCustomer(); } public function resultInsertCustomer(event:ResultEvent) : void { customerService.selectCustomer(""); } public function deleteCustomer() : void { customerService.deleteCustomer(); } public function resultDeleteCustomer(event:ResultEvent) : void { customerService.selectCustomer(""); } private function faultError(event:FaultEvent) : void { Alert.show("错误信息:" + event.fault.toString()); } ]]--> </mx:Script> <mx:Panel width="100%" height="100%" horizontalAlign="center"> <mx:Label text="智能运营监控管理平台Flex版演示程序" /> <mx:VBox verticalGap="5" paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10" borderStyle="solid" borderThickness="1" cornerRadius="6"> <mx:HBox width="600"> <mx:Label text="客户名称:" /> <mx:TextInput id="txtName" width="180"/> <mx:Button label="查询" click="searchCustomer()" /> <mx:Button label="随机插入1条记录" click="insertCustomer()" /> <mx:Button label="清空数据" click="deleteCustomer()" /> </mx:HBox> <mx:HBox width="600" horizontalScrollPolicy="off"> <mx:AdvancedDataGrid headerHeight="25" variableRowHeight="true" width="100%" height="400" id="dataGrid" doubleClickEnabled="true" horizontalScrollPolicy="auto" headerWordWrap="true" wordWrap="true" sortExpertMode="true"> <mx:columns> <mx:AdvancedDataGridColumn width="50" textAlign="center" headerText="ID" dataField="id"/> <mx:AdvancedDataGridColumn width="120" textAlign="center" headerText="客户名称" dataField="name"/> <mx:AdvancedDataGridColumn width="260" textAlign="center" headerText="客户地址" dataField="address"/> <mx:AdvancedDataGridColumn width="120" textAlign="center" headerText="客户电话" dataField="telephone"/> </mx:columns> </mx:AdvancedDataGrid> </mx:HBox> </mx:VBox> </mx:Panel> </mx:Application>
1.Compile参数设置 2.Deploy位置: 启动Demo工程的Tomcat即可访问。 转自:http://www.voidcn.com/article/p-tdcsvlov-wq.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容