'日常茶飯事'에 해당되는 글 601

  1. 2012.05.09 [SAP J2EE] JCo RFC Provider Service 실습
  2. 2012.05.08 [미완][SAP J2EE] Spring Integration on SAP NetWeaver
  3. 2012.04.30 [Ant] Unable to find a javac compiler
  4. 2012.04.25 [Trac] 템플릿 엔진
  5. 2012.04.25 [Trac] 티켓 작성시 사용자가 표시되지 않을 때
  6. 2012.04.23 오류 5242이(가) 발생했습니다
  7. 2012.03.28 IE9 개발자 도구
  8. 2012.03.16 [Ant] 'includeantruntime' was not set
  9. 2012.03.15 [Vim] JAVA 컴파일하기 - javac 이용
  10. 2012.03.15 [Vim] 테마, 색 설정하기
  11. 2012.03.15 [Vim] 글꼴 설정
  12. 2012.03.09 [TortoiseSVN] 로그 메세지 볼 때 필터 기능
  13. 2012.03.08 SQL Server에 주석 달기
  14. 2012.02.22 Vim에서 수정한 부분 찾기
  15. 2012.02.21 Vim Script 관련 자료
  16. 2012.02.21 [Vim] Source Explorer 플러그인이 특정 상황에서만 동작하게 하기
  17. 2012.02.20 mark.vim
  18. 2012.02.16 taglist.vim
  19. 2012.02.16 Explorer에서 FTP 접근하기
  20. 2012.02.03 putty를 통한 원격지의 로그파일 보기
  21. 2012.01.19 [TortoiseSVN] Checkout
  22. 2012.01.19 javax.servlet.jsp.el.ELException: can't convert 'XXX' to long.
  23. 2012.01.11 Access restriction
  24. 2012.01.10 [SVN] Path is not a working copy directory
  25. 2012.01.08 보안서버(SSL 인증서) 1
  26. 2012.01.03 BareTail
  27. 2011.12.08 [정리] Build, deploy, and test EJB components in just a few seconds
  28. 2011.12.06 EJB Test with EJBContainer of OpenEJB
  29. 2011.12.06 OpenEJB - Apache TomEE
  30. 2011.12.06 OpenEJB - Hello world

[SAP J2EE] JCo RFC Provider Service 실습

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[미완][SAP J2EE] Spring Integration on SAP NetWeaver

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[Ant] Unable to find a javac compiler

BUILD FAILED
D:\web_dev\ant_build2.xml:16: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre6"
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_22


[Trac] 템플릿 엔진

Trac 0.10까지는 Clearsilver 사용
Trac 0.11 이후부터는 Genshi 사용

[Trac] 티켓 작성시 사용자가 표시되지 않을 때

설정에 restrict_owner를 true로 두면 다른 사람에게 할당할 때 입력란이 아닌 셀렉트로 나와서 지정하게 할 수 있다.

새로운 프로젝트를 생성하고 티켓을 작성하는데 방금 추가한 사용자가 보이지 않는다.
프로젝트를 다시 생성해보기도 하고 다른 사용자를 추가해 봐도 나오지 않는다.
플러그인이 이상한가 싶기도 하고.

여차저차 하던 중에 새로 추가한 사용자가 로그인한 뒤에는 목록에서 보이는 것을 확인했다.
윽...오전 내내 이걸로 검색했네.



오류 5242이(가) 발생했습니다

- 개발기에서 갑자기 이런 오류가 발생
경고: 04 23 2012  8:26PM에 오류 5242이(가) 발생했습니다. 오류와 시간을 기록한 다음 시스템 관리자에게 문의하십시오.

- 데이터베이스 엔진 오류의 원인 및 해결 방법 MSSQLSERVER_5242

- DBCC CHECKDB 결과 이상없음.
데이터베이스 서버를 내렸다 올리니깐 제대로 동작함.

[todo] 이벤트 로그 및 디비서버 로그 확인하기

IE9 개발자 도구

F12 를 누르고

break point 를 지정하면 된다.


- IE 옵션에서 디버거를 사용하도록 설정해 두면 오류 발생시 대화창이 뜬다.



[Ant] 'includeantruntime' was not set

warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

javac 태스크에 includeantruntime을 false로 둔다.
이 옵션은 ant의 클래스 패스를 포함시킨다는 의미이다.

[Vim] JAVA 컴파일하기 - javac 이용

let $PATH = $PATH . ";C:/Program\ Files/Java/jdk1.6.0_26/bin/" "또는 javac.exe가 PATH에 잡혀 있어야 한다.
set makeprg=javac\ %
set errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#

