'Jakarta'에 해당되는 글 2건

  1. [2008/04/04] Jakarta common-dbcp + oracle9i 사용시
  2. [2008/01/04] 메일전송 - Jakarta Project Common-Email API 사용

Jakarta common-dbcp + oracle9i 사용시

[작렬허접코딩/자바]
문제점이 있다.

common-dbcp + 오라클 9i 이상을 함께 사용할 때 Oracle의 CLOB 컬럼을 읽어올 때 문제가 발생한다.
에러 내용은 다음과 같다.

org.apache.tomcat.dbcp.dbcp.DelegatingResultSet
        at kr.co.jinjin.jjxweb.sql.DBActor.getCLOB(Unknown Source)
        at kr.co.jinjin.jjxweb.BaseJob.readClob(Unknown Source)
        at kr.co.jinjin.jjxweb.Job.doAct(Unknown Source)
        at kr.co.jinjin.servlet.jjxwebservlet.doPost(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
        at java.lang.Thread.run(Thread.java:595)

다음은 8i에서 CLOB를 읽어오기 위해 처리하던 부분이다.
public String getCLOB(String poolName,
   String tableName,
   String clobColumnName,
   String sqlstr) throws Exception {
 
  Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;
  Reader m_reader = null;
  char[] m_buffer = null;
 
  StringBuffer readedStr = null;
  StringBuffer qry = new StringBuffer();
 
  qry.append("SELECT " + clobColumnName + " FROM " + tableName);
  qry.append((!sqlstr.trim().toUpperCase().startsWith("WHERE") ? " WHERE " : " ") + sqlstr);
 
  try {
   con = dbcon.getPooledConnection(poolName);
   stmt = con.createStatement();
   rs = stmt.executeQuery(qry.toString());
   
   if(rs.next()) {
    // 문제 발생시키는 놈 Class Casting이 안된다.
    CLOB clob = ((OracleResultSet)rs).getCLOB(clobColumnName);
   
    m_reader = clob.getCharacterStream();
    readedStr = new StringBuffer();
    m_buffer = new char[BUFFER_LENGTH];
   
    int readedIndex = 0;
    while ((readedIndex = m_reader.read(m_buffer)) != -1)  {
     for (int i=0; i<readedIndex; i++) {
      //System.out.print(buffer[i]);
      readedStr.append(new String(m_buffer, 0, readedIndex));
      m_buffer = new char[BUFFER_LENGTH];
     }
    }
   }
   
  } catch(Exception e) {
   throw new Exception("[Exception] DBActor.getCLOB()  : [" + tableName + "." + clobColumnName + "] " + e.getMessage());
  } finally {
   try {
    dbcon.release(rs, stmt, con);
    if(m_reader != null) m_reader.close();
   } catch(Exception e) {
    e.printStackTrace();
   }
  }
 
  return readedStr.toString();
 }

그럼 어떻게 처리해야 하나?
일반적인 varchar2 컬럼을 읽어오듯이
SELECT NORMAL_COL, CLOB_COL FROM MYTABLE WHERE....
이렇게 읽어오니 모든 데이터가 잘도 읽힌다.
참 환장하겠다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/04/04 22:50 2008/04/04 22:50

메일전송 - Jakarta Project Common-Email API 사용

[작렬허접코딩/자바]

출처 : 자바서비스넷

Jakarta Commons Email

I. Commons-Email
2005년 9월 27일 드디어 Commons-Email이 version 1.0이 배포되었습니다
Commons-Email은 Java Mail API를 근간으로 좀더 심플하게 메일을 보내는 방안을 제시합니다.
기능상으로는 첨부파일 뿐만 아니라 HTML Email도 쉽게 보낼수 있는 API를 제공합니다

II. Download!
Commons-Email을 사용하기 위해서는 JavaMail의 mail.jar와 JAF의 activation.jar 가 필요합니다
Commons-Email download
http://jakarta.apache.org/site/download ··· mail.cgi

JavaMail 1.3
http://java.sun.com/products/javamail/d ··· dex.html

JAF 1.0.2
http://java.sun.com/products/javabeans/glasgow/jaf.html

Commons-Email
http://jakarta.apache.org/commons/email/index.html

Commons-Email API
http://jakarta.apache.org/commons/email ··· .htmliii. Install

다운 받은 3개의 파일을 $tomcat_home/webapps/ROOT/WEB-INF/lib/ 밑에 복사합니다

IV. 샘플 소스

① 간단히 텍스트만 보내기

SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();
 
org.apache.commons.mail.SimpleEmail 은 가장 중심이 되는 org.apache.commons.mail.Email을 상속받아
setMsg(java.lang.String msg)만을 구현한 가장 기본적인 클래스입니다.

setHostName(java.lang.String aHostName)으로 SMTP 서버를 지정하고,

addTo(java.lang.String email) or addTo(java.lang.String email, java.lang.String name)으로

받는 사람의 메일주소를, setFrom(java.lang.String email) or setFrom(java.lang.String email, java.lang.String name)으로

보내는 사람의 메일을 설정합니다

물론 addTo 함수의 추가로 여러 사람에게 메일을 보낼 수 있습니다.

가장 기본적인 setSubject(java.lang.String subject)와 setMsg(java.lang.String msg)로

메일 제목과 내용을 입력한 후 send() 함수로 전송합니다


② 파일 첨부하기

// 첨부할 attachment 정보를 생성합니다
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("mypictures/john.jpg");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Picture of John");
attachment.setName("John");

// 기본 메일 정보를 생성합니다

MultiPartEmail email = new MultiPartEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("The picture");
email.setMsg("Here is the picture you wanted");

// 생성한 attachment를 추가합니다
email.attach(attachment);

// 메일을 전송합니다
email.send();


첨부파일과 같이 보낼려면 EmailAttachment 를 생성하여 파일 정보를 입력해 줍니다

파일경로와 파일형태, 파일 설명등을 추가하며 마지막으로 setName(java.lang.String name)을 통해

첨부되는 파일명을 설정합니다

그 후 MultiPartEmail 을 통해 SimpleEmail 처럼 기본 메일정보를 설정합니다

마지막으로 MultiPartEmail의 attach() 함수를 통해 첨부 파일을 추가하여 전송합니다

만약 첨부파일이 두개 이상이라면 EmailAttachment 를 여러개 생성하여 파일 정보를 설정 한 후

attach()를 통해 추가해 주기만 하면 됩니다


③ URL을 통해 첨부하기

// 첨부할 URL정보 및 파일 기본 정보를 설정합니다
EmailAttachment attachment = new EmailAttachment();
attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Apache logo");
attachment.setName("Apache logo");

// 기본 메일 정보를 생성합니다
MultiPartEmail email = new MultiPartEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("The logo");
email.setMsg("Here is Apache's logo");

// attachment를 추가합니다
email.attach(attachment);

// 메일을 전송합니다
email.send();
 
파일 경로 정보를 setURL(java.net.URL) 으로 설정할 뿐 위의 첨부파일과 동일합니다


④ HTML 이메일 보내기

// 기본 메일 정보를 생성합니다
HtmlEmail email = new HtmlEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test email with inline image");

// 삽입할 이미지와 그 Content Id를 설정합니다
URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
String cid = email.embed(url, "Apache logo");

// HTML 메세지를 설정합니다

email.setHtmlMsg("<html>The apache logo - <img src=\"cid:"+cid+"\"></html>");

// HTML 이메일을 지원하지 않는 클라이언트라면 다음 메세지를 뿌려웁니다
email.setTextMsg("Your email client does not support HTML messages");

// 메일을 전송합니다
email.send();
 
HtmlEmail 클래스는 setHtmlMsg()로 작성된 html을 보낼 수 있습니다

이미지 처리가 조금 까탈스럽네요


V. 인증처리

만약 SMTP 서버가 인증을 요구한다면 org.apache.commons.mail.Email 의

setAuthentication(java.lang.String username, java.lang.String password)를 통해 해결할 수 있습니다

이 함수는 JavaMail API의 DefaultAuthenticator 클래스를 생성하여 사용합니다


from http://www.jakartaproject.com/article/j ··· 06202560

==================================================
mail : unicorn@jakartaproject.com
home : http://www.jakartaproject.com
제목 : Re: 한글문제...
글쓴이: 권남~(kwon37xi) 2005/11/01 09:30:44 조회수:1390 줄수:3
email.setCharset("euc-kr");을 Email 객체를 생성하자마자 실행하면 한글문제도 없어요..

http://kwon37xi.egloos.com
제목 : Re: 인증처리..
글쓴이: 박재원(guest) 2006/06/27 21:14:42 조회수:795 줄수:5
인증처리는 그냥 아래처럼 작성해 주면 되는데..
위에 설명하신 부분은 좀 어렵게 느껴지네요..

  email.setAuthentication(userid,password);
 
제목 : Re: hotmail에서의 한글 깨짐현상...
글쓴이: 손님(guest) 2007/12/18 20:13:36 조회수:164 줄수:6
hotmail에서 보내는 이 에 한글이름을 넣으면 깨지는데..
다음이나 파란등 기타 한국 메일에서는 안깨지구요...

어떤 인코딩 타입을 적용해 봐도 소용이 없네용..

방법이 없나요??

이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/01/04 11:25 2008/01/04 11:25