블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
04-18 12:55
 

달력

« » 2025.4
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
 

공지사항

최근에 올라온 글

최근에 달린 댓글



요즘에 한참 재미가 들린 하이버네이트와 Spring MVC, 그리고 Ext JS 를 이용하여 손쉽게 DB 테이블 데이터를 그려주는 방법을 연구하고 있었습니다.

즉, 하이버네이트로 데이터를 조회하고, Spring MVC 로 Ext JS 에서 사용할 데이터를 만들어서 Ext JS 의 컴포넌트가 요청하는 구조입니다.


만약 아래와 같은 Entity 가 있다면
01import java.math.BigDecimal;
02import java.util.Date;
03 
04import javax.persistence.Column;
05import javax.persistence.Entity;
06import javax.persistence.GeneratedValue;
07import javax.persistence.GenerationType;
08import javax.persistence.Id;
09import javax.persistence.Table;
10import javax.persistence.Temporal;
11import javax.persistence.TemporalType;
12import javax.persistence.Transient;
13 
14import kr.co.vicki.extjs.support.annotation.ExtJSGridColumn;
15import kr.co.vicki.extjs.support.annotation.ExtJSGridPanel;
16 
17@Entity
18@Table(name = "TSA9110")
19@ExtJSGridPanel(title = "통합파일", autoExpandColumn = "filename")
20public class Tsa9110 {
21 
22    @Id
23    @Column(name = "PACK_SEQ")
24    @GeneratedValue(strategy = GenerationType.AUTO)
25    @ExtJSGridColumn(width = 50, header = "Seq", order = 1)
26    private BigDecimal packSeq;
27 
28    @Column(name = "FILENAME")
29    @ExtJSGridColumn(width = 150, order = 12)
30    private String filename;
31 
32    ...
33 
34}




VickiHibernateDaoBaseImpl 을 구현한 Dao 클래스를 생성합니다.
1import java.math.BigDecimal;
2 
3import kr.co.vicki.egov.relay.data.ITsa9110Dao;
4import kr.co.vicki.egov.relay.model.persistence.Tsa9110;
5import kr.co.vicki.hibernate.support.data.WiseOneHibernateDaoBaseImpl;
6 
7public class Tsa9110DaoImpl extends VickiHibernateDaoBaseImpl<Tsa9110, BigDecimal> implements ITsa9110Dao {
8 
9}




AbstractBaseMonitoringController 를 상속받은 Controller 클래스를 생성하였습니다.
01import java.math.BigDecimal;
02 
03import org.springframework.stereotype.Controller;
04import org.springframework.web.bind.annotation.RequestMapping;
05 
06import kr.co.vicki.egov.relay.data.impl.Tsa9110DaoImpl;
07import kr.co.vicki.egov.relay.model.persistence.Tsa9110;
08 
09@Controller
10@RequestMapping("/pack")
11public class PackMonitoringController extends AbstractBaseMonitoringController<Tsa9110, BigDecimal, Tsa9110DaoImpl> {
12 
13}




그런 후, ConfigLoadGridPanel 의 데이터에 기본 URL 을 설정해주기만 하면!!!
01var viewport = new Ext.Viewport({
02    layout: 'fit',
03    items: [{
04        xtype: 'tabpanel',
05        activeTab: 0,
06        items: [{
07            xtype: 'ConfigLoadGridPanel',
08            baseUrl: '/monitoring/pack'
09        }, {
10            xtype: 'ConfigLoadGridPanel',
11            baseUrl: '/monitoring/content'
12        }]
13    }]
14});



아래와 같이 데이터를 확인할 수 있습니다.




역시 짜릿한 어노테이션의 손맛!!!



Posted by 자수씨
, |

스프링을 2.5.6 에서 3 으로 버전 업을 한 후, iBATIS 쪽에서 문제가 발생하였습니다.

1<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
2    <property name="dataSource" ref="dataSource" />
3    <property name="configLocation"
4        value="kr/co/vicki/data/SqlMapConfig.xml" />
5</bean>


Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/kr/co/vicki/data/SqlMapConfig.xml]


여러군데를 뒤지다 보니, configLocation 에 classpath: 를 앞에 붙여서 하면 된다고 하는 글을 보았습니다.

1<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
2    <property name="dataSource" ref="dataSource" />
3    <property name="configLocation"
4        value="classpath:kr/co/vicki/data/SqlMapConfig.xml" />
5</bean>



