Entries by Yu.Zhong

Hibernate Tools for Eclipse安装和使用

Hibernate Tools for Eclipse Plugins 的安装和使用,这段时间事情比较多一直没有写博客,现在事情忙完了,公司的书柜里有一堆关于Hibernate、Struts和Spring的书,翻了翻发现书中的内容基本上都过时,我喜欢从官方网站上看资料学习最新的技术,这次是我阅读了Hibernate Tools的官方Documents后根据自己的实践总结的。 安装Hibernate插件 http://download.jboss.org/jbosstools/updates/development http://download.jboss.org/jbosstools/updates/stable/ 启动Eclipse 3.4.1 选择Help-Software Updates,打开Available Software选项卡,然后单击Add Sites 分别输入JBoos的工具和Hibernate工具在线安装地址,然后选择安装Hibernate ToolsJboos 和Tools Development Release,如图示 等待安装成功,安装过程因要下载不少Jar包,视你的网络速度不同,需要的时间不同,安装完毕Eclipse将提示你重新启动,重启Eclipse安装完成。(注意:先安装Hibernate Tools成功后,再安装Jboos Tools Development Release) 新建一个工程MyHibernate,然后然后选择File-New-Hibernate Configuration File(cfg.xml),打开创建Hibernate配置向导,我这里配置了一个SQL Server2000数据库,选中Create a console configuration 复选项,以此配置文件创建Hibernate控制台配置。 创建Hibernate Console Configuration向导有Main、Option、Classpath、Mappings、Common五个选项卡,如果你在工程中已经引入了JDBC驱动则,直接点击Finish完成即可,以后在完成其他配置。 完成后,你就可以在Hibernate Configuration视图窗口看到配置项,已经链接到数据,并把你数据库中的表列出来,如果在这一步你没有成功的话,请检查你是否以正确安装的Hibernate Tools和JBoos Tools这个很重要;另外如果提示找不到JDBC驱动的话,说明你工程的classpath中没有JDBC驱动jar包,加载正确的驱动即可。 如果你不能看到上图所示的Hibernate Configurations窗口,说明你没有打开这个View,选择Windows-Show View-Other,然后选择Hibernate Configurations即可打开这个窗口,窗口的位置无关紧要,你喜欢放在那里就把他托过去。 下面将介绍如何使用Hibernate Code Generation来产生数据库表映射Java对象,首先要在数据库中创建表,并设置号字段名和主键(主键很重要,关于主键的选择建议你使用与业务无关的ID作为主键);打开Hibernate视图找到Hibernate运行图标下的Hibernate Code Generation Configurations,如果找不到这个图标说明没有在Hibernate视图下。 配置一个新的配置项,输入配置项的名称MyHibernateCode,选择Hibernate Configuration(即已配好的Hibernate控制台配置),在Output directory中输入反向代码输出目录(注意这个目录一般只需项目的源代码src),然后复选Reverse engineer from JDBC connection,在Package中输入包名(你要存放到src下那个包中),最后单击Setup-Create New打开Reverse engineer配置向导,选择配置存储位置(我放到了src目录下),最后选择要反向工程的表。 […]

PowerDesigner生成sql脚本