:make 를 하면 에러가 난 곳으로 이동한다.
:cn 은 다음 에러가 난 곳으로 이동한다.
:cp 는 이전 에러가 난 곳으로 이동한다.
:cw 는 에러 목록을 보여주고 에러가 난 곳으로 이동할 수 있다.
:cl 는 에러 목록을 보여준다.


- 실행
:!java %:r

- 참고
Linux등에서 Vim 으로 Java 프로그램 짜기
:help filename-modifiers

이렇게도 가능하지만 ...
:!"C:\Program Files\Java\jdk1.6.0_20\bin\javac" %

[Vim] 테마, 색 설정하기

- 테마 지정
colo desert

torte, slate도 괜찮은 듯

- 테마 참고
Vim ColorScheme 변경 방법
VIM 에디터 Color Scheme 바꾸기

- 커서 라인 지정하기
set cursorline
hi cursorline guibg = grey40

디폴트 테마에서는 grey90 이 적당함. 숫자가 작을수록 연하다.

- Print Margin 지정하기
set colorcolumn=101
hi colorcolumn ctermbg=lightgrey guibg=grey16

그런데 이거 굵기가 마음에 안든다.


[Vim] 글꼴 설정

set guifont=Lucida_Console:h11:b:cANSI

이게 보기 편함.

gVim에서는 편집 - 글꼴 고르기로 가능하다.


============설정 저장=>
현재 값을 알고 싶으시면
:echo &guifont

insert mode에서
<Control-R>=&guifont
이렇게 치시면 guifont 변수 값이 버퍼에 입력됩니다.



[TortoiseSVN] 로그 메세지 볼 때 필터 기능

메세지, 커밋한 사람, 날짜 등등으로 필터링할 수 있다.

특정 개발자가 작업한 내용을 리뷰할때 유용하게 사용



SQL Server에 주석 달기

EXEC sp_addextendedproperty 'MS_Description', 'COMMENT', 'user', dbo, 'table', TABLE_NAME
EXEC sp_addextendedproperty 'MS_Description', 'COMMENT', 'user', dbo, 'table', TABLE_NAME, 'column', COLUMN_NAME

이 확장속성은 2005버전부터 지원될거야.

MS_Description은 변경하지 말고 그대로 사용할 것.
이부분이 변경되면 디자인 - 설명에서 안보이고 확장속성에서만 확인할 수 있음.

[todo] 뷰에서도 가능한가? SP나 Function은? 원격 데이터베이스의 개체는?
[todo] 쿼리로 보는 방법
이걸 작성할때 컬럼 다 뽑아오는 방법...시스템 테이블 쓰면 될거야

Vim에서 수정한 부분 찾기

파일을 저장하기 전 어떤 부분을 수정했는지 보고 싶은 경우가 있다.

Eclipse에서는????

*svn과 연결되어 있으면 서버와 비교, 아니면 local history와 비교



71라인 : 변경, 1234를 9999로 변경
72라인 : 삭제
73라인 : 추가

정말 멋지다.

myvimrc
function! DiffPreview()
    diffthis | vsplit | enew | set buftype=nofile | read # | 1delete | diffthis
endfunction

map \difl <ESC>:call DiffPreview()<CR>


[Vim] Source Explorer 플러그인이 특정 상황에서만 동작하게 하기

srcexpl.vim가 편리하기는 한데 커서가 움직이면 보고 있던 소스를 볼 수 없다.
커서가 움직이면 현재 위치한 코드와 연관된 소스를 자동으로 보여줘서 오히려 불편하다.

- Eclipse처럼 Ctrl, Shift 키를 누르고 있을때만 동작하게 하자.
키 매핑과 관련해서 검색을 해봤는데 내가 원하는 내용은 없다.

- 특정 변수를 사용해서 필요한 경우에만 동작하도록 하는게 좋을거 같다.

myvimrc
let g:view_source = -1
nmap ,v :let g:view_source = 0<CR>*# "view_source가 0인 경우에만 srcexpl이 동작하게 한다.

srcexpl.vim (version 4.3)
" SrcExpl_Refresh() {{{

" Refresh the Source Explorer window and update the status

function! g:SrcExpl_Refresh()
    
    if g:view_source == -1
