2015년 7월 23일 목요일

javamail smtp 사용 시, 포트 587과 465에 따른 properties 설정

javamail을 사용하여 smtp 메일을 보낼 때에 포트 587과 465에 각각에 따라 properties 설정이 달라야 한다.

포트가 465(TLS)일 때는 다음과 같이 properties를 설정해야 한다.
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");

포트가 587(SSL0일 경우엔 다음과 같이 설정해야 한다.
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

위의 내용은 아래 url을 참조하였다.
http://stackoverflow.com/questions/20290625/javamail-javax-mail-authenticationfailedexception

2015년 7월 2일 목요일

OSGi 번들 빌드를 위한 BND 도구

OSGi 위에서 실행되는 번들의 매니페스트 파일을 보면 OSGi 번들이 참조하는 패키지 정보, 포함하고 있는 패키지, export하는 패키지등의 여러 정보가 있다.

이와 같은 정보를 일일이 작성해서 번들을 만들기는 너무가 성가신 일이다. 따라서 이를 자동으로 처리해주는 툴이 있는데 이것이 BND 툴이다.

다음 사이트에서 다운로드 받을 수 있다.

BND 툴로 OSGi 번들을 빌드하거나 3rd party jar 파일들을 OSGi 번들로 변환할 수 있다.

가령 netty-all-4.0.26.Final.jar 파일을 OSGi 번들로 변환할려면 다음과 같이 할 수 있다.

우선 BND 툴을 다운로드 받은 후 cmd 상에서 biz.aQute.bnd-2.3.0.jar 파일이 있는 곳으로 위치한 후에 아래와 같은 명령을 실행하면 된다.

>java -jar biz.aQute.bnd-2.3.0.jar  wrap -o ../netty-all-4.0.26.Final.jar -v 4.0.26.Final -b io.netty netty-all-4.0.26.Final.jar

wrap은 jar 파일을 OSGi로 변환하는 명령이다. -o 옵션은 변환된 파일명을 -v 는 버전, -b 옵션은 번들의 symbolic name을 의미한다.
위와 같이 output 파일명이 기존 파일명과 같을 때에는 변환 실패하게 되므로 디렉토리 위치를 다르게 해줘야 한다.


메이븐 플러그인으로도 BND 툴을 사용할 수 있다. 이는 다음 url을 참조하면 된다.

메이븐 플러그인 사용 시 주의할 점은 리플렉션 코드에서 다른 번들의 클래스를 참조한다면 이를 자동으로 식별할 수가 없게 된다. 이에 따라 번들을 정상적으로 만들어서 배포했는데 어떤 class를 참조할 수가 없다며 에러가 발생하게 된다.

보통 이와 같은 경우는 다음과 같은 jdbc 드라이버를 참조하는 코드를 사용할 때 많이 발생한다. 
Class.forName("com.mysql.jdbc.Driver");

이럴 때에는 Import-Package에 com.mysql.jdbc 를 명시해주어야 한다.
com.mysql.jdbc,*