카테고리 없음2010. 2. 15. 04:10
넷빈즈에서 톰캣에 곧바로 디플로이 할 수 있는 방법은 요기에 : http://groovy.pe.kr/51
이제 넷빈즈에서 그루비, 스칼라로 JDBC에 접근하는 법을 보자.

먼저, 서버와 로컬에 scala 설치 (현재 버전은 2.7.7), groovy 설치 (2.7.0)
서버쪽에서는 /usr/share/tomcat6/lib 에서
[code]
ln -s /usr/share/groovy/lib/groovy-all-1.7.0.jar
ln -s /usr/share/java/scala-library.jar
ln -s /usr/share/java/scala-dbc.jar
ln -s /usr/share/java/mysql.jar
[/code]
따위를 해둔다.


그리고 넷빈즈의, library에서 Add Jar를 해서 scala-library.jar와 scala-compiler.jar, groovy-all-1.7.0 를 추가해준다.

그리고, 문제의 build.xml 은 아래쪽에 실었다. 시행착오 끝에 만들긴 했는데, 나중에 정식 지원되면 허무할듯.

이제는 src/java 자리에 xx.java, xx.scala, xx.groovy 로 서블릿 만들면 모두 잘 컴파일되고, war 만들어지고, 디플로이하면 서버에 올라간다. ^^


그리고, 여전히 속도테스트를 해봤는데, 테스트는 데이터베이스 서버에 접속해서 데이터 긁어오고, 브라우저로 쏴주는 단순한 것. (레코드 50만개중에서 200개를 가져오게 했다)

자바로 만든 서블릿은
Time per request:       1.273 [ms] (mean)
Time per request:       0.318 [ms] (mean, across all concurrent requests)

스칼라로 만든 서블릿은
Time per request:       1.261 [ms] (mean)
Time per request:       0.315 [ms] (mean, across all concurrent requests)

그루비로 만든 서블릿은
Time per request:       1.836 [ms] (mean)
Time per request:       0.459 [ms] (mean, across all concurrent requests)

그루비가 느렸다. 저게 문제가 될정도는 아닌 것같다. 게다가 Groovy++도 나오면.. ㅎㅎ (스칼라는... 자바버전보다 빠르게 나왔는데, 단순 스트레스 테스트였기 때문인.. 아닌지 모르겠다.)
하지만, 아직 나에겐 스칼라 문법은 어색 어색. 그루비가 코딩하기 편했다.

자. 문제의 build.xml

[code]
<target name="taskdef-scala">
    <taskdef resource="scala/tools/ant/antlib.xml"  >
        <classpath>
            <pathelement location="${file.reference.scala-compiler.jar}" />
            <pathelement location="${file.reference.scala-library.jar}" />
        </classpath>
    </taskdef>
</target>


<taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc"
         classpath="c:/Tools/groovy/embeddable/groovy-all-1.7.0.jar"/>


<target name="-init-macrodef-javac" depends="taskdef-scala">
    <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
        <attribute default="${src.dir}" name="srcdir"/>
        <attribute default="${build.classes.dir}" name="destdir"/>
        <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
        <attribute default="${includes}" name="includes"/>
        <attribute default="${excludes}" name="excludes"/>
        <attribute default="${javac.debug}" name="debug"/>
        <attribute default="${empty.dir}" name="gensrcdir"/>
        <element name="customize" optional="true"/>
        <sequential>
            <property location="${build.dir}/empty" name="empty.dir"/>
            <mkdir dir="${empty.dir}"/>

            <groovyc  destdir="@{destdir}" srcdir="@{srcdir}"
                      encoding="utf-8"
                      excludes="@{excludes}"
                      includeantruntime="false"
                      includes="@{includes}"
                      >
                <src>
                    <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                        <include name="*.groovy"/>
                    </dirset>
                </src>
                <classpath>
                    <path path="@{classpath}"/>
                </classpath>
            </groovyc>

            <javac debug="@{debug}" source="${javac.source}" target="${javac.target}"
                   srcdir="@{srcdir}" destdir="@{destdir}"
                   deprecation="${javac.deprecation}"
                   encoding="${source.encoding}" excludes="@{excludes}"
                   includeantruntime="false" includes="@{includes}">
                <src>
                    <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                        <include name="*.java"/>
                    </dirset>
                </src>
                <classpath>
                    <path path="@{classpath}"/>
                </classpath>
                <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
                <compilerarg line="${javac.compilerargs}"/>
                <customize/>
            </javac>

            <scalac srcdir="@{srcdir}"
                    destdir="@{destdir}">
                <include name="**/*.scala"/>
                <classpath>
                    <pathelement location="${file.reference.scala-compiler.jar}" />
                    <pathelement location="${file.reference.scala-library.jar}" />
                    <path path="@{classpath}"/>
                </classpath>
            </scalac>
        </sequential>
    </macrodef>
</target>
[/code]
* 그루비 참고 : http://www.ighani.info/?p=32
Posted by jintopark