"        call SrcExpl_ReportErr("g:view_source is " . g:view_source)
"        echo "view_source off at refresh"
        return -9
    endif

    " Tab page must be invalid
    if s:SrcExpl_tabPage != tabpagenr()
        return -1
    endif

    " If or not the cursor is on the main editor window
    if &previewwindow || SrcExpl_AdaptPlugins()
        return -2
    endif

    " Avoid errors of multi-buffers
    if &modified
        call SrcExpl_ReportErr("This modified file is not saved")
        return -3
    endif

    " Get the ID of main editor window
    let s:SrcExpl_editWin = winnr()

    " Get the symbol under the cursor
    if SrcExpl_GetSymbol()
        return -4
    endif

    let l:expr = '\<' . s:SrcExpl_symbol . '\>' . '\C'

    " Try to Go to local declaration
    if g:SrcExpl_searchLocalDef != 0
        if !SrcExpl_GoDecl(l:expr)
	    let g:view_source = -1
"            echo "view_source off at decl"
            return 0
        endif
    endif

    " Try to tag something
    call SrcExpl_TagSth(l:expr)

    let g:view_source = -1
"    echo "view_source off at tagsth"

    return 0

endfunction " }}}
view_source가 0일때만 동작하게 한다.
소스 미리보기를 한후에는 view_source를 -1로 돌려서 이전 내용이 지워지지 않게 한다.


[todo] -1로 만드는 부분이 저렇게 3군데 있어야 하나?396 쯤에 넣어두면 되지 않나?

mark.vim

Mark : a little script to highlight several words in different colors simultaneously

각 단어별로 색상을 다르게 표시해 준다.
소스 분석할 때 최고다.

\m Marking
\* 다음
\# 이전

- 참고
로그 뷰어로써의 Vim (1) -멀티 하이라이팅
Mark : Highlight several words in different colors simultaneously. (#1238 continued)

계속 유지보수되는 Mark가 있긴 한데 선뜻 손이 안간다.
그냥 예전 버전으로 버티는 중.

taglist.vim

taglist.vim : Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc)
taglist는 소스 코드 브라우저 플러그인이다.

- 설치
ctags가 설치되어 있어야 한다.
C:\Program Files\Vim\vimfiles\taglist_45/doc/taglist_45/plugin/ 를 복사해 넣는다.

- 사용법
:TlistToggle 또는 Tlist 를 입력하면 왼쪽에 창이 생기고 field, method 등이 보인다.

- 설정
let Tlist_Use_Right_Window=1 "오른쪽에 보이게 한다.
let Tlist_Auto_Open = 1 "vi 실행시 TagList 자동실행"

- 단축키
F1 도움말
x 크게 하기
s 정렬
+
-

- 소스가 있는 경로에 공백이나 . 이 있으면 제대로 동작하지 않는다.



Explorer에서 FTP 접근하기

ftp://사용자계정:비밀번호@FTP서버주소

putty를 통한 원격지의 로그파일 보기

- TailMe가 FTP를 통한 로그보기 기능을 지원한다고 했는데 안된다.(내가 설정을 못한거 같다)
서버에서 FTP를 지원하지 않을 수도 있음.
원격지 파일을 좀더 편하게 보자.

1. putty 설정에서 로그 파일을 남기도록 설정한다.
Flush log file frequently를 체크해야 한다.

2. TailMe로 putty가 남기는 로그를 모니터링한다.
Monitor Interval을 적당히 조절해서 Special Word(눈에 띄게 표시할 단어)가 표시되게 한다.

Tail for Win32는 잘 동작하지 않는다.

[TortoiseSVN] Checkout

 

Repository 의 내용이 로컬 디텍토리로 모두 받아 진다. 

 

 

 

 

 

 

 

 

javax.servlet.jsp.el.ELException: can't convert 'XXX' to long.

엑셀로 된 데이터를 업로드해서 화면에 보여주는데 long으로 변환할 수 없다는 에러가 발생했다.

fmt:formatNumber 태그를 이용하는데 입력값이 숫자가 아닌 XXX이다.

입력값을 확인해봐.

Access restriction

Access restriction: The type UEInfoServiceContext is not accessible due to restriction on required library C:\jdk\j2sdk1.4.2_19\jre\lib\rt.jar

1. Build path에서 JRE Library를 삭제했다가 다시 추가하면 된다고 한다.
이건 좀 아닌듯.

2. Compile시 Acces rule을 변경한다.
Java Compiler - Errors/Warnings - Deprecated and restrited APIs - Forbidden reference (acess rule)
Change to warning or ignore.

[SVN] Path is not a working copy directory

Eclipse에서 프로젝트를 Share하려고 SVN을 선택했는데 에러가 발생함.


검색을 해보니 Cleanup을 하라고 하는데 아직 SVN에 올리지도 않았는데...쩝

