构建施耐德楼控系统数据库后台服务器示例工程—(工程创建)

工作中需要在施耐德楼控系统上添加后台管理功能和手机控制功能,单位采购的施耐德的产品仅仅是用于控制现场设备的楼控模块及上位机编程与HMI,我们需要在此基础上,自主开发手机端控制功能,那么就需要通过建立后台工程用于往施耐德的硬件上发信号或者修改其数据库。

本文即是建立在此想法的基础上,记录一下如何采用Spring、Hibernate、Rest这个框架构建一个可以快速开发的后台管理框架。

1.使用eclipse新建一个普通JAVA工程

2.右键工程名,选择属性,点击"Project Facets"将“Dynamic Web Module勾选上,一个动态Web工程即建好

3.将Spring、Hibernate、Rest所需的jar文件全部复制到Web工程的WEB-INF/lib文件夹下(建议将jar文件复制到工程下面而不是引用,否则还需在tomcat下面放置一份jar包,否则会照成运行时报错)

4.新建Web.xml用于配置Spring信息

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

	xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee"

	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

	version="2.4">

	<display-name>TacControlServerWeb</display-name>

	<distributable />

	<context-param>

		<param-name>contextConfigLocation</param-name>

		<param-value>

            classpath:/spring/applicationContext*.xml

        </param-value>

	</context-param>

	<filter>

		<filter-name>encodingFilter</filter-name>

		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

		<init-param>

			<param-name>encoding</param-name>

			<param-value>UTF-8</param-value>

		</init-param>

		<init-param>

			<param-name>forceEncoding</param-name>

			<param-value>true</param-value>

		</init-param>

	</filter>

	<filter-mapping>

		<filter-name>encodingFilter</filter-name>

		<url-pattern>/*</url-pattern>

	</filter-mapping>

	<listener>

		<!-- 自动装配ApplicationContext的配置信息 -->

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

	</listener>

	<listener>

		<!-- org.springframework.web.util.IntrospectorCleanupListener监听器主要负责处理由JavaBean
			Introspector使用而引起的缓冲泄露 -->
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

	</listener>

	<listener>

		<!-- ContextLoaderListener实现ServletContextListener监听器接口,而ServletContextListener只负责监听Web容器的启动和关闭的事件。RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。通过配置RequestContextFilter,Spring容器与Web容器结合的更加密切。 -->

		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

	</listener>

	<!-- rest监听器配置 -->

	<servlet>
		<display-name>JAX-RS REST Servlet</display-name>
		<servlet-name>JAX-RS REST Servlet</servlet-name>
		<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
		<init-param>
			<param-name>com.sun.jersey.config.property.packages</param-name>
			<param-value>szx.rest</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>JAX-RS REST Servlet</servlet-name>
		<url-pattern>/szxrest/*</url-pattern>
	</servlet-mapping>

	<servlet>
		<description></description>
		<display-name>FindInfo</display-name>
		<servlet-name>FindInfo</servlet-name>
		<servlet-class>szx.web.servlet.FindInfo</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>FindInfo</servlet-name>
		<url-pattern>/FindInfo</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

5.配置了Spring后,在Spring的配置文件中配置Hibernate信息和自动注入的方式,如下applicationContext-core.xml

<?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: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"

	xsi:schemaLocation="http://www.springframework.org/schema/beans

						http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

						http://www.springframework.org/schema/aop

						http://www.springframework.org/schema/aop/spring-aop-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/jee

						http://www.springframework.org/schema/jee/spring-jee-2.5.xsd

						http://www.springframework.org/schema/tx

						http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<context:property-placeholder location="classpath:jdbc.properties" />

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">

		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxActive" value="2000" />
		<property name="maxIdle" value="1000"></property>
		<property name="maxWait" value="25000" />
		<property name="poolPreparedStatements" value="false" />
		<property name="defaultAutoCommit" value="true" />

	</bean>

	<!-- Hibernate SessionFactory -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan">
			<list>
				<value>szx</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<value>
				hibernate.dialect=${hibernate.dialect}
				hibernate.query.substitutions=true 'Y', false 'N'
				hibernate.cache.use_second_level_cache=true
				hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
				hibernate.jdbc.fetch_size=50
				hibernate.jdbc.batch_size=25
				hibernate.show_sql=true
				hibernate.format_sql=false
				hibernate.use_sql_comments=true
			</value>
		</property>
		<property name="lobHandler" ref="lobHandler" />
	</bean>

	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
		<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
	</bean>

	<bean id="nativeJdbcExtractor"
		class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" />

	<!-- Transaction manager for a single Hibernate SessionFactory -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- Enable annotation-based configuration -->
	<context:annotation-config />

	<!-- Enable classpath scanning for managed components -->
	<context:component-scan base-package="szx" name-generator="szx.core.spring.CustomBeanNameGenerator"/>

	<!-- Enable @AspectJ support -->
	<aop:aspectj-autoproxy />

	<!-- Enable @Transactional support -->
	<tx:annotation-driven />

	<aop:config>
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* *..service.*Manager.*(..))" order="100" />
	</aop:config>

	<tx:advice id="txAdvice">
		<tx:attributes>
			<tx:method name="*" rollback-for="Throwable" />
		</tx:attributes>
	</tx:advice>

</beans>

6.新建jdbc.properties文件,配置数据库连接(数据库可以适配MySQL、Oracle、SqlServer)

#hibernate.dialect=cn.walle.core.support.hibernate.Oracle10gDialect
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
#jdbc.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
#jdbc.url=jdbc:sqlserver://localhost:1433;integratedSecurity=true;DatabaseName=taclogdata
jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433;integratedSecurity=true;DatabaseName=taclogdata
#jdbc.url=jdbc:oracle:thin:@192.168.103.9:1521:orcl
#jdbc.url=jdbc:oracle:thin:@219.237.193.91:1521:orcl
#jdbc.url=jdbc:oracle:thin:@iwmds.rdh.com:1521:orcl
jdbc.username=tacvista
jdbc.password=tacvista

7.工程结构如下图

时间: 2024-10-03 11:08:34

构建施耐德楼控系统数据库后台服务器示例工程—(工程创建)的相关文章

构建施耐德楼控系统数据库后台服务器示例工程二(数据库查询编写)

构建施耐德楼控系统数据库后台服务器示例工程-(工程创建)记录了一个Spring.Hibernate.Rest的工程如何创建,这篇将简单介绍在这个框架下如何利用注释编程. 1.Spring注释 Spring为我们提供了@Service.@Autowired这些标注来让工程中的Bean自动创建. 在我们的框架中,我们需要为每一个需要被其他类调用到的类名前添加@Service标签,在需要被自动创建的成员类上添加@Autowired,这样程序在运行时Spring会为我们自动装配相关的类实例. 2.Res

构建施耐德楼控系统数据库后台服务器示例工程三(Web端展示)

最近看到Extjs的示例中有仿操作系统桌面的代码,并且展示效果很美观,结合楼控这个系统的Web端展示需求,目前前端采用Extjs.楼控相关的操作会设计成桌面中的不同应用. Extjs初次入手看起来很复杂,但是由于其自带的示例代码很丰富,通常在了解一些基本概念后,参照着示例代码一步一步去做,我认为是最好的学习方式了. 目前我参照着Extjs中仿照桌面的示例代码,做出了如下的画面: 从图中我们可以看出,我目前在仿照着这个示例代码中的GridPanel.TabPanel.Window这些基本的组件,做

构建施耐德楼控系统数据库后台服务器示例工程五(JAVA动态生成类)

在做数据库简易工具的过程中遇到了这么一个问题,即程序部署在tomcat下启动运行后,我们无法事先定义数据库中后续创建的表结构的Hibernate Bean对象,这样就需要我们在服务器运行起来后动态创建bean对象.cglib这个开源库即可解决我们的问题,动态创建JAVA对象. 1.cglib开源库简介 CGLIB(Code Generation Library)是一个开源项目,是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口. 反编译后CGLIB结构

构建施耐德楼控系统数据库后台服务器示例工程四(SQLServer查询语句)

由于目前做的是一个数据库操作的一个简易类,涉及到如下查询语句,在此记录一下. 1.查询表名 select object_id,name name from sys.tables 2.查询列信息 SELECT (case when a.colorder = 1 then d.name else null end) 表名, a.colorder 字段序号, a.name 字段名, (case when COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 th

火力发电厂工控系统网络安全解决方案 - 对比分析

发电厂网络概述 火电厂网络架构中涉及的系统主要包括:火电机组分散控制系统DCS.火电机组辅机控制系统DCS\PLC.火电厂级信息监控系统.调速系统和自动发电控制功能AGC.励磁系统和自动电压控制功能AVC.梯级调度监控系统.网控系统.继电保护.故障录波.电能量采集装置.电力市场报价终端等系统. 电力行业在安全方面是考虑地比较早的,形成了"安全分区.网络专用.横向隔离.纵向认证"的总体原则. 区域一般分为:生产控制大区(控制区+非控制区),管理信息大区. 也有情况下,电厂会将区域分为4个

业务系统数据库设计常见的隔离和共享模式

多年开发和维护某些业务系统的经验,让人真正理解了什么叫“数据库设计良好,系统就成功了一半”,尤其是那些面向多商户的基础服务平台.公共服务平台.开放服务平台.或者由它们组合而成的综合服务平台.数据库设计之初,必须对业务系统DB的隔离和共享模式的优缺有充分的调研,平衡好业务系统的边界,合理设计使用必要的冗余,以适应系统后续的不断变化,否则后期开发人员将陷入无尽的烦恼和痛苦之中,这绝不是危言耸听,只有开发和维护过平台类产品的人才能深刻体会.下面就介绍三种业务系统中最常见的数据库设计的隔离和共享模式:

linux--监控系统之Zabbix简介

一.zabbix概述 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题. zabbix由2部分构成,zabbix server与可选组件zabbix agent. zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,

Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示

[TOC] 1 大数据处理的常用方法 前面在我的另一篇文章中<大数据采集.清洗.处理:使用MapReduce进行离线数据分析完整案例>中已经有提及到,这里依然给出下面的图示: 前面给出的那篇文章是基于MapReduce的离线数据分析案例,其通过对网站产生的用户访问日志进行处理并分析出该网站在某天的PV.UV等数据,对应上面的图示,其走的就是离线处理的数据处理方式,而这里即将要介绍的是另外一条路线的数据处理方式,即基于Storm的在线处理,在下面给出的完整案例中,我们将会完成下面的几项工作: 1

自主开发微信云控系统源码与群控系统源码区别,及技术原理

在微信云控系统中,主要由服务器端,手机客户端,模拟点击 滑动等部分组成.其系统关键的核心在于服务器端的命令推送到手机上,以及手机接收到命令后执行相应程序的模拟人工操作.在开发过程中,我们主要用到的开发语言有:PHP.Android.Java.C.C++.服务器的推送方式有很多种,在我们实现云控系统中选用的是个推来实现命令的推送.后台设备管理,以及命令参数的下发等等,都是大家都会经常遇到的各种管理系统的开发类似的.部分核心代码为: //服务端推送接口,支持三个接口推送 //1.PushMessag