타 WAS에서 CLOB 함수를 이용하여 처리하는 부분이 있을 때, JBoss에서 사용하려면,  Oracle의 CLOB를 이용하도록 소스 코드의 변경이 필요하다.

그러나, JBoss의 Result Set에서 rs.getCLOB(1) 과 같이 사용하면 ClassCastException이 발생한다. JBoss에서 내부적으로 JDBC 함수들을 Wrapping하여 사용하기 때문인데,
java.lang.ClassCastException: org.jboss.resource.adapter.jdbc.WrappedResultSet

WrappedResultSet의 getUnderlyingResultSet() 함수를 이용하여, 원래의 ResultSet을 가져올 수 있다. 이를 이용하여 코드를 아래 처럼 작성하여야 한다.


ResultSet urs = (org.jboss.resource.adapter.jdbc.WrappedResultSet) rsClob).getUnderlyingResultSet();

CLOB clob = ((oracle.jdbc.OracleResultSet)urs).getCLOB(1);


컴파일을 위해서는 $SERVER_HOME/lib/jboss-common-jdbc-wrapper.jar 파일이 필요하다.

|
JBoss에서 JDBC DataSource 설정시에 <jndi-name>DataSourceName</jndi-name>에 이름을 지정하고 이를 application에서 JNDI를 통해서 참조하게 되는데, WebLogic의 경우에는 작성된 DataSourceName 으로 바로 참조할 수 있지만, JBoss의 경우엔 java:DataSourceName와 같이 앞에 java: 를 붙여야 참조할 수 있다.

WebLogic과 같이 java: 없이 참조하려면 JBoss의 데이터 소스를 지정하는 *-ds.xml 파일의 설정중에 use-java-context를 false로 설정하면 된다.
    <use-java-context>false</use-java-context>

또 한가지, 흔히 발생하는 오류중의 하나가 JDBC Driver Jar 파일을 WEB-INF\lib 디렉토리에 놓는 경우이다. 이럴 경우에 ClassCastException등 다양한 오류가 발생할 수 있다. JDBC Driver파일은 반드시, $SERVER_HOME/lib  디렉토리에 복사해 놓도록 한다.


|
JDK 1.4에서 컴파일된 어플리케이션을 JDK 1.5에서 사용할 때 종종 JSP 컴파일 오류가 발생하는 경우가 있다. 아래와 같은 generic type에 대한 오류 메시지가 출력된다.

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 1 in the generated java file
The type Collection is not generic; it cannot be parameterized with arguments <? extends E>

Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:316)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:121)
    com.gauce.filter.GauceFilter.doFilter(Unknown Source)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


이럴 경우에는
$SERVER_NAME/deploy/jboss-web.deployer/conf/web.xml
파일에 아래 컴파일러 소스, 컴파일러 타겟 버전을 지정하여 해결할 수 있다.
물론 가장 좋은 방법은 개발환경을 1.5로 모두 변경하여 JDK 1.5에서 모두 컴파일 하는 것이다.

<init-param>
 <param-name>compilerTargetVM</param-name>
 <param-value>1.5</param-value>
 </init-param>
 <init-param>
 <param-name>compilerSourceVM</param-name>
 <param-value>1.4</param-value>
 </init-param>


|
APP-INF/lib 디렉토리 아래 jar 파일을 로딩하는 것은 표준 Spec이 아닌 WebLogic의 고유 설정이라 이를 Loading 하기 위해서는 jboss-app.xml 파일에 설정을 추가하여야 한다.
만약, APP-INF/classes 디렉토리의 class 파일들을 읽어들이기 위한 설정이 없다. 하위 디렉토리의 파일들을 .jar 로 묶어 APP-INF/lib 디렉토리 아래에 복사하면 된다.

ABC.ear/META-INF/jboss-app.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE jboss-app
PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd"
>
<jboss-app>

<library-directory>APP-INF/lib</library-directory>

</jboss-app>



|
XSLT를 이용하여 WebLogic EJB Deployment Descriptor의 자동 변환이 가능하다.
아래와 ANT를 이용하여 자동으로 변환하도록 설정할 수 있다.
XSLT를 이용하여 변환한 파일을 jar파일의 /META-INF/jboss.xml파일로 추가하여 deploy하면 된다.

build.xml파일
<project name="JBoss" default="webdocs" basedir="./">
    <target name="webdocs">
    <xslt basedir="in" destdir="out"
            includes="weblogic-ejb-jar.xml"
            extension=".xmls"
            style="xslt/jboss.xslt"/>
        <move file="out/weblogic-ejb-jar.xmls" tofile="out/jboss.xml"/>
        <copy file="out/jboss.xml" tofile="in/jboss.xml"/>
</target>
</project>

jboss.xslt 파일
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" doctype-public="-//JBoss//DTD JBOSS 4.0//EN"  doctype-system="http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"/>
<xsl:template match="/weblogic-ejb-jar"><jboss>
    <enterprise-beans>

<xsl:apply-templates select="weblogic-enterprise-bean"/></enterprise-beans>
</jboss>
</xsl:template>

<xsl:template match="weblogic-enterprise-bean">
<xsl:if test="entity-descriptor">
<entity><xsl:copy-of select="ejb-name"/><xsl:copy-of select="jndi-name"/><xsl:copy-of select="local-jndi-name"/></entity></xsl:if>
<xsl:if test="stateful-session-descriptor">
<session><xsl:copy-of select="ejb-name"/><xsl:copy-of select="jndi-name"/><xsl:copy-of select="local-jndi-name"/></session></xsl:if>
<xsl:if test="stateless-session-descriptor">
<session><xsl:copy-of select="ejb-name"/><xsl:copy-of select="jndi-name"/><xsl:copy-of select="local-jndi-name"/></session></xsl:if></xsl:template>

</xsl:stylesheet>


|

놀새~'s Blog is powered by Daum & tistory