Programming 77

JDBC를 이용해 대용량 데이터 처리시 OOM(Out of memory, Java heap space 문제) 해결

ResultSet을 가지고 한줄씩 disk 로 쓰면서 사용된 객체를 정리하는 것을 반복하더라도 OOM 나면서 죽는 경우, Statement 를 생성할 때 Cursor 옵션에 문제가 있을 수 있다. TYPE_SCROLL_SENSITIVE, TYPE_SCROLL_INSENSITIVE 로 Scrollable하게 만들면 내부적으로 Vector를 사용해 읽어온 데이터를 Caching 하게 되며 gc 되지 않는다. TYPE_FORWARD_ONLY, CONCUR_READ_ONLY 를 지정하여 Cache 되지 않도록 하면, OOM 을 피할 수 있다. 단, Scrollable Cursor 를 이용하던 로직은 불가능하거나 수정할 필요가 있다.

Programming/Java 2012.01.12

현재 Selection 얻기

특정 뷰에서 Selection 정보를 넘겨주기 위해선 SelectionProvider를 설정 getSite().setSelectionProvider(tbvRows); 받는 쪽에선 아래와 같이 가능 ISelection selection = HandlerUtil.getCurrentSelection(event); //ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection(); if (selection != null & selection instanceof IStructuredSelection) { IStructuredSelection strucSelection = (IStructuredSelec..

특정 뷰에 Context Menu 추가하기

[View] public static final String ID = "com.lawmin.view"; ... MenuManager menuManager = new MenuManager(); Menu menu = menuManager.createContextMenu(tbRows); // Set the MenuManager tbRows.setMenu(menu); menu.setData(tbvRows); // 이건... 이벤트 발생시 source 추적하기 위해... getSite().registerContextMenu(menuManager, tbvRows); // Make the selection available getSite().setSelectionProvider(tbvRows); ... [Handle..

Undo/Redo 기능 추가 StyledText

delta 값 기록 방식이 아닌 전체 이미지 저장하는 방식이라 커서 위치 복원 문제나 메모리 과다 사용 문제가 있을 수 있다. event listener를 이용해 caret pos, replaced text, replacing text 등을 얻어와 처리할 수는 있을 것 같다. import java.util.LinkedList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ExtendedModifyEvent; import org.eclipse.swt.custom.ExtendedModifyListener; import org.eclipse.swt.custom.StyledText; import org.eclip..

Multithread 환경에서의 JDBC 사용

thread 를 이용해 여러개의 connection을 생성해 DB에서 읽어온 데이터를 가지고 작업할 일이 있었으나, jdbc 가 thread-safe 하지 않아서 인지 자꾸 오류가 나는 것이었다. (분명 다른 connection인데 같은 statement, resultset 를 생성하여, 더이상 읽어온 값이 없다는 오류를 뱉는 둥...) 최대한의 동시성을 유지하면서 무결성이 깨지지 않는 동기화 수준을 정리할 필요성을 느낌... [Connection] - DriverManager 수준 synchronized(DriverManager.class) { conn = (Connection)DriverManager.getConnection(jdbcUrl, dbProp); } [Statement, PreparedSt..

Programming/Java 2011.11.02

View Close Event (pre-closing)

[Pre-closing] View 닫기 전에 체크... implements ISaveablePart2 해준후, interface 메소드 구현하도록 추가한 후, public boolean isDirty() public boolean isSaveOnCloseNeeded() 위 두개는 true 를 리턴하도록 수정하고, public int promptToSaveOnClose() 를 재정의 해주면 된다. http://e-rcp.blogspot.com/2007/09/prevent-that-rcp-editor-is-closed.html [Post-closing] View 활성화 및 닫은 후 체크 IPartListener