Programming 72

동기화 필요한 Class 정리 (mutable)

사실 JDK API doc 에 개별적으로 다 있긴 하지만, 따로 정리가 필요할 듯 싶다. (멀티스레드 동작 중 값이 이상하게 들어온다 싶으면 일단 의심...) 내부적으로 상태를 유지하기 때문에 작업이 끝나기전에 다른 요청이 들어오면 상태값이 바뀌어 예측할 수 없게 된다. synchronized block 감싸거나(성능 고려), 새로 인스턴스를 만들어서 해결할 수 있음 java.util.SimpleDateFormat java.sql.Connection java.sql.Statement 이하

Programming/Java 2012.01.20

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..