=ㅁ=... 됩니다... 도대체 뭔 차이가 있던건지...

Posted by 자수씨
, |

[Spring 3] @Scheduled 설정

Spring / 2011. 1. 17. 16:25
설정에서 cron 은 cron 표현식을 이용하면 되고, 다른 설정의 경우 애매한 부분이 있어 정리를 합니다.

ㅁ fixedDelay
>> 모든 실행이 끝난 후 설정된 시간 이후에 메소드를 다시 실행합니다.
01import java.util.Date;
02 
03import org.springframework.scheduling.annotation.Scheduled;
04import org.springframework.stereotype.Component;
05 
06@Component("sendDocumentPollingScheduler")
07public class TestScheduler {
08     
09    @Scheduled(fixedDelay = 5000)
10    public void doSchedule() throws Exception {
11        System.out.println("start " + new Date());
12        Thread.sleep(1000);
13        System.out.println("end " + new Date());
14    }
15 
16}


실행결과
start Mon Jan 17 16:17:16 KST 2011
end Mon Jan 17 16:17:17 KST 2011
start Mon Jan 17 16:17:22 KST 2011
end Mon Jan 17 16:17:23 KST 2011
start Mon Jan 17 16:17:28 KST 2011
end Mon Jan 17 16:17:29 KST 2011
start Mon Jan 17 16:17:34 KST 2011
end Mon Jan 17 16:17:35 KST 2011
start Mon Jan 17 16:17:40 KST 2011
end Mon Jan 17 16:17:41 KST 2011

위의 실행결과를 보시면 메소드 종료 후 5초 후에 다시 시작합니다.


ㅁ fixedRate
>> 해당 주기마다 메소드를 실행합니다.
01@Component("sendDocumentPollingScheduler")
02public class Testcheduler {
03     
04    @Scheduled(fixedRate = 5000)
05    public void doSchedule() throws Exception {
06        System.out.println("start " + new Date());
07        Thread.sleep(1000);
08        System.out.println("end " + new Date());
09    }
10 
11}


실행결과
start Mon Jan 17 16:19:42 KST 2011
end Mon Jan 17 16:19:43 KST 2011
start Mon Jan 17 16:19:47 KST 2011
end Mon Jan 17 16:19:48 KST 2011
start Mon Jan 17 16:19:52 KST 2011
end Mon Jan 17 16:19:53 KST 2011
start Mon Jan 17 16:19:57 KST 2011
end Mon Jan 17 16:19:58 KST 2011
start Mon Jan 17 16:20:02 KST 2011
end Mon Jan 17 16:20:03 KST 2011

위의 실행결과를 보면 메소드가 끝나는 시간과는 관계없이 5초 후에 다시 시작합니다.

약간의 차이가 있으므로, 용도에 따라 사용하면 될 것 같네요~

Posted by 자수씨
, |

어노테이션을 이용한 Task Scheduling 을 하려면 annotation-driven 엘리먼트를 추가합니다.
01<?xml version="1.0" encoding="UTF-8"?>
06    xsi:schemaLocation="http://www.springframework.org/schema/beans
08                http://www.springframework.org/schema/context
10                http://www.springframework.org/schema/task
12                     
13    <task:annotation-driven />
14 
15    ...
16     
17</beans>



그 후, 스케쥴링에 이용할 메소드에 @Scheduled 어노테이션 설정을 합니다.
01package kr.co.vicki.gwtbuilder.scheduling;
02 
03import kr.co.vicki.gwtbuilder.service.IGWTBuilderService;
04 
05import org.springframework.beans.factory.annotation.Autowired;
06import org.springframework.beans.factory.annotation.Qualifier;
07import org.springframework.scheduling.annotation.Scheduled;
08import org.springframework.stereotype.Component;
09 
10@Component("gwtBuildWorker")
11public class GWTBuildWorker {
12     
13    @Autowired
14    @Qualifier("gwtBuilderService")
15    IGWTBuilderService gwtBuilderService;
16     
17    @Scheduled(cron="0 0 01 * * ?")
18    public void doSchedule() {
19        gwtBuilderService.run();
20    }
21 
22}


익숙한 cron 방식으로 설정을 하는 것이라 따로 설명을 하지 않겠습니다.

어노테이션... 생각보다 편의성이 돋네요;;;

참고자료: http://krams915.blogspot.com/2011/01/spring-3-task-scheduling-via.html

Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백