이런 글이 있어서 JavaHL에서 JavaSVN로 바꿨다.

 


보안서버(SSL 인증서)

- KISA 보안서버
- 한국정보인증 SSL

- 보안서버 구축 안내서
tech/Server/보안서버구축 안내서_2009.pdf (원본 secvs_server_guide_2010.pdf)
tech/Server/보안서버 구축 가이드_2008.pdf
  • Apache, IIS, Web2B, iPlanet 서버에서 보안서버 구축하기
  • 체인 인증서 및 루트 인증서 설정하기(국산인증서가 신뢰되지 않는 인증기관에서 발급받은 인증서로 인식하여 경고창이발생하는데 이에 대한 해결 방법)
  • 멀티도메인 SSL 인증서
  • 와일드카드(Wildcard) SSL 인증서
  • 보안되지 않은 항목의 표시
  • 보안되지 않은 연결 리다이렉션 관련
  • Internet Explorer 7에서는 인증서 프로토콜 기본값으로 SSLv2 대신 TLSv1을 사용하기 때문에 SSLv2를 사용하는 사이트의 경우 보안 경고 페이지가 표시되는데 이에 대한 해결책


- 메뉴얼

Resin 3.X 인증서 설치

    Resin 인증서 설치 메뉴얼의 6페이지 부터 참고.
    3,4,5 페이지 내용은 한국전자인증에서 인증서를 이미 만들어서 keystore 파일에 포함되어 있음.
    JKS 방식(page 6,7)과 PKCS 방식(page 8,9)이 있는데 Java 환경의 keystore 파일로 설치할 경우 JKS 방식을 사용.

IIS 체인인증서 설치 매뉴얼(p7b).pdf

IIS7.0 SSL인증서 설치 매뉴얼(갱신-pfx).pdf

Resin3.x 인증서 설치(v1.0).pdf

SSL 인증서 적용 방법(v1.5).pdf

Tomcat Server 인증서 설정방법(2011).pdf

Tomcat SSL 인증서 설치 매뉴얼(백업된 인증서 설치 - JKS).pdf

Weblogic10.x 인증서 설정.pdf


BareTail

http://www.baremetalsoft.com/baretail/

Highlighting이 되어서 로그볼 때 편하다.
꼭 tail 기능이 아니더라도 그냥 로그 볼때 쓰면 된다.

북마크 기능이 없어서 좀 아쉽다.


- 로그보는 프로그램

[정리] Build, deploy, and test EJB components in just a few seconds

- http://www.javaworld.com/javaworld/jw-06-2005/jw-0613-ejb.html

EJB 개발은 시간이 많이 걸리고 단위테스트도 쉽지 않다.
EJB 컨테이너에 배포해야만 실행시킬수 있는데 복잡하고 시간이 걸린다.

컨테이너에서 테스트를 돌리지 않고 테스트에서 컨테이너를 돌리자.

OpenEJB는 가볍고 EJB 명세를 잘 따른다. 기능에 충실하다.
OpenEJB, EJB 컴포넌트, JUnit테스트가 같은 JVM에서 돌아간다.

개발시에서는 내장 OpenEJB를 사용해서 빠르고 쉽게 테스트하고 통합테스트는 실제 사용되는 EJB 컨테이너에서 테스트하자.
=> EJB 3.1에서 제공하는 EJBContainer를 이용하면 EJB 컴포넌트를 배포하지 않고도 테스트할 수 있다.

XStream을 이용하면 테스트시 반복되는 입력을 XML로 처리할 수 있다.
=> XStream은 유용할거 같은데 반복되는 데이터를 자동으로 처리하는 방법은 좋은 방법이 더 많으니깐...

EJB Test with EJBContainer of OpenEJB

- http://openejb.apache.org/examples-trunk/simple-stateless/README.html


- OpenEJB 4.0.0-beta-1 사용
모든 라이브러리를 포함시킨다.[각주:1]
package org.superbiz.stateless.basic;

import javax.ejb.Stateless;

@Stateless
public class CalculatorBean {

