Apache-Tomcat Native lib Install

source download : http://tomcat.apache.org/native-doc/index.html

rpm -qa|grep apr-devel

yum search apr-devel
yum install apr-devel

./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/jdk

make
make install

# installed dir => /usr/local/apr

cat "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/apr/lib" >> /etc/profile
source /etc/profile

service tomcat restart


2010/04/05 16:38 2010/04/05 16:38
* Apache Tomcat 일반계정으로 구동하기
  - jsvc 이용(Tomcat ver 6.0.18)

Apache Tomcat 웹 사이트에서 Tomcat 5.5 / Tomcat 6.x binary 를 다운로드 받아
압축을 풀어보면 bin 디렉토리 안에 jsvc.tar.gz 파일이 존재한다.
jsvc.tar.gz을 압축풀고 컴파일 한다.

아래는 설치(명령어만) 과정이다.
[root@host ~]# cd /usr/local/tomcat/bin
[root@host ~]# tar zxf jsvc.tar.gz
[root@host ~]# cd jsvc-src
# 실행가능하도록 퍼미션 변경
[root@host ~]# chmod 755 ./configure
# compile전 옵션 설정
[root@host ~]# ./configure --with-java=/usr/local/jdk
# compile
[root@host ~]# make
# daemon file 복사
[root@host ~]# cp native/jsvc $CATALINA_HOME/bin
# daemon 실행 shell script 복사
[root@host ~]# cp native/Tomcat5.sh $CATALINA_HOME/bin
# shell script 환경 설정(path 설정, tomcat user)
[root@host ~]# vi $CATALINA_HOME/bin/Tomcat5.sh
# 기동
[root@host ~]# $CATALINA_HOME/bin/Tomcat5.sh start
# 종료
[root@host ~]# $CATALINA_HOME/bin/Tomcat5.sh stop


아래는 Tomcat5.sh 파일을 수정해 Redhat계열의 init.d에서 돌아가도록 만든 파일이다.
#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 80 20
# description: Apache Tomcat on JSVC tool.

# Source function library.
. /etc/rc.d/init.d/functions

##############################################################################
#
#   Copyright 2004 The Apache Software Foundation.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
##############################################################################
#
# Small shell script to show how to start/stop Tomcat using jsvc
# If you want to have Tomcat running on port 80 please modify the server.xml
# file:
#
#    <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->
#    <Connector className="org.apache.catalina.connector.http.HttpConnector"
#               port="80" minProcessors="5" maxProcessors="75"
#               enableLookups="true" redirectPort="8443"
#               acceptCount="10" debug="0" connectionTimeout="60000"/>
#
# That is for Tomcat-5.0.x (Apache Tomcat/5.0)
#
# Adapt the following lines to your configuration


JAVA_HOME=/usr/local/jdk
CATALINA_HOME=/usr/local/tomcat
DAEMON_HOME=/usr/local/tomcat
TOMCAT_USER=tomcat

# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/usr/local/tomcat

CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

PROGNAME=`basename $0`
RETVAL=0

start()
{
    START_COMMAND="\
    $DAEMON_HOME/bin/jsvc \
    -user $TOMCAT_USER
    -home $JAVA_HOME
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap"
    #
    # To get a verbose JVM \
    #-verbos \
    # To get a debug of jsvc
    #-debub

    echo -n $"Starting $PROGNAME : "
    daemon $START_COMMAND
    RETVAL=$?
    [ $RETVAL -eq 0 ] && [ -f $PID_FILE ]
    echo
    return $RETVAL
}


stop()
{
    STOP_COMMAND="\
    $DAEMON_HOME/bin/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap"

    echo -n $"Stopping $PROGNAME : "
    killproc jsvc 
    RETVAL=$?
    echo
    return $RETVAL
}

restart()
{
    stop
    start
}


case "$1" in
  start)
    start
    ;;

  stop)
    stop 
    ;;

  status)
    status -p $PID_FILE jsvc
    ;;

  restart)
    restart
    ;;

  *)
    echo "Usage $PROGNAME start/stop"
    exit 1;;
esac

exit $?


2010/04/05 16:31 2010/04/05 16:31

SQL to Java code 변환