一、生成sql server 2000或oracle建表sql脚本 1、新建一个物理模型,通过database菜单下的change current dbms可查看当前所用的DBMS是什么类型的,比如sql server 2000 或oracle 10g,当前选择sql server 2000。 2、在新建的dbms为sql server 2000的物理模型中添加表及关系,通过database菜单下的generate database可将当前DBMS的表结构及关系导出成sql语句。 3、若想将sql server 2000的表结构及关系变成oracl 10g的表结构及关系,可通过Tools菜单下的generate physical data model,再选择DBMS为oracle10g,就可生成oracl10g的表结构及关系。 4、若想将oracl10g中的表结构及关系导出成sql语句,执行database菜单下的generate database可将当前DBMS的表结构及关系导出成sql语句。 注意:oracle10g生成的sql语句可能表名及字段名存在用引号括起的情况,不用担心,通过简单的设置即可解决。 二、PowerDesigner生成数据库建表sql脚本时出现双引号解决方法(测试通过的软件版本为PowerDesigner V15.1.0.2850) PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号。其实加引号是PL/SQL的规范,数据库会严格按照“”中的名称建表,如果没有“”,会按照 ORACLE默认的设置建表(DBA STUDIO里面),默认是全部大写,这样,在ORACLE数据库里的字段就如“Column_1”。如果你把引号去掉,ORACLE自动默认为全部大写,即“COLUMN_1”,所以这段SQL在PL/SQL中执行的时候是没有任何问题的,如果不加引号,在PL/SQL会自动识别为大写。如果加了引号,sql或者hql查询“Column_1=’XXX’”时,就会报错:ORA-00904: “COLUMN_1”: 无效的标识符,除非写为“‘Column_1’=’XXX’”。 这个问题是生成脚本格式的问题,因此,我们可以尝试在DBMS配置文件中修改相应的格式设置来解决这个问题。选择“DBMS Properties”,选择Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES”,改为“No”,点击【应用】按钮。

使用JAVA获取客户端MAC地址

//Java获得CPU序列号和网卡Mac地址 /* 利用Runtime call操作系统的命令,具体的命令取决于不同的操作系统,注意不要调用Runtime.getRuntime().exec(String)接口,要用Runtime.getRuntime().exec(String[])这个接口,不然复杂命令的执行会有问题。例子如下(拿cpu个数,其他类似): 定义命令: WindowsCmd =”cmd.exe /c echo %NUMBER_OF_PROCESSORS%”;//windows的特殊 SolarisCmd = {“/bin/sh”, “-c”, “/usr/sbin/psrinfo | wc -l”}; AIXCmd = {“/bin/sh”, “-c”, “/usr/sbin/lsdev -Cc processor | wc -l”}; HPUXCmd = {“/bin/sh”, “-c”, “echo “map” | /usr/sbin/cstm | grep CPU | wc -l “}; LinuxCmd = {“/bin/sh”, “-c”, “cat /proc/cpuinfo | grep ^process | wc -l”}; […]

利用Spring的AOP处理项目日志

