/usr/local/apache2/bin

httpd -V 

Server version: Apache/2.0.63

Server built:   Mar 21 2011 18:20:43

Server's Module Magic Number: 20020903:13

Server loaded:  APR 0.9.17, APR-UTIL 0.9.15

Compiled using: APR 0.9.17, APR-UTIL 0.9.15

Architecture:   64-bit

Server compiled with....

 -D APACHE_MPM_DIR="server/mpm/prefork"

 -D APR_HAS_SENDFILE

 -D APR_HAS_MMAP

 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)

 -D APR_USE_SYSVSEM_SERIALIZE

 -D APR_USE_PTHREAD_SERIALIZE

 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT

 -D APR_HAS_OTHER_CHILD

 -D AP_HAVE_RELIABLE_PIPED_LOGS

 -D HTTPD_ROOT="/usr/local/apache2"

 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"

 -D DEFAULT_PIDLOG="logs/httpd.pid"

 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"

 -D DEFAULT_LOCKFILE="logs/accept.lock"

 -D DEFAULT_ERRORLOG="logs/error_log"

 -D AP_TYPES_CONFIG_FILE="conf/mime.types"

 -D SERVER_CONFIG_FILE="conf/httpd.conf"


'Java' 카테고리의 다른 글

quartz Jwatch  (0) 2012.07.17
enum equals string  (0) 2012.07.10
Installing Tomcat 6 on CentOS 5  (0) 2012.06.18
java.lang.NoClassDefFoundError: org/codehaus/jettison/mapped/Configuration  (0) 2012.06.12
Java에서 XML없이 SQL개발하기  (0) 2011.07.01


간단하다...라는 말로 표현 할 수있다.. 나름...

http://code.google.com/p/jwatch/


아래 와 같이 JMX 추가 하고  quartz export 하고 나면 나머지는 자동으로 처리된다. 

즉 소스를 사용하고 싶은곳에 넣은 다음 아래 내용과 함께 web.xml 을 세팅해주면 된다는 말.. 

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=2911
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dorg.quartz.scheduler.jmx.export=true

Javaの列挙型(Enum)のequalsと==とtoStringAdd Star

恥ずかしながらすぐに忘れる…

static enum Number{
    ONE,
    TWO,
    THREE
}

public static void main(String args[]) {
    System.out.println("ONE equals Number.ONE            is " + "ONE".equals(Number.ONE));
    System.out.println("ONE equals Number.ONE.toString() is " + "ONE".equals(Number.ONE.toString()));
    System.out.println("ONE   ==   Number.ONE.toString() is " + ("ONE" == (Number.ONE.toString())));
}


実行結果

ONE equals Number.ONE            is false
ONE equals Number.ONE.toString() is true
ONE   ==   Number.ONE.toString() is true

文字列との比較はtoString()を使用



Enum#equals()

内部では「==」を使用している、なるほどね~