Dev 2010/03/30 15:53
얼마전, AcroEdit를 설치해 보니, 매크로 스크립트 기능 중 플러그인 식으로
라인단위로 코드로 감싸는 기능이 있어 편리하겠다는 생각이 들었다.
하지만, Java 관련 개발 작업 시 Eclipse를 주로 사용하는 사람에게
그 기능을 사용하기 위해 다시 AcroEdit를 실행하고 다시 스크립트를 실행하는게 왠지
불편했다.
이럴바에 간단하게 만들어보자라는 취지로 해 봤다.

DB 연동해서 개발을 하다 보면 툴에서 SQL을 테스트하고 작성 완료해서
실제 Java 코딩으로 옮겨야 할 경우 일일이 코드에 삽입을 하게 된다.
예를 들어,
String sql   = "select a, b, c, d";
         sql += "   from tablename";
         sql += " where a = b      ";
         sql += "     and c = '1234';

이런 식의 코드나 StringBuffer 클래스를 이용하는

StringBuffer sql = new StringBuffer();
sql.append("select a, b, c, d \n");
sql.append("   from tablename \n");
sql.append(" where a = b      \n");
sql.append("     and c = '1234' \n);

이런 코드를 생성하기 마련이다.
물론, iBATIS를 이용하는 경우도 많지만 iBATIS를 이용하지 않을 경우에
위와 같은 일은 참 번거로운 일이 될것이다.

차라리, 이클립스에 실행 가능한 자바 클래스를 하나 만들어서 필요할 때 마다
실행해서 복사 후 붙여넣기를 하면 좋겠다는 생각이다.

/**
* 복사한 SQL문을 Java에서 사용 가능하도록 Code로 변환한다.
* @author dawnst
* 2010.03.29
*/

public class Sql2Java
{
   public static void main(String[] args)
   {   
       Sql2Java sj = new Sql2Java();
       System.out.println(sj.sql2Java().toString());
   }

   /**
    * ClipBoard 에 있는 내용을 반환한다.
    * @return String
    */
   private String getClipBoard()
   {
       String ret = "";
      
       java.awt.datatransfer.Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
       java.awt.datatransfer.Transferable data = clipboard.getContents(this);
       try
       {
           ret = (String) data.getTransferData(java.awt.datatransfer.DataFlavor.stringFlavor);
       }
       catch (java.awt.datatransfer.UnsupportedFlavorException e)
       {
           e.printStackTrace();
       }
       catch (java.io.IOException e)
       {
           e.printStackTrace();
       }
      
       return ret;
   }
  
   /**
    * ClipBoard의 SQL문을 Java의 SQL문 형태로 변환해 반환한다.
    * @return StringBuffer
    */
   private StringBuffer sql2Java()
   {
       String clipBoard = getClipBoard();
       StringBuffer buffer = new StringBuffer();
      
       if(clipBoard != null && clipBoard.length() > 0)
       {
           String [] line = clipBoard.split("\n");
          
           // SQL문 Line의 문자수를 세어 가장 많은 문자수를 찾는다.
           int maxCharLength = 0;
           for(int i=0; i<line.length; i++)
           {
               if(maxCharLength < line[i].length())
               {
                   maxCharLength = line[i].length();
               }
           }
          
          
           for(int i=0; i<line.length; i++)
           {
               if(i==0)
               {
                   buffer.append("StringBuffer sql = new StringBuffer();\n");
                   buffer.append("sql.             append(\""+line[i]);
               }
               else
               {
                   buffer.append("sql.append(\"\\n\").append(\""+line[i]);

               }
              
               // 최대 SQL 문자수 보다 적은 Line은  최대 문자수 만큼 공백으로 자리수를 채운다.
               for(int j=0; j<maxCharLength - line[i].length(); j++)
               {
                   buffer.append(" ");
               }
              
               buffer.append("\");");
               buffer.append("\n");
           }
       }
      
       return buffer;
   }
}

사용 방법은
1. 이클립스에 프로젝트를 하나 만들던가, 아니면, 기존에 만들어진 프로젝트에 클래스 하나를 만들어 run에 등록한다.
2. SQL 툴에서 만들어지 SQL문을 복사(Ctl+c)한다
3. run에 등록된 내용을 실행한다.
4. 출력창에 출력된 Java SQL 코드를 복사해 개발하는데 붙여넣기 등, 이용한다.


실행 결과
StringBuffer sql = new StringBuffer();
sql.             append("select a, b, c, d");
sql.append("\n").append("  from tablename ");
sql.append("\n").append(" where a = b     ");
sql.append("\n").append("   and c = '1234'");

2010/03/30 15:53 2010/03/30 15:53