Java1.8环境变量配置1:下载对应版本的JDK1.8并安装安装过程中可以自定义安装目录等信息,例如我们选择安装目录为:C:\ProgramFiles\Java\jdk1.8.02:安装完成后,右击“我的电脑”点击“属性”:3:单击“高级系统设置”:4:在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”:(1).JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径C:\ProgramFiles\Java\jdk1.8.0,如图:(2)Path项下添加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,注意前面用分号隔开,如图:(3)在CLASSPATH项添加:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(要加.表示当前路径),如图:(5):“开始”->;“运行”,键入“cmd”,键入命令“javac”,出现以下画面,说明环境变量配置成功。如图:
存储性能黑幕:苹果和桔子怎么比较? 有没有想过,厂商自己提供的存储产品性能指标数据没有任何意义?用户要准确地评估不同厂商的存储产品,还需仔细阅读文中提到的SPC-1基准测试报告……前言 近年来,随着存储系统由服务器的附属变成IT系统中独立的子系统、由“外设”变成信息系统基础架构的中心,用户如何规划、设计和挑选符合自己需求的存储系统已变得越来越重要。 每个购买存储系统的用户都希望买到性能高、价格低、质量好(故障率低、可靠性高)、容量大(扩充能力强)、易于管理、售后服务好的存储产品,其中大多数用户最关心的还是存储产品的前三项指标,即性能、价格和可靠性。具体如下: ·体现存储系统性能的最主要指标是IOPS(I/Ospersecond),即每秒输入输出次数; ·存储产品的价格需从二个方面进行评估,如果用户对存储的主要需求是存储容量,则可由每GB存储容量的价格比较各存储厂商的产品;如果用户对存储的主要需求是存储性能,则可由每IOPS的价格比较各存储厂商的产品; ·对于基于硬盘的存储系统,其可靠性MTTF(平均故障出现时间)可表示为: MTTFarray=MTTFdisk/存储系统中的磁盘总数 其中:MTTFdisk代表每块磁盘的平均故障出现时间,目前磁盘的MTTFdisk最高可达1,400,000小时。 在存储系统的性能方面,很多存储厂商都为其产品公布了漂亮的IOPS指标数据:IOPS达十几万甚至几十万;但这些厂商大都不公布测出该IOPS指标的存储系统具体配置,因此用户也就无法对该存储产品的性价比和可靠性进行评估。很多用户在实际使用这些存储产品时却发现这些有着漂亮IOPS数值的存储产品性能很差,这是怎么回事?本文将为用户破解这个谜团!一、此IOPS非彼IOPS,要真正了解存储系统的性能还需看其SPC-1IOPS™ 1、苹果和桔子怎么比较?没有统一的测试标准、环境和参数,IOPS就没有可比性 这是因为IOPS测试结果与很多测试参数有关,如果各个存储厂商都按自己的标准对存储系统进行测试,那么测试出的IOPS等指标就没有任何意义,原因如下: 1)随机(Random)读写的IOPS与顺序(Sequential)读写的IOPS大不一样:对于基于磁盘的存储系统,顺序读写的IOPS要远远大于随机读写的IOPS,其中100%顺序读的IOPS又大于100%顺序写的IOPS、100%随机读的IOPS又大于100%随机写的IOPS。下面的图表是某品牌磁盘阵列(配置12块Maxtor250GB,7,200RPM的磁盘,512MBCache)的不同IOPS,就清楚地说明了这种情况:INCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/kj80eeqv459z.jpg"\*MERGEFORMATINETINCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/618l94347fny.jpg"\*MERGEFORMATINETINCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/xo9sjbp5zr80.jpg"\*MERGEFORMATINETINCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/g2rgut02207k.jpg"\*MERGEFORMATINETINCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/7ou756e3cw60.jpg"\*MERGEFORMATINET 2)从上面的图表可以看出:无论是顺序还是随机读写IOPS测试,传输数据块尺寸越小,IOPS值越大。 3)对于基于磁盘的存储系统,在其它测试条件一样的情况下,磁盘数量越多,IOPS值越大(几乎呈线性增长)。具体见下表:INCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/sf1y09lvf489.jpg"\*MERGEFORMATINET 4)在其它测试参数和条件一样的情况下,RAID-10配置的IOPS要大于RAID-5配置的IOPS。具体见下表与上表的比较:INCLUDEPICTURE"http://searchstorage.techtarget.com.cn/imagelist/05/08/d6
第一步:安装插件:git:http://download.eclipse.org/egit/updates-1.3第二步:将密匙文件放入,如图所示:如图加入密匙文件:yiping.wang注意,如果没有这个.ssh文件的话,自己创建,创建如图:第三步:使用gradle的步骤:先使用gitcheckout项目Next下去哈检出项目如图:第四步安装:Gradle安装地址为下载地址:http://services.gradle.org/distributions/gradle-1.5-all.zip安装:解压到自定义目录(例如:C:\gradle-1.5)设置环境变量注意,这里的环境变量都配置到用户名里,不要配置到系统里,否则挂的可能性很大GRADLE_HOME=C:\gradle-1.5Path+=%GRADLE_HOME%\bin打开命令行输入:gradle,显示以下类似信息即表示安装成功命令:找到项目的地址,在docs命令下的改项目名下,编译编译命令:gradlecleaneclipseeclipse-Pprofile=test--------------------有针对性的编译编译命令:gradlecleaneclipseeclipse-----------------------全部编译自动编译:运行这个也可以的哈(以上选其一就ok了)后面的可以暂时不考虑哈打包命令:gradlecleanwar-Pprofile=product一些常用命令:-b指定build文件(默认为:build.gradle)-c指定settings文件(默认为:settings.gradle)-x排除指定任务(例如:-xtest)更多常用命令请输入gradle-h/help查看Import项目ok有时候导入项目的时候会有一些bug出现,这个时候需要查看一下这个里面是否有依赖关系这个是依赖的项目名导入依赖的项目名就ok了打包命令:gradlecleanwar-Pprofile=product一些常用命令:-b指定build文件(默认为:build.gradle)-c指定settings文件(默认为:settings.gradle)-x排除指定任务(例如:-xtest)更多常用命令请输入gradle-h/help查看
Tomcat的下载、安装与配置1、安装Tomcat前要先安装JDK2、下载TomcatTomcat官网:HYPERLINK"http://tomcat.apache.org/"http://tomcat.apache.org/对于Windows操作系统,tomcat提供了两种安装文件,一个文件exe格式,另一个文件为zip格式。exe是可运行的安装程序,读者只需要双击这个文件,即可开始安装Tomcat。在安装过程中,安装程序会自动搜寻JDK和JRE的位置,并把Tomcat服务加入到Windows操作系统的服务中,同时在“开始”→“程序”菜单中加入Tomcat服务器管理菜单。zip是一个压缩包,只需要把它解压到本地硬盘即可,这种方式既适合Windows系统下的安装,也适用于其他操作系统,例如Linux系统,所以下面主要介绍zip的安装与Tomcat运行环境的设置。3、ZIP格式Tomcat安装文件的安装及设置A、Tomcat安装文件的安装及设置把Tomcat压缩文件apache-tomcat-8.0.3-windows-x64.zip中的内容解压缩到D:\DevTools\apache-tomcat-8.0.3下,然后增加系统变量:变量名:TOMCAT_HOME;变量值:D:\DevTools\apache-tomcat-8.0.3。然后修改系统变量classpath,添加%TOMCAT_HOME%\lib\servlet-api.jar;同时修改系统变量path,添加%TOMCAT_HOME%\bin。B、测试Tomcat要测试Tomcat服务器是否安装成功,首先要启动Tomcat服务器。在Tomcat安装目录D:\DevTools\apache-tomcat-8.0.3下面有一个bin目录,里面有两个文件:startup.bat和shutdown.bat,分别控制Tomcat的启动和关闭。由于在前一节中已经把该目录加入到系统变量Path中,所以在命令行中直接输入对应的文件名即可实现Tomcat的启动和关闭,而不需要切换目录。在命令行中输入startup.bat,即可启动Tomcat,如图所示:然后在浏览器地址栏中输入http://localhost:8080或者http://127.0.1.1:8080后,按Enter键访问。如果出现如下图界面,则说明Tomcat安装成功。C、Tomcat常用配置文件在Tomcat目录中,比较重要的配置文件有\conf下的tomcat-users.xml、server.xml以及\webapps中应用程序目录下的web.xml。Tomcat采用基于角色的访问控制模型管理用户对系统的使用,安全性比较高,其角色和对应用户都保存在tomcat-users.xml中。Tomcat服务器是由一些可配置的组件构成,在server.xml文件中可以对这些组件进行配置,每个Tomcat组件和server.xml文件是一一对应的。web.xml是按照Servlet规范定义的Web应用发布描述符文件,是完全独立于Tomcat容器的Web应用配置文件。下面是一个tomcat-users.xml文件的内容:<?xmlversion='1.0'encoding='utf-8'?><tomcat-users> <rolerolename="tomcat"/> <rolerolename="role1"/> <userusername="tomcat"password="tomcat"roles="tomcat"/> <userusername="both"password="tomcat"roles="tomcat,role1"/> <userusername="role1"password="tomcat"roles="role1"/></tomcat-users>其中,文件开头声明了XML的版本和编码方式,<tomcat-users>和</tomcat-users>之间描述了系统中的角色和用户。其中<rolerolename="tomcat"/>表示建立了一个名字叫tomcat的角色;<userusername="tomcat"password="tomcat"roles="tomcat"/>表示建立了一个用户,名字为tomcat,密码为tomcat,拥有角色tomcat所拥有的权限。一个用户可以拥有多个角色的权限,<userusername="both"password="tomcat"roles="tomcat,role1"/>表明用户both拥有角色tomcat和role1两者的权限。该文件具有扩充性,用户可以增加角色和用户。4、EXE格式tomcat安装文件的安装与配置A、tomcat安装文件
网络和移动制图系统功能需求系统包含web客户端和移动客户端两种模式,功能基本一致,具体功能需求如下:Web地图制图系统(客户端)在Apache+Php的开发环境下,建立通过web浏览器访问、B/S架构的自适应地图制图和可视化系统系统在MapGuide基础上进行改造,使用php开发语言服务端采用MongoDB分布式数据库和地图访问服务器,分别管理分块地图图片和分层矢量图元MongoDB管理的矢量图元是把地图图层切分为不同block的若干图元组合,以支持多用户制图请求的分布式地图渲染MongoDB数据库和地图访问服务器同时支持Web地图访问和移动设备的地图访问,为两者共用具体功能见下面3)—14)移动设备的地图制图系统(客户端)在AndroidSDK和3G移动互联网的开发环境下,建立通过Android智能手机和平板电脑访问、C/S架构的自适应地图制图和可视化系统系统在OSMAnd基础上进行改造,使用java开发语言服务端与Web地图模式相同,采用MongoDB分布式数据库和地图访问服务器,分别管理分块地图图片和分层矢量图元,并支持多用户制图请求的分布式地图渲染具体功能见下面3)—14)建立远程地图服务器(服务端)建立可支持客户端访问、作为底图叠加的远程地图服务器建立分块切图工具,可以把制作好的全国1:1万地图分10级切成不同详细程度的地图图片块(分级处理、切片处理)大量分块地图图片通过MongoDB来管理,服务器根据客户端请求,发送指定位置的分块地图图片,提供按缩放等级、经纬度和图名在线访问地图切片大量矢量图元也通过MongoDB管理,服务器根据地图制图文件生成XML地图渲染文件,发给客户端,由客户端进行渲染对小尺度矢量地图图层的线、面图元进行节点化简,降低数据量和OpenStreeMap具有相同的HTTP访问接口和OpenStreeMap具有相同的地图投影和坐标系(WGS84)地图显示、缩放、移动连接远程地图服务器,获得和显示分块地图数据如果本地缓存中有分块图片数据和矢量图元组数据(MongoDB组织),则不再下载,直接调用数据显示从全国范围到省、地市、县、街道等逐级细化的地图放大、缩小、移动功能地图显示包括栅格地图和矢量地图两类。栅格地图为分块地图图片,在服务端已渲染好;矢量地图为分层、分块的图元组合,在客户端根据渲染文件进行地图渲染地图缩放、移动后更新显示速度为2秒以内遥感影像地图显示示例Online远程遥感影像、交通图等地图叠加、聚合OpenStreetMap、谷歌、微软等远程地图模式的选择、叠加显示,使坐标能匹配遥感影像、地形、交通地图等显示模式切换叠加自己的远程地图服务器数据,并使坐标能匹配地图数据缓存把远程下载显示过的地图图片(包括自己的地图服务器和其他外部online地图分块图片)进行缓存,下次需要时先检查缓存中有没有,如果没有则下载,如果有就直接用缓存中的数据把远程下载的矢量图元的坐标数据进行缓存,主要是按block存储的图元组数据包地图服务器中按mongoDB存储的数据块提供数据下载远程矢量图层数据接入、渲染和刷新显示建立MongoDB空间数据转换工具,把Arcviewshape文件数据转换为MongoDB分布式存储格式连接远程MongoDB管理的矢量点、线、面图层数据如果本地缓存中有分块矢量图元组数据(MongoDB组织),则不再下载,直接调用数据显示根据当前显示区域坐标查询过滤可显示图元在客户端叠加显示矢量图元在客户端根据渲染文件进行图元渲染客户端地图的平滑刷新人口统计数据指标树管理建立把指标数结构index.txt和Access指标数据转入MongoDB的工具1000多项人口统计数据按指标树进行组织,把结构和真实数据存入MongoDB中连接MongoDB的统计数据指标树结构,进行显示提供指标树的指标单选界面,方便用户选择单项指标进行分级制图提供指标树的指标多选界面,方便用户选择多项指标进行统计制图地图与指标数据关联用户选择指标树中的单项或多项指标MongoDB中存储的矢量图元,可以与指定的指标数据进行关联,即通过矢量图元序号就可以获得指标数据支持多用户对任一矢量图元指定不同指标数据进行关联,相互之间不会干扰动态地图制图加载远程矢量图层,用户选择单项指标,选择色系颜色、符号、分级数,进行分级制图,并生成制图文件和渲染文件,刷新客户端进行最终地图显示加载远程矢量图层,用户选择多项指标,选择统计符号类型、色系颜色,进行统计制图,并生成制图文件和渲染文件,刷新客户端进行最终地图显示统计符号库提供10多种专题统计符号、专题地图色库和制图工具进行地图可视化输入和存储地图图名生成、显示地图图例支持10个用户同时在线制图,提交制图请求后到显示出结果,延迟不超过5秒分级制图和统计制图示例指标数据的列表、ch
Hibernate4实战之第六部分:基本实现原理2013-05-1101:35:00标签:HYPERLINK"http://blog.51cto.com/tag-%E6%95%B0%E6%8D%AE%E5%BA%93.html"\t"_blank"数据库HYPERLINK"http://blog.51cto.com/tag-SQL.html"\t"_blank"SQLHYPERLINK"http://blog.51cto.com/tag-%E5%AF%B9%E8%B1%A1.html"\t"_blank"对象HYPERLINK"http://blog.51cto.com/tag-Hibernate.html"\t"_blank"HibernateHYPERLINK"http://blog.51cto.com/tag-%E8%A1%8C%E4%B8%9A%E6%95%B0%E6%8D%AE.html"\t"_blank"行业数据HYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205813"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205813"http://3001448.blog.51cto.com/2991448/1205813整体流程1:通过configuration来读cfg.xml文件2:得到SessionFactory工厂3:通过SessionFactory工厂来创建Session实例4:通过Session打开事务5:通过session的api操作数据库6:事务提交7:关闭连接 说明:以下分方法描述的实现流程并不是Hibernate的完整实现流程,也不是Hibernate的完整实现顺序,只是描述了Hibernate实现这些方法的主干和基本方式,主要是用来理解这些方法背后都发生了些什么,如果需要详细完整的实现流程,请查阅Hibernate相应文档和源代码INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/22/85496e48dbd61a7c31baa95771128a94__1.bmp"\*MERGEFORMATINET 当我们调用了session.save(UserModel)后:1:TO--->PO:Hibernate先在缓存中查找,如果发现在内部缓存中已经存在相同id的PO,就认为这个数据已经保存了,抛出例外。如果缓存中没有,Hibernate会把传入的这个TO对象放到session控制的实例池去,也就是把一个瞬时对象变成了一个持久化对象。如果需要Hibernate生成主键值,Hibernate就会去生成id并设置到PO上2:客户端提交事务或者刷新内存3:根据model类型和cfg.xml中映射文件的注册来找到相应的hbm.xml文件4:根据hbm.xml文件和model来动态的拼sql,如下:insertinto表名(来自hbm.xml)(字段名列表(来自hbm.xml))values(对应的值的列表(根据hbm.xml从传入的model中获取值))5:真正用JDBC执行sql,把值添加到数据库6:返回这个PO的id。INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/22/b41cef57e703ae3c9f920ecd1433a63d__2.bmp"\*MERGEFORMATINET INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/22/9457a21896d91dab8bfa15f1ee733648__3.bmp"\*MERGEFORMATINET当我们调用了session.update(UserModel)后:1:DO--->PO:首先根据model的主键在hibernate的实例池中查找该对象,找到就抛出错误。如果没有就DO--->PO,Hibernate会把传入的这个DO对象放到session控制的实例池去,也就是把一个瞬时对象变成了一个持久化对象2:客户端提交事务或者刷新内存
Hibernate4实战之第五部分:Hibernate的事务和并发2013-05-1101:34:00标签:HYPERLINK"http://blog.51cto.com/tag-Hibernate.html"\t"_blank"HibernateHYPERLINK"http://blog.51cto.com/tag-%E4%BA%8B%E5%8A%A1.html"\t"_blank"事务HYPERLINK"http://blog.51cto.com/tag-%E5%B9%B6%E5%8F%91.html"\t"_blank"并发HYPERLINK"http://blog.51cto.com/tag-%E6%95%B0%E6%8D%AE%E5%BA%93.html"\t"_blank"数据库HYPERLINK"http://blog.51cto.com/tag-%E5%BA%94%E7%94%A8.html"\t"_blank"应用HYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205814"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205814"http://3001448.blog.51cto.com/2991448/1205814Hibernate本身没有事务的实现Hibernate直接使用JDBC连接和JTA资源,不添加任何附加锁定行为。也就是说你在Hibernate里面使用的事务要么是JDBC的事务,要么是JTA的事务。Hibernate不锁定内存中的对象你的应用程序会按照你的数据库事务的隔离级别规定的那样运作,真正对事务的实现和支持也依赖于数据库。 对于并发处理,Hibernate提供了乐观锁和悲观锁来进行并发处理Hibernate对自动乐观并发控制提供版本管理,针对行级悲观锁定,Hibernate也提供了辅助的(较小的)API,它使用了SELECTFORUPDATE的SQL语法Hibernate的Session是和事务联系在一起的可以通过Session去获取事务的接口,从而进行事务的控制。 数据库事务应该尽可能的短这样能降低数据库中的锁争用。数据库长事务会阻止你的应用程序扩展到高的并发负载。因此,假若在用户思考期间让数据库事务开着,直到整个工作单元完成才关闭这个事务,这绝不是一个好的设计。这就引出一个问题:一个操作单元,也就是一个事务单元的范围应该是多大?一个操作一个?一个请求一个?一个应用一个? 反模式:session-per-operation在单个线程中,不要因为一次简单的数据库调用,就打开和关闭一次Session!数据库事务也是如此。也就是说应该禁止自动事务提交(auto-commit)。 session-per-request最常用的模式是每个请求一个会话。在这种模式下,来自客户端的请求被发送到服务器端,即Hibernate持久化层运行的地方,一个新的HibernateSession被打开,并且执行这个操作单元中所有的数据库操作。一旦操作完成(同时对客户端的响应也准备就绪),session被同步,然后关闭。会话和请求之间的关系是一对一的关系。Hibernate内置了对“当前session(currentsession)”的管理,用于简化此模式。你要做的一切就是在服务器端要处理请求的时候,开启事务,在响应发送给客户之前结束事务,通常使用ServeltFilter来完成。 非托管环境下所谓非托管,指的是:应用程序没有托管到J2EE环境中,通常由Hibernate自己来负责管理数据库连接池。应用程序开发人员必须手工设置事务声明,换句话说,就是手工启动,提交,或者回滚数据库事务。 使用JTA又有两种方式,一种是在Hibernate配置里面修改transaction的factory类,从而在程序里面可以直接使用Hibernate的事务API,也就是程序不用变化。另外一种方式就是直接通过JNDI去查找UserTransaction,然后直接在程序里面使用JTA的接口来控制事务。应用程序级别的版本检查简单点说,就是由应用程序自己实现版本检查来确保对话事务的隔离,从数据访问的角度来说是最低效
Hibernate4实战之第七部分:最佳实践2013-05-1101:36:00标签:HYPERLINK"http://blog.51cto.com/tag-Hibernate4%E5%AE%9E%E6%88%98%E4%B9%8B%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.html"\t"_blank"Hibernate4实战之最佳实践HYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205812"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205812"http://3001448.blog.51cto.com/2991448/1205812设计细颗粒度的持久类并且使用<component>来实现映射。例如使用一个Address持久类来封装street,suburb,state,postcode.这将有利于代码重用和简化代码重构(refactoring)的工作。对持久类声明标识符属性(identifierproperties)。Hibernate中标识符属性是可选的,不过有很多原因来说明你应该使用标识符属性。我们建议标识符应该是“人造”的(自动生成,不涉及业务含义)。使用自然键(naturalkeys)标识对所有的实体都标识出自然键,用<natural-id>进行映射。实现equals()和hashCode(),在其中用组成自然键的属性进行比较。为每个持久类写一个映射文件不要把所有的持久类映射都写到一个大文件中。把com.eg.Foo映射到com/eg/Foo.hbm.xml中,在团队开发环境中,这一点显得特别有意义。把映射文件作为资源加载把映射文件和他们的映射类放在一起进行部署。考虑把查询字符串放在程序外面如果你的查询中调用了非ANSI标准的SQL函数,那么这条实践经验对你适用。把查询字符串放在映射文件中可以让程序具有更好的可移植性。使用绑定变量就像在JDBC编程中一样,应该总是用占位符"?"来替换非常量值,不要在查询中用字符串值来构造非常量值!更好的办法是在查询中使用命名参数。不要自己来管理JDBCconnectionsHibernate允许应用程序自己来管理JDBCconnections,但是应该作为最后没有办法的办法。如果你不能使用Hibernate内建的connectionsproviders,那么考虑实现自己来实现org.hibernate.connection.ConnectionProvider考虑使用用户自定义类型(customtype)假设你有一个Java类型,来自某些类库,需要被持久化,但是该类没有提供映射操作需要的存取方法。那么你应该考虑实现org.hibernate.UserType接口。这种办法使程序代码写起来更加自如,不再需要考虑类与Hibernatetype之间的相互转换。 在性能瓶颈的地方使用硬编码的JDBC在系统中对性能要求很严格的一些部分,某些操作也许直接使用JDBC会更好。但是请先确认这的确是一个瓶颈,并且不要想当然认为JDBC一定会更快。如果确实需要直接使用JDBC,那么最好打开一个HibernateSession然后从Session获得connection,按照这种办法你仍然可以使用同样的transaction策略和底层的connectionprovider。理解Session清洗(flushing)Session会不时的向数据库同步持久化状态,如果这种操作进行的过于频繁,性能会受到一定的影响。有时候你可以通过禁止自动flushing,尽量最小化非必要的flushing操作,或者更进一步,在一个特定的transaction中改变查询和其它操作的顺序。在三层结构中,考虑使用托管对象(detachedobject)当使用一个servlet/sessionbean类型的架构的时候,你可以把已加载的持久对象在sessionbean层和servlet/JSP层之间来回传递。使用新的session来为每个请求服务,使用Session.merge()或者Session.saveOrUpdate()来与数据库同步。在两层结构中,考虑使用长持久上下文(longpers
Hibernate4实战之第二部分:Hibernate的基本配置2013-05-1101:32:00标签:HYPERLINK"http://blog.51cto.com/tag-Hibernate.html"\t"_blank"HibernateHYPERLINK"http://blog.51cto.com/tag-%E7%BC%96%E7%A8%8B.html"\t"_blank"编程HYPERLINK"http://blog.51cto.com/tag-c3p0.html"\t"_blank"c3p0HYPERLINK"http://blog.51cto.com/tag-Java.html"\t"_blank"JavaHYPERLINK"http://blog.51cto.com/tag-%E6%95%B0%E6%8D%AE%E5%BA%93.html"\t"_blank"数据库HYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205817"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205817"http://3001448.blog.51cto.com/2991448/1205817可编程的配置方式-1如果在配置cfg.xml的时候,不想在里面配置hbm.xml怎么办呢?可在程序里使用可编程的配置方式,也就是使用程序来指定在cfg.xml里面的配置信息,不推荐这种方式。如下:Configurationcfg=newConfiguration() .addResource("Item.hbm.xml") .addResource("Bid.hbm.xml"); 一个替代方法(有时是更好选择)是,指定被映射的类,让Hibernate帮你寻找映射定义文件:Configurationcfg=newConfiguration() .addClass(org.hibernate.auction.Item.class) .addClass(org.hibernate.auction.Bid.class);这种方式消除了任何对文件名的硬编码可编程的配置方式-2还可以通过编程的方式来指定配置属性:Configurationcfg=newConfiguration() .addClass(org.hibernate.auction.Item.class) .setProperty("hibernate.dialect","org.hibernate.dialect.MySQLInnoDBDialect") .setProperty("hibernate.connection.datasource","java:comp/env/jdbc/test") .setProperty("hibernate.order_updates","true");其他可以传入配置属性的方式:1:properties文件2:xml文件3:设置Java的系统属性,形如:java–Dproperty=value另外要注意一点:org.hibernate.cfg.Configuration实例被设计成启动期间(startup-time)对象,一旦SessionFactory创建完成它就被丢弃了。 与数据库连接的配置有两种方法,一种是JDBC,一种是DataSourceJDBC的配置INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/c7b4a79cc0e14038212cc6d54ba26252__%E5%9B%BE%E7%89%871.png"\*MERGEFORMATINET示例:<propertyame="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property><propertyname="connect
Hibernate4实战之第一部分Hibernate入门2013-05-1101:31:00标签:HYPERLINK"http://blog.51cto.com/tag-Hibernate.html"\t"_blank"HibernateHYPERLINK"http://blog.51cto.com/tag-Hibernate4.html"\t"_blank"Hibernate4HYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205818"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205818"http://3001448.blog.51cto.com/2991448/1205818Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(ObjectRelationalMapping) INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/bce2ea80efb685abf97a312ebcf61b34__1.JPG"\*MERGEFORMATINETORMapping基本对应规则:1:类跟表相对应2:类的属性跟表的字段相对应3:类的实例与表中具体的一条记录相对应4:一个类可以对应多个表,一个表也可以对应对个类5:DB中的表可以没有主键,但是Object中必须设置主键字段6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样 ORMapping的基本实现方式:使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。大家想想,我们实现过ORMapping吗? INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/fef823b1bb37a91ec3013fe2bb441ffb__2.JPG"\*MERGEFORMATINET INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/8792eaf947c4702ef7556c32cbbe2fe9__3.JPG"\*MERGEFORMATINETHibernate能干什么: Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。 Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/839e032a79e7826912b1c67e51c18f69__4.JPG"\*MERGEFORMATINET一个非常简要的Hibernate体系结构的高层概要图INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/6f6ef5745fb905fd91537ca799ca2b1a__5.JPG"\*MERGEFORMATINETHibernate运行时体系结构“最小”的体系结构方案,要求应用程序提供自己的JDBC连接并管理自己的事务。这种方案使用了HibernateAPI的最小子集. INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/c305b617ab7081c270a20836ba1dd
Hibernate4实战之第三部分:Hibernate的基本开发2013-05-1101:33:00标签:HYPERLINK"http://blog.51cto.com/tag-Hibernate.html"\t"_blank"HibernateHYPERLINK"http://blog.51cto.com/tag-SQL.html"\t"_blank"SQLHYPERLINK"http://blog.51cto.com/tag-%E8%A1%8C%E4%B8%9A%E6%95%B0%E6%8D%AE.html"\t"_blank"行业数据HYPERLINK"http://blog.51cto.com/tag-%E6%95%B0%E6%8D%AE%E5%BA%93.html"\t"_blank"数据库HYPERLINK"http://blog.51cto.com/tag-%E5%AF%B9%E8%B1%A1.html"\t"_blank"对象HYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205816"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205816"http://3001448.blog.51cto.com/2991448/12058161:瞬时(Transient)-由new操作符创建,且尚未与HibernateSession关联的对象被认定为瞬时的。瞬时对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。如果瞬时对象在程序中没有被引用,它会被垃圾回收器销毁。使用HibernateSession可以将其变为持久状态,Hibernate会自动执行必要的SQL语句。 2:持久(Persistent)-持久的实例在数据库中有对应的记录,并拥有一个持久化标识。持久的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。Hibernate会检测到处于持久状态的对象的任何改动,在当前操作单元执行完毕时将对象数据与数据库同步。开发者不需要手动执行UPDATE。将对象从持久状态变成瞬时状态同样也不需要手动执行DELETE语句。 3:脱管(Detached)-与持久对象关联的Session被关闭后,对象就变为脱管的。对脱管对象的引用依然有效,对象可继续被修改。脱管对象如果重新关联到某个新的Session上,会再次转变为持久的,在脱管期间的改动将被持久化到数据库。INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/41af9144df34dda7df09323551ff1c4b__%E6%9C%AA%E5%91%BD%E5%90%8D.PNG"\*MERGEFORMATINET 通过Session接口来操作Hibernate新增——save方法、persist方法1:persist()使一个临时实例持久化。然而,它不保证立即把标识符值分配给持久性实例,这会发生在flush的时候。persist()也保证它在事务边界外调用时不会执行INSERT语句。这对于长期运行的带有扩展会话/持久化上下文的会话是很有用的。2:save()保证返回一个标识符。如果需要运行INSERT来获取标识符(如"identity"而非"sequence"生成器),这个INSERT将立即执行,不管你是否在事务内部还是外部。这对于长期运行的带有扩展会话/持久化上下文的会话来说会出现问题。 删除——delete方法修改——有四种方法来做,分别是:1:直接在Session打开的时候load对象,然后修改这个持久对象,在事务提交的时候,会自动flush到数据库中。2:修改托管对象,可用update或merge方法3:自动状态检测:saveOrUpdate方法update和merge方法1:如果数据库里面存在你要修改的记录,update每次是直接执行修改语句;而merge是先在缓存中查找,缓存中没有相应数据,就到数据库去查询,然后再合并数据,如果数据是一样的,那么merge方法不会去做修改,如果数据有不一样的地方,
Hibernate4实战之第四部分:关系映射2013-05-1101:33:00标签:HYPERLINK"http://blog.51cto.com/tag-Hibernate.html"\t"_blank"HibernateHYPERLINK"http://blog.51cto.com/tag-Java.html"\t"_blank"JavaHYPERLINK"http://blog.51cto.com/tag-%E7%B1%BB.html"\t"_blank"类HYPERLINK"http://blog.51cto.com/tag-SQL.html"\t"_blank"SQLHYPERLINK"http://blog.51cto.com/tag-String.html"\t"_blank"StringHYPERLINK"http://blog.51cto.com/zt/617"\t"_blank"INCLUDEPICTURE"http://3001448.blog.51cto.com/image/zt/big.png"\*MERGEFORMATINET原创作品,允许转载,转载时请务必以超链接形式标明文章HYPERLINK"http://3001448.blog.51cto.com/2991448/1205815"\t"_blank"原始出处、作者信息和本声明。否则将追究法律责任。HYPERLINK"http://3001448.blog.51cto.com/2991448/1205815"http://3001448.blog.51cto.com/2991448/1205815数据表之间的关系分为三类:一对一、一对多、多对多一对一数据表(部门表 和 部门主管表)一对多数据表(部门表 和 部门下的人员表)多对多数据表(部门表 和 人员表) INCLUDEPICTURE"http://sishuok.com/forum/upload/2012/2/21/ba8cdefeaa03414a6b2ef409df61f73a__1.bmp"\*MERGEFORMATINET根据相互寻找的关系又分:单向和双向对象一对一(双向)java代码:HYPERLINK"http://sishuok.com/forum/blogPost/list/2479.html"查看HYPERLINK"http://sishuok.com/forum/blogPost/list/2479.html"复制到剪贴板HYPERLINK"http://sishuok.com/forum/blogPost/list/2479.html"打印public class A { private B b = null; } public class B { private A a = null; } n对象一对多 (双向) public class A { private B b = null; } public class B { private Collection<A> colA = null; } n对象多对多 (双向) public class A { private Collection<B> colB = null; } public class B { private Collection<A> colA = null; } 双向一对多是最常用的映射关系<key>元素<key>元素在父映射元素定义了对新表的连接,并且在被连接表中定义了一个外键引用原表的主键的情况下经常使用。java代码:HYPERLINK"http://sishuok.com/forum/blogPost/list/2479.html"查看HYPERLINK"http://sishuok.com/forum/blogPost/list/2479.html"复制到剪贴板HYPERLINK"http://sishuok.com/forum/blogPost/list/2479.html"打印<key column="columnname"(1) on-delete="noaction|cascade"(2) property-ref="propertyName"(3) not-null="true|false"(4) update="true|false"(5) unique="true|false"(6) /> (1)column(可选):外键字段的名称。也可以通过嵌套的<column>指定。(2)on-delete(可选,默认是noacti
准备3台机器假设有三台机器,hostname和ip对应关系是:192.168.1.131zk01192.168.1.132zk02192.168.1.133zk03ZooKeeper不存在明显的master/slave关系,各个节点都是服务器,leader挂了,会立马从follower中选举一个出来作为leader.由于没有主从关系,也不用配置SSH无密码登录了,各个zk服务器是自己启动的,互相之间通过TCP端口来交换数据。
Redis使用Redis简介:redis是一个开源的、网络化的、基于内存的、可进行数据持久化的Key-Value存储系统。类似于其他结构存储系统,通过key-value的方式来保存数据,支持的类型有String、List、Set、Hash、Sortset。Redis安装:可从官网上下载redis,rar文件,解压后,进入bin---release文件下双击redis-server文件可打开运行程序,双击redis-cli可打开客户端。在客户端可以使用简单的命令来给redis缓冲set值。Redis代码中使用:这里建立的是一个maven项目,需要在pom.xml文件中加入引入redis的jar文件。
笔试题之Java基础部分基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法,其他。有些题来自网上搜集整理,有些题来自传智播客学员面试后的反馈,说真的,少数一些网上的面试题,我真怀疑其是否还有存在价值!1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
基本类和接口一、javax.servlet.Servlet接口servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。servlet接口中的方法voidinit(ServletConfitconfig)throwsServletException在servlet被载入后和实施服务前由servlet引擎进行?次性调用。如果init()产生溢出UnavailableException,则servle退出服务。ServletConfiggetServletConfig()返回传递到servlet的init()方法的ServletConfig对象
Java的正则表达式讲解:(为了能看清,本文正则表达式用中文的句号代替英文句点)英文句点符号:匹配单个任意字符。eg:表达式”t。o可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。方括号:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。eg:表达式:t[abcd]n只可以匹配:tan,tbn,tcn,tdn。不可以匹配:thn,tabn,tn等。3|符号。相当与“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。eg:表达式:t(a|b|c|dd)n只可以匹配:tan,tbn,tcn,tddn。
在本机上在准备一个tomcat用于在本机上运行,这样有两台tomcat便于测试,那么就需要更改一下配置:打开第二个tomcat的conf文件夹下的server.xml,更换各个端口,防止与本机的tomcat端口冲突:在同目录下的web.xml文件,添加以下配置:更改完之后启动这第二个tomcat然后再这第二个tomcat的webapps目录下新建一个空的web项目,里面有一个upload文件夹,如下:编写一个客户端的Java项目导入jersey的jar包和依赖包
工作流基础工作流相关概念工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。工作流管理系统(WfMS,WorkflowManagementSystem)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持:定义工作流:包括具体的活动、规则等运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。定义工作流执行工作流采用工作流管理系统的优点提高系统的柔性,适应业务流程的变化 实现更好的业务过程控制,提高顾客服务质量降低系统开发和维护成本工作流框架有:Jbpm、OSWorkflow、ActiveBPEL、YAWL等OA(办公自动化)主要技术之一就是工作流。
(B)A,GPS定位更精确,缺点是只能在户外使用B,NETWORK通过基站和Wi-Fi信号来获取位置信息,速度较慢,耗电较少。C,获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。D,GPS定位耗电严重,并且返回用户位置信息的速度远不能满足用户需求。(2分)在开发AppWidget窗口小部件时,需要继承(D)类A,AppWidgetReceiverB,AppWidgetConfigureC,AppWidgetManagerD,AppWidgetProvider(4分)在AsyncTask中下列哪个方法是负责执行那些很耗时的后台计算工作的