`
文章列表
  最近的项目中有个生成xml字符串的需求: 第三方合作伙伴提交一个请求,我们作为server端负责从DB中查询出符合条件的记录,然后构造成xml字符串返回给第三方合作伙伴。   以前有过dom的使用经验,但dom的缺点大家都知道:当xml比较复杂时,性能不是很好。当DB中记录比较多时,需要构造的xml会比较复杂。网上大家都说XmlBeans不错,这次尝试使用下,以下是具体的应用过程。        1.         准备工作
遗留系统采用了struts和hibernate,层次划分是很常见的表现层、service层、DAO层。   目前遗留系统有个事务处理的问题。代码在事务处理上面不统一:有的放在DAO层,有的在service层,各位看官肯定要说,这都没有统一吗,简直一堆狗屎。不错,我也觉得臭的受不了,所以采用了个简单的办法,真的很简单,呵呵。   其实如果事务处理的合理,事务处理放在哪一层倒是都可以。对于划分出服务层的系统来说,事务放在DAO处理会造成service层成为一个鸡肋的层次。关键是遗留系统处理service层事务的代码有问题:假设一个service方法包含了2个DAO的操作,且看有的代码:   Serv ...
首先明确的是:Java中的浮点数类型的float和double是不能够用来进行资金的运算。   在《Effective Java》中也提到这个原则:float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。   怎样在实际中应用呢,其实也不难。简单提几点: 1.  数据库表的设计 资金字段的数据类型一般定义为
javac -classpath的使用:  javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加上-classpath参数,通过使用以下三种类型的方法 来指导编译器在编译的时候去指定的路径下查找引用类。   (1).绝对路径:javac -classpath c:\junit3.8.1\junit.jar   Xxx.java(2).相对路径:javac -classpath ..\junit3.8.1\Junit.javr  Xxx.java(3).系统变量:javac -classpat ...
代理模式在客户对象调用服务提供者对象上方法的前后,执行诸如日志(logging)和计数(counting)一系列附加功能时很有用。代理模式建议把这些附加功能封装在一个单独的对象,这个对象就是指计数代理对象,而不是把这些附加的功能实现放到服务提供者的内部。   良好的对象设计的一个特征就是对象要专注于提供特定的功能。换句话说,理想的对象不应该做各种不相干的事情。把诸如日志(logging)和计数(counting)等类似的功能封装为一个单独的对象,而让服务提供者对象仅提供它自己的特定功能。也就是说,只允许服务提供者对象执行定义良好、特定的任务。   代理被设计成可以被客户访问的与服务提 ...
我这里只考虑了直接使用struts API的情况,使用自定义的token生成机制与此类似。 产生重复提交的两种情况: 1.用户操作完成后,点后退,返回jsp页面,再次提交。 2.用户操作完成后,刷新当前页。 简单回想下token的使用: 1.生成token,并保存到HttpSession中; 2.限制重复提交的jsp页面要从session中get这个token,并提交到servlet(或者struts action); 3.servlet(或者struts action)中比较HttpSession中保存的token和jsp页面提交来的token是否内容相同。如果相同,则同意提交;否则,操作 ...
1.产品按指定的顺序显示。 业务逻辑大致如下,当前产品推出了多个套餐。套餐ID是从别人的接口中获取的,返回的是无顺序的。但是不排序的话,JSP页面上显示会很乱,这样有了对套餐排序的需求。 原来是在程序中定义了一个数组,以数组中套餐ID的顺序来排序,初步实现了套餐排序的功能。由于新套餐的推出较频繁,这样每次增加新套餐,数组就得做相应地改动,也就是每次都需要修改程序,生产系统的server也要重新启动,感觉需要改进。 如果有新套餐推出,不用修改程序,不用重启server,就比较理想了。于是有了如下想法: 做一个配置文件,将套餐信息包含其中,程序中解析此xml文件,根据文件中套餐的顺序进行排序。 ...
前些日子公司的应用要和合作方对接,我参与了webservice这块的工作,在访问量很小的情况下基本上完成了功能,但安全这块没有找到合适的方案,所以自己做了些旁门左道的设想,不一定合理和完善,希望能起个抛砖引玉的作用 ...
调试webservice的时候发现:客户端能获得服务端抛出的异常,而服务器端却没捕获到这个异常,当时是很纳闷的,呵呵,见笑了。 到源代码按图索骥,发现catch的是Exception,而TargetInvocationException是Error的一个子类,当然服务器端是无法捕获。 题外话,虽然是基础知识,但真正遇到这种情况时,还真一时没反应过来,基础重要啊!
遗留系统采用了struts+hibernate,现在想添加spring,由它来做一些横切的功能和总体的控制。遗留系统的数据源和事务处理是建立在hibernate的基础上,新功能的事务处理当然由spring来管理。现在的问题是: 原来的数据源的获取和事务的管理可以做改动,但不能对代码做大量的修改。 有没有什么办法,可以实现: 1.遗留系统最小的改动; 2.新功能架设在spring之上; 3.新功能和遗留系统在数据源的获取和事务的管理上,各行其道,互相隔离。 看到有人在hibernate.cfg.xml中和applicationContext.xml中都配置了数据源,不知道两者是什么关系,感觉这样 ...
遗留系统用的是struts+hibernate,考虑到将来需要添加很多的横切功能,现在系统准备加上spring。现在系统中是在hibernate.cfg.xml中配置的数据源,加上spring后,有一个问题有点迷惑,就是数据源的问题。 1.数据源必须在applicationContext.xml中配置吗,如果是的话,这两个数据源是什么关系? 2.是否可以将hibernate.cfg.xml中配置的数据源改为在applicationContext.xml配置?如果可以的话,原来持久层获取session的方式应该做哪些调整? 3.是否可以在程序中通过某种方式获取hibernate.cfg.xml中配 ...
目前系统客户端用.net实现,java服务端采用了webservice的方式向客户端提供服务。 要实现的功能:验证从.net客户端登陆的用户的合法性。用户从客户端登陆,需要调用java接口验证用户信息的合法性。原java系统中采用了MD5的方式对用户的某些数据进行加密,加密后的数据保存到了DB中。 问题1:用户的某些敏感数据不能在.net的客户端用MD5进行处理。 因为原java系统中用的MD5不是通用的算法,而是对通用MD5进行了改造。糟糕的是,现在做.net客户端的程序员无法实现这个MD5。 解决办法:MD5的工作由java端处理。 即客户端传明文到java端,由java端对用户数据进 ...
net的客户端调用java的web服务,在客户端怎样保持session以及通讯的安全问题? 1.当客户端从一个功能跳转到另一个功能,判断用户是否已经登陆应该由客户端来做,还是由服务端来做?如果由客户端来做,应该怎么做?已经很就没接触微软的东西了,不知道能不能实现? 目前的想法: 服务端的类从HttpServlet继承。用户从.net客户端登陆后,服务端生成一个Session对象,然后将用户ID保存到Session中。用户退出时,删除Session中的用户ID。用户从功能A跳转到功能B,从Session中取得当前的用户信息,如果用户ID存在,则证明该用户已经登陆过,从而完成了对客户端sessi ...
查询操作不用做事务处理或者不用加锁,以前一直比较同意,今天遇到一个实际的问题,原来这种想法是错误的. 项目中遇到一个用户资金扣除出错的问题: 系统采用了quartz来做定时任务的处理,在某个时间点,自动对用户购买方案进行扣款,通过对日志的跟踪发现:当用户购买了多个方案时,有时用户可用资金会出错。 要实现的功能: 查询用户的可用资金,然后扣款。 假设用户w当前可用资金为1000元,应该执行两次扣款,第一次100,第二次50,用户w正确的余额应该是850。 出错原因: 扣款前要先查询用户当前的可用金额,然后再扣款. 通过日志发现,线程a查询完用户w的可用金额为1000元后,暂停了执行扣款的操作 ...
Global site tag (gtag.js) - Google Analytics