public final boolean equals(Object other) { 
    return this==other;

출처 : http://d.hatena.ne.jp/guangda/20100106/1262760915


http://wavded.tumblr.com/post/258713913/installing-tomcat-6-on-centos-5

http://yaplog.jp/guitarist_y/archive/108


yum install tomcat6*  tomcat관련 패키지 인스톨

yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps  특정 패키지만 인스툴

아래와 같은 에러가 발생 할 경우 해당 블로그에 적혀 있는대로 

rpm -Uvh'http://plone.lucidsolutions.co.nz/linux/centos/images/jpackage-utils-compat-el5-0.0.1-1.noarch.rpm'

--> Finished Dependency Resolution
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 from rhel-x86_64-server-5 has depsolving problems
  --> Missing Dependency: /usr/bin/rebuild-security-providers is needed by package java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 (rhel-x86_64-server-5)
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 from rhel-x86_64-server-5 has depsolving problems
  --> Missing Dependency: /usr/bin/rebuild-security-providers is needed by package java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 (rhel-x86_64-server-5)
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 from rhel-x86_64-server-5 has depsolving problems
  --> Missing Dependency: /usr/bin/rebuild-security-providers is needed by package java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 (rhel-x86_64-server-5)
Error: Missing Dependency: /usr/bin/rebuild-security-providers is needed by package java-1.4.2-gcj-compat-1.4.2.0-40jpp.115.x86_64 (rhel-x86_64-server-5)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest

Consider a simple Xsctream example to create JSON out of the Bean:

Bean bean = new Bean();
bean
.addNames("John", "Doe");
bean
.addNames("Jane", "Doe");

XStream xstream = new XStream(new JettisonMappedXmlDriver());    
xstream
.setMode(XStream.NO_REFERENCES);

System.out.println(xstream.toXML(bean));

results in

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jettison/mapped/Configuration
    at com
.thoughtworks.xstream.io.json.JettisonMappedXmlDriver.<init>(JettisonMappedXmlDriver.java:55)
    at
Main.main(Main.java:12)

Note that libraries are imported as they should be

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

And proper jars are included

enter image description here

link|improve this question

feedback
  
 

2
down voteaccepted

You need jettison.jar from codehaus click this link



'Java' 카테고리의 다른 글

enum equals string  (0) 2012.07.10
Installing Tomcat 6 on CentOS 5  (0) 2012.06.18
Java에서 XML없이 SQL개발하기  (0) 2011.07.01
Fiddler post형식으로 테스트 데이터 보내기  (0) 2011.03.22
split(".")  (0) 2010.08.19

Java에서 XML없이 SQL개발하기

 요약하면, Java의 여러 프레임웍은  Xml안에 SQL을 넣는 방식을 지원하는데, 줄바꿈이 있는 문자열을 편하게 쓰게 해주는 따옴표 세 개문법 (""")만 Java에 추가된다면 XML을 사용하는 목적을 충족시키면서도 XML로 인한 여러 단점들을 겪지 않아도 된다는 것입니다. 따옴표 세개는 Java에서 추가될 예정이지만, Groovy등에서는 이미 지원합니다. 지금이라도 SQL관리에만 Groovy를 쓰면 쿼리편집이 조금 더 편리해질만도 합니다.

 

XML로 SQL을 관리할 수 있는 Java framework

  많은 Java 프레임웍들이 SQL구문들을 XML파일 안에서 코딩하게 되어 있습니다.

  가장 대표적인 것이 iBatis입니다. 아래와 같이 SQL 구문, 파라미터를 운반하는 클래스,  쿼리의 결과가 담길 클래스를 XML안에 선언합니다.

 

    <select id="findByIsbn13" parameterClass="string" resultClass="book">
    SELECT  title,    author,     isbn13,     isbn10,     pages, content, imageUrl
    FROM book
    WHERE isbn13 = #isbn13#
    </select>
    <select id="findByTitle" parameterClass="string" resultClass="book">
    SELECT  title,    author,     isbn13,     isbn10,     pages, content, imageUrl
    FROM book
    WHERE title = #title#
    </select>

 

그리고 Hibernate와 JPA에서도 "named query"라는 개념으로, SQL을 따로 XML파일로 빼도 됩니다. 아래는 Hibernate에서 SQL을 XML 파일안에 설정한 예입니다.

 

<sql-query name="findBookByIsbn13">
    <return alias="book" class="tdd.edu.domain.Book"/>
   SELECT  title,    author,     isbn13,     isbn10,     pages, content,  imageUrl
   FROM book
    WHERE isbn13 = :isbn13
 </sql-query>

 Navie SQL과 Hibernate가 쓰는 HQL을 모두 .xml파일 안에 선언하는 것이 가능합니다. JPA를 사용해도 마찬가지로 JPA-QL, Native SQL을 모두 XML에 넣어도됩니다.

 

 Spring JDBC에서는 jdbctemplate.execute 등의 메소드에서 SQL내용을 직접 문자열로 넘기게 되어있지만, Applicaton context 안에 쿼리를 저장해두고, 이를 사용하는 쪽에서 java.util.Properties 같은 객체를 Dependency Injection 받아서 사용하면 iBatis처럼 XML로 쿼리가 관리됩니다.

 

<util:properties id="bookSqls">
    <prop key="findByIsbn13">
   SELECT  title,    author,     isbn13,     isbn10,     pages, content,  imageUrl
   FROM book
    WHERE isbn13 = :isbn13
    </prop>
</util:properties>

 

 그런데, Spring-jdbc나 Hibernate, JPA에서는 XML에 SQL을 저장하는 방식이 선택일 뿐이지만, iBatis 2.x에서는 반드시 XML안에 쿼리를 넣어야합니다.  myBatis라고 이제 이름이 갈라진 iBatis 3.x에서는 Annotation으로 쿼리를 지정할 수 있어서, .java파일 안에 문자열로 SQL에 넣어도 되기는 합니다.

 

final String PERSIST_INFO =
“INSERT INTO simple_information(info_id, info_content) VALUES (#{infoId}, #{infoContent})”;

@Insert(PERSIST_INFO)
public int persistInformation(SimpleInformationEntity simpleInfo) throws Exception;

(예제는 http://java.dzone.com/articles/mybatis-formerly-called-ibatis 에서)

 그런데, 이런식으로 쿼리까지 Annotation으로 지정하는 것에 대해서는 의견이 분분할 것 같고, 개인적인 생각으로는 Spring jdbc나 Hibernate처럼 필요하면 직접 메소드 시그니처에 직접 SQL을 문자열로 넘기는 방식이 훨씬 더 자연스럽다고 보여집니다.

 

문제점은?

 iBatis에서는 파라미터에 따라서 SQL이 다르게 구성되는 다이나믹 쿼리를 아래와 같이 선언합니다.

<isEqual property="writerSelected" compareValue="false">
  <isNotNull property="writerList">
    <iterate prepend=" AND writer in" property="writerList"
       open="(" close=")" conjunction=",">#writerList[]#
    </iterate>
  </isNotNull>
</isEqual>

if, for문 처럼 조건,반복문들이 XML로 표현되어 있습니다. 이는 절차적 프로그래밍을 SQL로 하게 되어서 아래와 같은 단점이 있습니다.

  1. 조건, 반복문에 해당하는 태그 문법을 별도로 배워야함
  2. 괄호"{}"대신 열고 닫는 태그가 단락을 구분하기 때문에, 같은 조건,만복문을 코딩해도 Java 같은 범용언어에서보다 긴 코드가 나오게됨
  3. Compile time의 validation범위가 더 줄어들게 됨.  getter, setter로 참조하게 될 속성명에 오타가 있어도 직접 실행해봐야지 오타를 알 수 있음.
  4. Java파일 밖이므로, Emma와 같은 Coverage 확인 툴로 실제 해당 절이 실행되었는지 확인할 수도 없음.

 

왜 SQL이 XML에 들어가게 되었을까?

   직접 JDBC를 쓰면 Connection 관리와 Exception처리 등이 불편합니다. 그리고 JDBC의 Prepared Statement에서는 파라미터를 "?"를 표시하기 때문에 거기에 넘어가는 변수를 위치의 순서로 파악을 해야 합니다.  ":id"와 같이 named parameter를 넣을 수 있다면 훨씬 쿼리의 가독성이 높아집니다. 그래서 그러한 Jdbc의 미흡한 점들을 보완해주는 프레임웍들이 각광을 받았습니다.

  그런데, Connection이나 Excpetion처리의 편의성, named parameter의 활용하고 싶다고 해서 반드시 XML로 SQL를 관리해야 하는 것은 아닙니다. XML을 안 써도 되는 Spring의 jdbcTemplate에서도 그런 기능은 다 제공을 합니다.

  SQL이 한 파일에 모여있지 않으면  DBA한테 쿼리 검수를 맡기거나, 여러 SQL을 한번에 수정할 일이 있을 때 불편해 지기도 합니다. 그러나 그런 점도 SQL 내용을 상수로 선언하는  .Java 파일을 따로 분리하면 해결할 수 잇습니다. SQL을 보관하는 .java파일에 *SqlMap.java와 같은 명명규칙을 부여하고,  SQL 검수를 맡길 때 그 파일만 넘기면 됩니다. 다만, XML에 있을 때보다 줄바꿈 문자등이 불편하게 들어가는데, 그 점은 아래에서 더 자세히 이야기하고자 합니다.

  또, 과거에는  .java파일 밖에 SQL이 있으면 SQL만을 수정을 했을 때는 다시 컴파일을 안 해도 된다는 장점이 강조되었습니다. 그러나, 요즘은 개발 PC에서는 Eclipse로, 서버에 배포할 때는 Ant나 Maven으로 빌드과정이 간편해졌고, 설정파일을 수정해도 파일의 복사를 위해 그런 배포과정을 똑같이 거쳐야 하므로, 컴파일이 필요없다는 것도 더이상 장점이 되지 못합니다.

   XML에 SQL을 썼던 가장 핵심적인 이유는 .java파일에서는 줄 바꿈이 들어간 문자열을 편집을 하는 것이 불편했기 때문입니다.   Java 파일에서는 문자열이 한 줄이 넘어가면 아래와 같이 + 기호를 이용해서 이를 연결해주는 방법 밖에 없습니다.

 

public static final String SELECT_BY_ISBN13 = "SELECT name , id " +

                                                                                      "FROM user " +

                                                                                      "WHERE isbn13 = :isbn13 ";

 

 보통 Toad와 같은 DB client 도구에서 SQL을 작성해서 프로그램에 붙여넣기도 하고, 디버깅 중에는 프로그램 내에 있는 SQL을 반대로 DB client 툴에 붙여넣어서 실행해보기도 하는데, 그 때마다 저렇게 줄바꿈마다 "+"가 있다면 쿼리 편집이 많이 번거로워집니다. 그래서 XML파일 안에 SQL이 있으면 줄바꿈이 있는 긴 문자열도 똑같이 붙여넣을 수 있기 때문에, SQL을 개발하는 작업이 훨씬 편해집니다.  이렇게 SQL이 XML안에 들어가다보니 동적쿼리를 만들기 위한 조건,반복문과 각종 파라미터 매핑 클래스등까지 다 XML에 포함되어 버렸고, 앞에서 말한 부작용들이 점점 드러나기시작했습니다.

  물론 Eclipse의 설정으로 .java 파일에 붙여넣기를 할 때는 "+"를 넣는 것과 같이 줄을 바꿀 때 필요한 작업들을 자동으로 할 수도 있습니다.

 Windows-Preference-Java-Editor-Typing란의 "Escape text When pasting into a string literal"을 선택하고, 큰 따옴표 하나를 연 채 여러줄을 붙여넣으면, 알아서 줄이 바뀔 때는 " + " 기호를 넣어줍니다.

 

typing(1).png

 그리고 반대로 이런 여러줄의 String을 DB 접속 툴에 붙여 넣을 때도 Toad 같은 툴에서는 그런 "+"와 같은 기호를 제거해 주는 기능이 있기도 합니다. 그러나 이런 기능을 활용할 수 있다고 해도, XML에 바로 붙여 넣을 때보다는 불편합니다.

 

 그런데  Python, Groovy, Scala, Ruby, PHP에서 이미 지원하고 있는 '따옴표  3개짜리 문자열 선언'이 Java에도 포함된다면 그런 편집의 불편함을 겪지 않아도 됩니다. 아래와 같이 중간에 줄바꿈이 있어도 전체 SQL 내용이 끊어지지않고 들어갑니다.

 public static final String SELECT_BY_ISBN13 =    """

  SELECT  title,    author,     isbn13,     isbn10,     pages, content,  imageUrl
   FROM book
   WHERE isbn13 = :isbn13

""";

  이 따옴표 3개는 이미 JDK7에 포함되는 것이 제안된 상태인데, JDK에 포함될 실험적인 내용을 구현해보는 "Kijaro"라는 프로젝트에서는 Enhanced String Handling for Java 이름으로 이 명세를 다루고 있습니다. 그러나, 내년 중반기 쯤에 JDK7에 포함되어 발표될 예정인, java의 문법 개선내용을 주로 담고 있는 project coin에서는 아직 이를 찾아볼 수 없어서, 언제 Java에 반영될지는 아직 미지수입니다.

 그렇다면 Java에서 따옴표 3개를 지원해주기 전까지는 계속 XML의 불편함을 감수해야 할까요? 저는 이미 이 문법을 지원하는 Groovy를 SQL관리 용도로 사용해볼만 하다고 생각합니다.

 

Groovy로 따옴표 3개 문법을 이용해서 SQL 관리하기

  Groovy를 사용하기 위해서는 Eclipse와 Maven에 아래 설정만 해주면 됩니다.

 

  1. Eclipse에서 Groovy plugin 설치

     ( update site는 http://dist.codehaus.org/groovy/distributions/greclipse/snapshot/e3.6/ )

  2.  pom.xml에 아래와 같이 Groovy를 compile할 수 있는 plugin과 dependency 추가

 

Dependencies에 선언 추가

<dependency>

         <groupId>org.codehaus.groovy.maven.runtime</groupId>

         <artifactId>gmaven-runtime-1.6</artifactId>

        <version>1.0</version>

</dependency>

 

 build-plugins 에 아래 내용 추가

   <plugin>
                <groupId>org.codehaus.groovy.maven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>1.0</version>
                <executions>

                    <execution>

                      <goals> <goal>compile</goal></goals>
                      <configuration>
                      <sources><fileset>
                                    <directory>${pom.basedir}/src/main/java</directory>
                                    <includes>
                                        <include>*-/-.groovy</include>
                                    </includes>
                       </fileset> </sources>
                       </configuration>
                   </execution>
               </executions>
            </plugin>

 

 Gmaven plugin에 대한 자세한 내용은 http://docs.codehaus.org/display/GMAVEN/Building+Groovy+Projects 참조

 

 그리고 New-> groovy class를 선택하여서 java 파일 작성하듯이 클래스를 만듭니다.

 new_groovy_class.png

java 문법을 그대로 쓸 수 있으니 따옴표 3개를 쓸 수 있다는 점만 다르다고 생각해도 됩니다. 아래와 같이 .groovy 파일 안에 들어간 SQL이 색깔도 다르게 표시되어 비교적 가독성이 높게 표시되는 것을 확인할 수 있습니다.

groovy_sqls.png

   그런 다음 DAO 등 SQL을 호출하는 쪽에서는 이 상수 문자열을 바로 참조합니다. 상수 선언이 되어 있으니 아래와 같이 오타를 쳐도 미리 알려주고, Ctrl + Space를 치면 자동완성도 됩니다.

 typing_error.png

 

  Dynamic SQL의 경우에도 직접 Java안에서 if문으로 써서 적어주면 됩니다. 아래와 같이 EclEmma 같은 도구로 coverage를 측정하면, 실제 실행되지 않은 조건분기도 눈으로 보입니다.

 

coverage.png

   위의 코드를 Spring-JDBC를 사용했는데, 필요하다면 Hibernate나 apache commons DBUtils에서도 적용 가능한 방법입니다. 다만 Hibernate에서는 Criteria 같은 것을 이용하면 문자열로 길게 쓰는 쿼리가 많이 나오지는 않을 것으로 예상합니다. 그리고 myBatis(iBatis 3.0)의 Annotation으로 지정하는 쿼리 문자열에서도 똑같이 참조할  수 있습니다. static final String으로 선언된 문자열 상수만 쓰는 것이기 때문에 Groovy의 성능문제도 걱정할 필요가 없습니다.

 

 단점은 별도의 Eclipse plugin을 설치해야 하기 때문에, 이미 많은 수의 Plugin을 설치해서 Eclipse가 무겁다고 느껴지는 개발환경에서는 다소 부담이 될지 모른다는 점입니다. 그리고 거의 java와 같은 문법을 지원하기는하지만, SQL 때문에 Groovy라는 새로운 언어를 도입하는 것이 적합하지 않다고 느끼시는 분들도 계실 것입니다. 그런 분들은 언제가 될지는 몰라도 Java에서 따옴표 3개를 지원하는 때까지 기다려야 하겠죠.

 

출처 : http://benelog.egloos.com/2708621




Request Headers:
Host: www.neopets.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://www.neopets.com/hi.phtml
Cookie: np_uniq=2006-09-11; xt6Yr4e33D=29268402315566579497; _tz=300; npuid=e70000000000000000000000000000ly00000000000000000000003e70000000; np_uniq_=2006-09-11; np_randseed=74589-14695679166655
Content-Type: application/x-www-form-urlencoded
Content-Length: 48

Request Body:
username=aerss&password=ce1&destination=


Request Headers는 별의미 없다. 하지만 없으면 값이 제대로 들어가지 않는다.
Body부분에서 값을 제대로 세팅해주자 .
 


split은 정규식 표현

그러므로 .은 임의 문자??
.으로 구별하기위해서는
split("\\.")으로 하면 된다.

글자 수가 많을경우 해당 테이블이 길게 늘어나면서 글이 쭈욱~~ 한줄로 나오는것을 방지
해당 사이즈에 맞게 강제적으로 개행한다..

<table class="orgAppList" style="width: 100%; border-collapse: collapse; word-break:break-all;word-wrap:break-word;" border="1" cellpadding="2" cellspacing="0" rules="all">

+ Recent posts