Tag Archives: java

为什么要用ajax的table?

目前的项目table用的jquery的一个table插件,台湾那边hci定的。不过我觉得,这实在是没什么必要。ajax的table,让我这个对javascript不太熟的人而言,实在是大大提高了难度。连个mockup都写不出来了。 而且我觉得ajax的table也没什么优点啊,速度也没有优势..而且增加了开发的难度。本来非常直接的一点代码,现在搞的这么复杂…
Posted in java, web-develop | Also tagged , | Leave a comment

Quartz in Spring memo: part 7

最终还是放弃了使用jdbc jobstore。如果使用了,spring提供的MethodInvokingJobDetailFactoryBean不能用,SimpleTriggerBean, CronTriggerBean都不能用。系统里面已经有好多地方都使用了。不可能再回头去改了。 不使用jdbc jobstore,唯一的坏处就是,对于不能在spring配置里面配置(即用户添加的)schedule,系统启动的时候需要手动把schedule加到quartz里面去。
Posted in java, memo | Also tagged , | Leave a comment

How to register spring’s CustomDateEditor

CustomDateEditor的一个作用就是在spring的配置文件里面把string转成在注入时的Date。默认CustomDateEditor是没有注册的。那到底怎么样注册CustomDateEditor呢? 首先在配置文件里面声明一个CustomDateEditor,用构造函数的方式注入它需要的两个参数,一个是SimpleDateFormatter,还有一个boolean值。 1: <bean id="dateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor"> 2: <constructor-arg> 3: <bean class="java.text.SimpleDateFormat"> 4: <constructor-arg value="yyyy/MM/dd"/> 5: [...]
Posted in java, memo | Also tagged | Leave a comment

Quartz in Spring memo: part 6

我试了一下,用spring的MethodInvokingJobDetailFactoryBean,然后在job class里面用到其他的spring的bean,那这个job details是不能被persist的,因为不能序列化。如果不用MethodInvokingJobDetailFactoryBean,那job class根本就不用在spring里面配置,所以也不能在job class里面引用spring的bean了。在quartz的文档里看到有一个办法,可以从job class里面拿到application context。 首先是在SchedulerFactoryBean的配置里面配置一下applicationContextSchedulerContextKey属性,然后在job class里面可以用如下的方法拿到(job class一定要实现quartz的job接口):ApplicationContext appContext = (ApplicationContext) context.getScheduler().getContext().get("applicationContext"); 代码如下: 1: <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 2: <property name="triggers"> 3: <list> 4: [...]
Posted in java, memo | Also tagged , | Leave a comment

Quartz in Spring memo: part 5

这一部分记录的东西有点杂。 如何在job中使用从trigger传进来的数据。 如何在spring里面配置一个直接存进数据库的job。 如何让多个trigger重复使用同一个job。 第一个问题,要在job中使用从trigger传进来的数据,直接在job类里面,从context里面拿到mergedJobDataMap,就可以拿到trigger传进来的数据了。代码如下: 1: public void execute(JobExecutionContext context) throws JobExecutionException { 2: Map map = context.getMergedJobDataMap(); 3: } 第二个问题,在spring里面加上job details的bean,然后在SchedulerFactoryBean里面加进去即可: 1: <bean id="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> 2: <property name="jobClass" value="quartz.PersistentJob"/> 3: <property name="name" value="myjob"/> [...]
Posted in java, memo | Also tagged , | Leave a comment

Quartz in Spring memo: part 4