AOP正在成为软件开发的下一个圣杯。使用AOP,你可以将处理aspect的代码注入主程序, 通常主程序的主要目的并不在于处理这些aspect。 AOP可以防止代码混乱。 为了理解AOP 如何做到这点,考虑一下记日志的工作。日志本身不太可能是你开发的主程序的主要任务。 如果能将“不可见的”、通用的日志代码注入主程序中,那该多好啊。AOP可以帮助你做到。 Spring framework是很有前途的AOP技术。作为一种非侵略性的,轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java程序中使用它。这意味着开发团队里只需 一人要对付AOP framework,其他人还是象往常一样编程。 AOP是很多直觉难以理解的术语的根源。幸运的是,你只要理解三个概念,就可以编写AOP模块。这三个概念是:advice,pointcut和advisor。 advice是你想向别的程序内部不同的地方注入的代码。pointcut定义了需要注入advice的位置,通常是某个特定的类的一个public方法。advisor是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码。 首先我们要写一个普通类,此类作为日志记录类。 比如 package chen.hui.log public classs MyLog{ //在类里面写方法,方法名诗可以任意的。此处我用标准的before和after来表示 public void before(){ System.out.println(“被拦截方法调用之前调用此方法,输出此语句”); } public void after(){ System.out.println(“被拦截方法调用之后调用此方法,输出此语句”); } } 其次我们在写一个类作为被拦截类(Spring的AOP就是拦截这个类里面的方法) package chen.hui.log public class Test{//此类中方法可以写任意多个。我只写一个 public void test(){ Sytem.out.println(“测试类的test方法被调用”); } } 最后进行配置文件的编写。在Spring的配置文件中我们需要进行几句话的配置 <bean id=”testLog”></bean> <!–将日志类注入到bean中。–> <aop:config> <aop:aspect id=”b” ref=”testLog”><!–调用日志类–> <aop:pointcut id=”log” expression=”execution(* chen.hui.log.*.*(..))”/><!–配置在log包下所有的类在调用之前都会被拦截–> <aop:before […]

javascript在翻译领域中应该注意的问题(二)

七:JS的运算语句     和其他的编程语言一样,在JS也有基本的运算语句,而这些语句都是开发过程中惊经常出现的,所以在翻译的过程中,如果遇到如下的一些语句包起来的单词,说明它是一段完整的程序,我们则不需要进行翻译。 1.条件语句: if语句,例如:if(这是条件判断) {……这里是判断通过后要执行的代码} if…else 语句, 例如: if(){ } else{ } if…else if….else 语句,例如: if() { } else if() { } else { } switch 语句 ,例如:switch(n) { case 1 : 执行代码1 break; case 2 : 执行代码2 break; }     此处需要补充一下的是“break” 是这些运算语句中的一个关键字,如果它出现在这些运算语句中内的话,他是不需要翻译的,如果是其他地方单独出现的话,则需要翻译,除了“break”外,在这些语句中还会有可能出现“continue”也是一样的。 2.循环语句: JS支持不同类型的循环: 1.for :语法 for(语句1;语句2;语句3){ 被执行的代码块 } 2.for/in :例:var person={name:”john”,sex:”man”}; for(x in person) […]

javascript在翻译领域中应该注意的问题(一)

JavaScript(以下简称JS) 是属于网络的脚本语言,关于JS的一些应用,写法啊之类的,在这里就不多说了,对于一个翻译人员来说最重要的还是想知道,当遇到JS脚本语言的一些相关的信息时,什么时候该译,什么时候又不需要翻译。对此,我将利用自己现有的JS知识分几个方面进行分析: 一:HTML中的JS 1.在html中JS的实现必须位于 <script> 与 </script> 标签之间,也就是说当看到<script>这样的标签时,那说明它里面的内容就是JS运行的代码,这个时候不需要对里面的内容翻译。 2.当遇到像document.get……这样的语句时,则说明JS在访问某个html元素,例如document.getElementById(id) ,document.write(“<p>my first javascript</p>”)方法,这个时候切勿把document翻译成文件或公文,这个时候document是不需要翻译的,他后面的“.”也不是句号。 二:JS的注释 1.单行注释以// 开头 2.多行注释以 /* 开始,以 */ 结尾 3.JS不会执行注释,加注释来对 JS进行解释,可以提高代码的可读性。而注释在翻译过程是需要翻译出来,因为注释也是作为文档的一部分。 三:JS变量 在JS中,变量的声明通常以var开头,例如: var x = 2; var是脚本语言的关键字,这是不需要翻译的。 四:JS对象 在 JS中,对象是数据(变量),拥有属性和方法,当你看到var txt = “Hello”;时,说明这是在声明一个txt的对象,竟然是对象,它就会有相对应的属性和方法,就像好比说,人是一个对象,眼睛,鼻子,嘴巴就是属性,吃饭,睡觉,这些都是行为或者说方法。例如:txt.length=5和txt.search(),这就是表示上面的txt对象的属性长度和方法,其中.search()方法,这些都是不需要翻译的,由此可以看出只要是一个英文单词前面加了var 这个关键字则说明他已经被声明为一个变量或者对象,那么它“.”后面的内容就是他的属性或者方法,这些都不需要翻译。 五:JS函数 1.JS函数就是包裹在花括号中的代码块,前面使用了关键词 function,例如: function myFunction() { alert(“Hello World!”); } 当你看到这样的以function关键字开头的,说明他是JS的函数定义标准,此后从 function开头到以“}”结束的内容均不需要翻译。注意:JS对大小写敏感。关键词  function 必须是小写的,如果是function是大写的,则不是JS的函数定义标准,说 明是需要翻译的。 六:JS的特殊运算 例如:greeting=(visitor==”PRES”)?”Dear President “:”Dear “;这是JS的条件运算,这在翻译中也是不需要翻译的,这句话的意思是如果变量 visitor 中的值是 “PRES”,则向变量greeting 赋值 “Dear President “,否则赋值 “Dear”。 由于时间仓促,这篇博文先在此告一个小段落,也由于本人现有JS知识也是相对的微薄,如在描述过程当中有不巧当或者错误的地方,欢迎读者提出和建议。下周继续更新。    

初次接触XML RPC

目前项目马上就要用到xml rpc技术了,为了更快的掌握及使用,写个小博客加深理解。 xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为 了提高各个分立机器的“互操作性”而发明出来的技术。 java与xmlrpc相互对应关系: 在这里简单描述一下: >xmlrpc中的Array类型,对应到java中的Vector类型 例如:在RPC Server中的某个服务方法的返回值的声明类型是String[],但在Client中接收到的将是Vector对象; 反之,如果Client传送过去的调用参数为String[],但在RPC Server中所接收到的将是Vector对象 当然,如果我们不使用String[],直接声明为Vector,也是可以的。 >xmlrpc中的struct类型,对应到java中的Hashtable类型 > 其它的类型,如:String,int,double,boolean,Date等,都比较好对应。需要注意的是:在rpc Client中,如果使用到int/double/boolean这些基本类型时,需要将他们封装成一个相应的Object,例如:Integer /Double/Boolean。 下面是xml rpc的一个工作原理图,可加深理解。

基于springAOP注解实现日志功能

   最近准备开始新项目,在项目启动前,我们的架构师分配了个任务给我,利用spring的切面技术做一个日志管理的案例。要求很简单,就是需要记录:谁在什么时候对谁做了什么操作,同时在日志的描述中还要有修改前后内容的对比。话说两句话是挺简单的,但是对于对spring只有初学者水平的我还是有点难度的,于是各种百度,各种谷歌,各种想。终于在这篇http://kaowww153.iteye.com/blog/603891博客中得到启发,但是里面的内容写的还是不够完整,和我的需求也有些不一样。经过多次的修改和测试,终于成功通过。今天闲来无事,写个博文,以备下次需要做好笔记。话不多说,把过程写下: 1.首先创建一个自定义注解,如下: @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface RecordLog { } 2.写一个过滤方法,这个方法是实现MethodIntherceptor接口的invoke方法。 public class LogAroundInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { return returnObject; } 3.在spring的applicationContext.xml文件里需要对我们的切面和注解进行配置。 <bean id=”common” class=”com.cstp.jdbc.test.Common”> </bean> <aop:config> <aop:pointcut id=”logPointCuts” expression=”execution(* com.cstp.jdbc.test.*.*(..))” /> <aop:advisor pointcut-ref=”logPointCuts” advice-ref=”springMethodInterceptor” /> </aop:config> <bean id=”springMethodInterceptor” class=”com.cstp.custom.interfaces.LogAroundInterceptor”> </bean> </beans> 4.我的实体类common @RecordLog public void update(User user, User opeartor, HttpServletRequest request) { UserDao userDao = new UserDaoImpl(); userDao.updateUser(user); System.out.println(“修改成功“); } 5.在servlet测试 UserDao userDao = new UserDaoImpl(); BeanFactory factory = new ClassPathXmlApplicationContext(“applicationContext.xml”); Common c = (Common) factory.getBean(“common”); User user = new User(); user.setId(2); user.setName(“杰“); user.setPassword(“123456”); user.setAge(18); user.setSex(“女“); User opeartor = userDao.findAllUserById(3); User oldUser = userDao.findAllUserById(2); HttpSession session = request.getSession(); session.setAttribute(“oldUser”, oldUser); c.update(user, opeartor, request); 测试结果:成功获得我所需要的新旧对象,以及操作人,时间,描述等都可以在getSysLog()方法中获取,至于如何添加就简单啦,就不写上了。 6.使用方法很简单了:在需要添加日志的方法上加上我们的注解@RecordLog就可以了(就像我common类里的update方法一样)。

JSF入门学习二

JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在配置文件中,您只要修改配置文件,就可以修改 Bean 之间的相依关系。 Backing Beans JSF使用JavaBeans来达到程序逻辑与试图分离的目的,在JSF中的Bean其角色是属于Backing Bean,又称之为Glue Bean,其作用是真正的业务逻辑Bean级UI组件之间搭起桥梁,在Backing Bean中会呼叫业务逻辑Bean处理使用者的请求,或者将业务逻辑处理结果放置其中,等待UI组件取出当中的值并显示给使用者。JSF将BEan 的管理集中在faces-config.xml中,是设定所要使用的Bean类,设定名称。 JSF页面上使用Expression Language来取得或设定Bean的属性 设定Bean的存活范围,你可以设定为request、session、与application,设定为request时,Bean的存活时间为请求阶段,设定为session则在使用者和应用程序交互开始,直到关闭浏览器或显示的结束会话为止(例如登出程序),设定为application时,则Bean会一直存活,直到应用程序关闭为止。 您还可以将存活范围设定为none,当设定为none时为在需要的时候生成一个新的Bean,例如您在一个method中想要生成一个临时的bean,就可以降至设定为none。 JSF页面上取得Bean 的属性,是使用JSF表示语言(Expression Language)。要注意的是,JSF表示语言是写成#{expression},而JSP表示语言是写成${expression},因为表示层可能使用JSP,所以必须区分,另外要注意的是,JSF标签上的属性设定时,只接受JSF表示语言。

JSF入门学习(一)

经过了几个月的头脑风暴,上一个项目的resource模块终于告一段落了。在接下来要的项目里,据分析,我们需要用到JSF(Java Server Faces)技术。初来咋到,本着对JSF的不熟悉,我打算在项目启动之前,先自己学习一点关于JSF的知识,对此也做个小小的学习笔记,以后日后用到之时有一些参考。 初次接触JSF,发现它与struts有许多相似之处。有人力挺struts,说资料多,门槛低,招人容易;也有人力挺JSF,说组件开发是趋势,JSF技术新,虽然门槛高些,但是效率高,尤其适合与后台频繁进行复杂的数据交互的应用。听罢两方的激烈讨论,我不由自主的对JSF产生了好感. JSF2.0入门: 网上搜了搜,发现JSF的学习资料很少,尤其是最新出的JSF2.0标准已经出了,资料更少,更别提视频的。既然是自学,当然要学最新的咯,无意中发现一个网友自己录的爆笑JSF2.0讲解视频,内容不是很多,但是入个门是没有问题了。 JSF框架选择: 现在有很多很多的JSF框架供我们选择:ICEFaces、RichFaces、PrimeFaces等等。但是网上讨论最多的是ICEFaces vs RichFaces,我看了之后个人比较中意RichFaces的风格,而且主要因为它是免费的。ICEFaces只有收费版功能才全,但网上的推荐都是说如果能付钱,最好用ICEFaces,它的功能比较强大。 Jbosstools插件安装: 需要特别注意的是,Eclipse和Jbosstools的版本一定要对上:里面有stable、milestone、nightly三种版本。本人不太清楚到底有什么区别,我选择的是stable版本(JBoss Tools 3.2 :: Eclipse 3.6.2)和 Eclipse IDE for Java EE Developers 版本(这是RichFaces Guide要求的),两个版本对不上好像会出问题,主要是速度问题。 好了,本次笔记先记录下简单的入门以及安装,下一次继续分享JSF的一些标签和应用。