넷빈즈에서 톰캣에 곧바로 디플로이 할 수 있는 방법은 요기에 : 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
이제 넷빈즈에서 그루비, 스칼라로 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