前面讲的都是静态的schedule,也就是说,这个schedule我预先已经知道了。所以,在spring里面直接配置就好了。但是很多时候,schedule是由用户自己添加的。这时候就不能在spring里面直接配了。 首先,我们在spring里面已经配置了一个叫schedulerFactory的SchedulerFactoryBean,要注意的是,它是一个factory bean,也就是说,在注入的时候,可以把它当作一个quartz的Scheduler类来使用。我们可以写如下一个SchedulerManager类,来管理用户自己添加的schedule。 1: import org.quartz.JobDetail; 2: import org.quartz.Scheduler; 3: import org.quartz.SchedulerException; 4: import org.quartz.Trigger; 5:  6: public class ScheduleManager { 7: private Scheduler scheduler; 8:  9: public [...]
Posted in java, memo | Also tagged , | Leave a comment

Quartz in Spring memo: part 3

这一部分记录一下如何在spring里面配置persistent schedule。 首先job class,有两种方法,一个是直接实现quartz的StatefulJob接口,另外一个还是使用spring的MethodInvokingJobDetailFactoryBean,但是要把concurrent属性设成true。 trigger和part 1里面的非persistent的保持一致。需要注意的是,如果quartz版本 >= 1.6,是不能使用spring提供的SimpleTriggerBean或者CronTriggerBean的。这一点在spring的SimpleTriggerBean和CronTriggerBean的java doc里面有提到。这时候需要使用quartz本身的SimpletTrigger或者CronTrigger。 然后就是SchedulerFactoryBean,要配置dataSource。这个dataSource就是spring里面配置的供dao层使用的dataSource。ScheduleFactoryBean配置的xml如下: 1: <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 2: <property name="triggers"> 3: <list> 4: </list> 5: </property> [...]
Posted in java, memo | Also tagged , | Leave a comment

Quartz in Spring memo: part 2

关于Persistent schedule,如果数据库里面已经有相同name,groupName的job了,再加一个,会报错。问题是,对于常驻后台的schedule,如果重启,还要去判断是不是已经有同样名字的job。还不如每次启动都加一个非persistent的schedule。比如说下面的代码,如果不对t和j做是否null的判断,在重复运行的时候,就会在第12行抛错。 1: SchedulerFactory sf = new StdSchedulerFactory(); 2: Scheduler s = sf.getScheduler(); 3: s.start(); 4:  5: Trigger t = s.getTrigger("myTrigger", "triggers"); 6: JobDetail j = s.getJobDetail("myJob", "jobs"); 7: if (t == null && j == null) { [...]
Posted in java, memo | Also tagged | Leave a comment

Quartz in Spring memo: part 1

Spring里面,有两种方式配置一个job detail,一种是实现quartz的Job接口,然后在spring的配置文件里面用JobDetailBean。配置文件如下: <bean id="job" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="quartz.HelloJob"/> <property name="jobDataAsMap"> <map> <entry key="name" value="sting"/> </map> </property> </bean> 另外一种是直接使用MethodInvokingJobDetailFactoryBean。可以不用实现Job接口,普通的java类也可以作为job class。配置文件如下: <bean id="job" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> [...]
Posted in java, memo | Also tagged , | Leave a comment

Grails很不错

最近帮别人写一个小的项目,因为要求开发速度。用java从头开始写实在是太慢了,django和rails我虽然碰过一点,不过没写过很完整的东西。在时间比较紧的时候,实在是没什么信心。Grails好歹我也是搞java的,spring和hibernate也都熟悉。所以决定先试试看。 ACID这个不用说,很简单,生成出来的gsp页面也比rails的好懂。Entity mapping,也比较容易。常用的几种已经support得很好了。Controller这层和rails,django都差不多。不过我还没搞清楚什么时候要用render,什么时候直接return,什么时候用redirect。Gsp和jsp差不多。还试了一下ajax,简单的例子很快就跑通了。 在折腾了大概一个星期的业余时间,基本上把这个小程序搞定了。如果换作用java做,估计一周也就够把框架搭起来,把一个类的acid跑通吧。 现在想想,java真是太笨重了。想想写一个简单的acid要多费功夫吧。而且要学习的东西实在太多了。Jsp,servlet,至少一个mvc框架,hibernate,spring,还有比如说像maven或者ant这样的build tool。所以,还是很希望grails可以好好的发展。毕竟有java的api在后面支持着,只要performance不差,bug也不那么多。还是会很有前途的。不过spring被vmware收购了,好像grails的前途有点不明朗啊。 接下来的一段时间,应该会把grails好好的学习一下。这里,推荐一下grails in action,例子简单清楚,比较连续完整,而且可以运行。 BTW,在开发里面还是遇到了几个问题。一个是one to one,我已经在另外一边设了belongsTo,但cascade save还是不work。One to many就没有问题。另外一个,在unit test里面,一调用domain类的save或者其他dao的方法,就会报错说xxx method is not applicable for domain xxx,但是在integration test里面就work正常。所以现在测dao的东西,我都只用integration test。还有一个就是,不能单独运行某个test case,每次测试都要把所有的test case都跑一遍。
Posted in grails, java | Also tagged | Leave a comment