目前分類:Spring (31)

瀏覽方式: 標題列表 簡短摘要

  這兩天彷彿遊歷一趟精彩的罐頭地獄(Jar Hell)。本以為可以很簡單的結合最新的JUnit 4.x+Spring 2.5.x+Eclipse(好啦!我承認有點舊,是用3.4.1版)作一個Spring JUnit的Demo,哪知弄了快兩天。

  事情是這樣,被主管要求弄一個簡單的JUnit的Sample簡報。但事實沒那麼簡單,若是要做給Developers看的Best Practice白箱測試,不是弄一個Calculator飯粒就可以唬弄。想想看,Java專案系統的開發,比例最多的是什麼組合?IDE是Eclipse拔頭籌,核心框架非Spring莫屬,再延伸一下就有前後端的需求,但比較多樣,前端有Struts、Struts2、JSF、Flex等…,後端雖近期有JPA想統一江湖,但ORM的Hibernate、iBatis、TopLink和JDO各領風騷,非ORM的有Spring JDBC、甚至直接拿JDBC搭配個Pool也算;而測試工具雖然也jMock出現,但仍是JUnit獨占鰲頭,而且互不抵觸,與jMock分居於白箱與黑箱測試龍頭。哈拉完畢,以下開始精彩的Jar Hell之旅,就單純的結合JUnit+Spring+Eclipse:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Quartz是由三個元件:Scheduler、Trigger和Job組成,一個Job可被多個Trigger使用,一個Trigger可以觸發多個Job,這而實際都是由Scheduler去執行Job的內容。本案是使用賽門奧客的Veritas進行software的failover,因此當failover一切過去,可能未執行、執行中或執行畢的Job都有遇到不同的狀況,因為Vertias是使用Linux上的kill -9指令中止process的。好在Listener的機制這時可以派上用場。Listener也依Quartz三個核心元件而分別對映到這三個Listener,目前以JobListener作飯粒:

(FooJobListener.java)

Jemmy 發表在 痞客邦 留言(0) 人氣()

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.support.RequestContextUtils;

public class MyTag extends BodyTagSupport {

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在本案的第二階段,找回過去的戰友加入本案。正好湊成一個完整的JDBCTemplate使用Bean對映方式的Solution。在想把Java Bean對映到SQL裡,中間需要Mapping,雖然Mapping方式可以Code Generator,但仍然是段食之無味的程式碼。而若用Bean Process方式在如下Sample:

1. Create Table foo (id number(10) primary key, name varchar2(10));   // 建立demo用的table。

2. 根據Table產生Java Bean(又稱Value Object或Persistence Object),吾採後者為FooPo,內容略…。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  org.springframework.beans.TypeMismatchException: Failed to convert property value of type [AImpl] to required type [IA] for property…。這是型別強制轉換失敗而產生的Bug,原因是AImpl根本沒implement IA這個interface(或是IA是parent class)。好犯於一些以為已經implement的開發者。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  發現沒有專案在Go的話,看書練功是一回事,面對實際才知道是怎麼回事。以下是spring 2.0以前對transaction的配置:

<bean id="txTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">

Jemmy 發表在 痞客邦 留言(0) 人氣()

  今天Deploy還有一件怪事,我佈署的A.war檔裡含有B.jar,兩者都有Spring的configuration設定,A.war的a bean會reference B.jar的b bean。但在Linux上佈署後,找不到b bean,即便在A.war有設classpath*:spring/*.xml的路徑。經天津同事指點,若B.jar是用Eclipse export會無法被A.war找到,但B.jar若是用jar cvf B.jar . 或jar cvf B.jar *的命令列方式產出,其spring confinguration就會被A.war找到。原因至今未明,奇也怪哉。


Jemmy 發表在 痞客邦 留言(0) 人氣()

  在Spring裡配置c3p0有時出現被關閉Connection的Issue,與少了c3p0.idle_test_period屬性有關。c3p0.timeout是指等多久逾時而connection被destroy,而c3p0.idle_test_period則是間隔多久去執行destroy connection的動作。

  另外有意外收穫出自http://www.blogjava.net/willpower88/archive/2007/01/10/92928.html。作者指網上流行的c3p0在Spring配置大多錯誤,內容如下:<property name="driverClass"><value>${jdbc.driverClassName}</value></property>
<property name="jdbcUrl"><value>${jdbc.url}</value></property>              

Jemmy 發表在 痞客邦 留言(2) 人氣()

1.ApplicationContext的Initialize
目前知道有classpath的ClassPathXmlApplicationContext與File System的FileSystemXmlApplicationContext,可是很奇怪的是裡面的定位表示法可以互相使用,而且效果接近。

Jemmy 發表在 痞客邦 留言(0) 人氣()

CGLIB
常常一樣東西還沒學起來,就趕著去學另外一樣。然後不管是專案或是產品,藍圖一建構完也幾乎被視同完成實作。連著兩個專案都是如此,所造成的後遺症是自信心漸失,症狀是學習力不集中,忘東西又特別快。幸虧還有以前踹過的sample,再重新學Spring,才發現它不像iBATIS只需一個jar檔,至少要import以下的Jar:

Jemmy 發表在 痞客邦 留言(0) 人氣()

沒想到漏記了這個技術,Hessian是Remoting技術之一,有別web services是binary,故速度較快,源自Spring,底下有個小小Sample誌之:
和其他技術一樣,Interface與Implement分離而作,是故先定義Interface:

Jemmy 發表在 痞客邦 留言(0) 人氣()

«12