    public int add(int a, int b) {
        return a + b;
    }
    ...

EJB 3.1에서 제공하는 EJBContainer를 이용해서 테스트한다. 
package org.superbiz.stateless.basic;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import javax.ejb.embeddable.EJBContainer;

import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {

    private CalculatorBean calculator;

    /**
     * Bootstrap the Embedded EJB Container
     *
     * @throws Exception
     */
    @Before public void setUp() throws Exception {

        EJBContainer ejbContainer = EJBContainer.createEJBContainer();
        Object object = ejbContainer.getContext().lookup("java:global/PROJECT_NAME/CalculatorBean");
        assertTrue(object instanceof CalculatorBean);
        calculator = (CalculatorBean) object;
    }

    /**
     * Test Add method
     */
    @Test public void testAdd() {

        assertEquals(10, calculator.add(4, 6));
    }
    ...

- EJBContainer를 BeforeClass에서 하는게 좋을듯. 속도차이가 10배 정도 차이가 난다.
  1. 의존 관계가 복잡하므로 이렇게 하는게 정신건강에 이롭다. [본문으로]

OpenEJB - Apache TomEE

- 예전에 Tomcat에서 EJB를 구동시키려고 찾다가 OpenEJB를 알게 되었는데 Apache TomEE[각주:1]라는 이름으로 발전해 나가려고 하는거 같다.

- Apache TomEE Plus
Tomcat + OpenEJB인듯.


- Apache Tomcat Drop-in wars
예전의 OpenEJB war인듯.


- Apache OpenEJB Standalone Server
OpenEJB

  1. 이름 하나는 정말 잘 짓는다. [본문으로]

OpenEJB - Hello world

- http://openejb.apache.org/hello-world.html


openejb-3.1.4_hello> set OPENEJB_HOME=D:/java/openejb/openejb-3.1.4
openejb-3.1.4_hello> set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_26
openejb-3.1.4_hello> set path=%path%;%openejb_home%/bin;%java_home%/bin

package org.acme;

import javax.ejb.Remote;

@Remote
public interface Hello{
	public String sayHello();
}
package org.acme;

import javax.ejb.Stateless;

@Stateless
public class HelloBean implements Hello{
    public String sayHello(){
        return "Hello World!!!!";
    }
} 
openejb-3.1.4_hello> javac -cp %OPENEJB_HOME%/lib/javaee-api-5.0-3.jar -d . *.java
openejb-3.1.4_hello> jar cvf hello.jar org
추가된 manifest
추가 중: org/(내부 = 0) (외부= 0)(0%가 저장되었습니다.)
추가 중: org/acme/(내부 = 0) (외부= 0)(0%가 저장되었습니다.)
추가 중: org/acme/Hello.class(내부 = 203) (외부= 168)(17%가 감소되었습니다.)
추가 중: org/acme/HelloBean.class(내부 = 383) (외부= 274)(28%가 감소되었습니다.)
package org.acme;

import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.rmi.PortableRemoteObject;

public class HelloClient{
	public static void main(String[] args) throws Exception{ 
		Properties props = new Properties();
		props.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.RemoteInitialContextFactory"); 
		props.put(Context.PROVIDER_URL,"ejbd://127.0.0.1:4201"); 
		Context ctx = new InitialContext(props); 
		Object ref = ctx.lookup("HelloBeanRemote"); 

		Hello h = (Hello)PortableRemoteObject.narrow(ref,Hello.class); 
		String result = h.sayHello(); 
		System.out.println(result); 
	}
}
openejb-3.1.4_hello> javac -d . HelloClient.java

openejb-3.1.4_hello> start %OPENEJB_HOME%/bin/openejb start
Apache OpenEJB 3.1.4    build: 20101112-03:32
http://openejb.apache.org/
log4j:WARN No appenders could be found for logger (org.apache.openejb.resource.activemq.ActiveMQResourceAdapter).
log4j:WARN Please initialize the log4j system properly.
[init] OpenEJB Remote Server
  ** Starting Services **
  NAME                 IP              PORT
  httpejbd             127.0.0.1       4204
  admin thread         127.0.0.1       4200
  ejbd                 127.0.0.1       4201
  ejbd                 127.0.0.1       4203
  hsql                 127.0.0.1       9001
  telnet               127.0.0.1       4202
-------
Ready!

openejb-3.1.4_hello> %OPENEJB_HOME%/bin/openejb deploy hello.jar
Application deployed successfully at "hello.jar"
App(id=D:\resources\programs\java\openejb\openejb-3.1.4\apps\hello.jar)
    EjbJar(id=hello.jar, path=D:\resources\programs\java\openejb\openejb-3.1.4\apps\hello.jar)
        Ejb(ejb-name=HelloBean, id=HelloBean)
            Jndi(name=HelloBeanRemote)

openejb-3.1.4_hello> java -cp %OPENEJB_HOME%/lib/openejb-client-3.1.4.jar;%OPENEJB_HOME%/lib/javaee-api-5.0-3.jar;. org.acme.HelloClient
Hello World!!!!