JBoss - 해당되는 글 10건
WebLogic의 경우 weblogic.xml에 virtual-directory-mapping을 지정하여 외부 경로의 Content를 사용할 수 있다. JBoss에서 External(Virtual) Directory를 지정할 수 있는 기능이 있지만, JBoss에서는 HTML, Image등의Static Content만 사용이 가능하다.

$SERVER_NAME/deploy/jboss-web.deployer/server.xml

     <Host name="localhost" ...>
           <!-- ADD static DIRECTORY -->
           <Context path="/externaldir" appBase=""
                   docBase="/home/tester/externaldir"
                   debug="99" reloadable="true">
           </Context>
       ...
      </Host>

JSP파일과 같은 파일을 외부 경로의 파일을 사용하려면 symbolic link를 이용하여 설정이 가능하다. Symbolic Link에 대해서는 기본적으로 인식하지 않도록 설정되어 있어, 다음과 같이 이를 인식할 수 있도록 context.xml파일에 allowLinking을 true로 설정하여야 한다.

$SERVER_NAME/deploy/jboss-web.deployer/context.xml

<Context cookies="true" crossContext="true" allowLinking="true">

|
타 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>


|

JBoss Seam의 특징


이미지 출처: http://static.raibledesigns.com/repository/images/seam_logo_blue.png

하는 일

  • EJB3와 JSF를 연결
    • JEE5의 주요 표준
      • EJB 3.0 - JSR 220
      • JavaServer Faces - JSR 127
  • EJB3에 Sean Annotation으로 JSF에서 사용
  • POJO를 Seam 컴포넌트로
  • RESTful처리
  • JSF에서 사용할 수 있는 EL(Expression Language) 제공

POJO 기반

  • Plain Old Java Object


    이미지 출처: http://www.rippleinteractive.com/blog/images/typed_a_.png

Web Beans(JSR-299) 표준화

주요 특징

  • ORM을 이해하는 웹 Framework
    • Cache
    • Database validator
  • Stateful 웹 어플리케이션
    • 설계부터
    • HTTP 세션을 직접 Handling안해도 되도록
  • Web 2.0지원
    • AJAX 기술을 제공
    • JSF의 AJAX 컴포넌트 포함
  • Dependency Bijection을 이용한 POJO 서비스
    • POJO를 Seam 서비스로
    • 인터페이스 / Abstract 클래스가 필요없음
    • 주석을 사용하면 Dependency 관리해줌
  • Configuration by Exception
    • Framework의 설계 원칙
    • Annotation 코딩량을 최소화
  • XML 남용을 피함
    • 꼭 필요한 부분에만 사용
  • 테스트를 위한 설계
    • POJO 기반이라 테스팅 Framework에서 사용하기 편리
    • new로 생성하면 됨
  • 개발툴 지원
    • Eclipse 개발툴 지원
      • JBoss Tool
      • JBoss Developer Studio
  • No Vendor Lock-in
    • 어떤 WAS에서도 동작 가능

Seam의 부가 컴포넌트는?

  • AJAX 컴포넌트
  • Hibernate Search를 이용한 전문 검색(Full Text Search)
  • Google Web Tookit
  • Web Services
  • JBoss Rules(Drools)
  • JBoss jBPM
  • iText PDF 생성 컴포넌트
만득이네
|

 

JBoss Seam

JBoss Seam의 주요 특징


이미지 출처: http://www.seamframework.org/themes/sfwkorg/img/seam_icon_large.png

1. 프로그램 다운로드

  • JBoss AS 다운로드
    • http://www.jboss.org/


      이미지 출처: http://www.jboss.org/theme/images/spotlights/spotlight_as5_50k.jpg

2. 설치

  • JBoss Seam 2.2.1 GA
    • jboss-seam-2.1.1.GA.zip 파일 압축 풀기
  • JBoss Application Server 4.2.3 GA
    • jboss-4.2.3.GA.zip 파일 압축 풀기
  • JBoss Developer Studio 2.0 CR2
    • java -jar jbdevstudio-xxx-2.0.0.CR2-xxxxxx.jar
    • 설치 화면에서 디렉토리 지정하여 설치

3. 예제 컴파일

4. Seam Gen

  • 데이터베이스 테이블을 CRUD Seam 어플리케이션으로 생성

5. 예제 실행

seamframework 사용 사이트


이미지 출처: http://www.seamframework.org/themes/sfwkorg/img/runningon_seamlogo_beige.gif

  • ... best Lego Builder in the world.


    이미지 출처: http://nuncscio.com/wp-content/uploads/2008/01/lego_logo-710596.png

참고자료

  • Seam Books
    • Practical JBoss Seam Projects, ...


      이미지 출처: http://i20.tinypic.com/314c6q0.jpg

    • Seam In Action: Covers Seam 2.0


      이미지 출처: http://www.a1bazaar.in/Books/Management/Seam-In-Action_-Covers-Seam-20/admin/productimages/19643/9788177228861_medium.jpg

    • Seam Framework: Experience the Evolution of Java EE (2nd Edition)


      이미지 출처: http://img.tesco.com/pi/Books/L/93/9780137129393.jpg

    • Beginning Jsf 2 Apis and Jboss Seam


      이미지 출처: http://ec2.images-amazon.com/images/I/51q-qazhagL._SL500_AA240_.jpg

    • Practical JBoss Seam Projects, ...


      이미지 출처: http://i20.tinypic.com/314c6q0.jpg

    • Beginning JBoss Seam: From Novice to ...


      이미지 출처: http://202.125.44.112/~linbaioz/img/2007/06/1590597923.jpg

    • JBoss in Action: Configuring the ...


      이미지 출처: http://pixhost.ws/avaxhome/de/d5/000ad5de_medium.jpeg

    • JBoss(R) Seam: Simplicity and Power ...


      이미지 출처: http://vig-fp.pearsoned.co.uk/bigcovers/0131347969.jpg

만득이네
|
하나의 머신에서 여러 개의 JBoss 인스턴스를 구성하려면 Service Binding Manager를 사용하여 별도로 포트가 설정된 XML파일을 이용하여 설정할 수 있다.

첨부한 port-bindings.xml 설정파일을 $JBOSS_HOME/conf/port-bindings.xml 디렉토리에 복사하여 놓고,
$SERVER_HOME/conf/jboss-service.xml 파일의 설정 중  ServiceBindingManager  부분에 아래와 같이 설정하면 된다.  기본적으로 아래 설정은 주석으로 처리되어 있으니, 주석을 제거하고 사용하여야 한다.

첨부한 port-bindings.xml 파일에는 ports-01 부터 ports-09 까지 9개의 포트가 구성되어 있습니다.

<mbean code="org.jboss.services.binding.ServiceBindingManager"

     name="jboss.system:service=ServiceBindingManager">

     <attribute name="ServerName">ports-01</attribute>

     <attribute name="StoreURL">${jboss.home.url}/conf/port-bindings.xml</attribute>

     <attribute name="StoreFactoryClassName">

       org.jboss.services.binding.XMLServicesStoreFactory

     </attribute>

   </mbean>

ports-01부터 ports-09까지 각각의 포트가 리슨하는 주요 포트는 아래 표를 참고하십시오.
 

 

AJP Port

HTTP Port

ports-01

8109

8180

ports-02

8209

8280

ports-03

8309

8380

ports-04

8409

8480

ports-05

8509

8580

ports-06

8609

8680

ports-07

8709

8780

ports-08

8809

8880

ports-09

8909

8980

 

|
JBoss ESB에서 작성된 .esb 서비스들은 jUDDI를 이용하여 Registry에 등록되게 됩니다.
ESB 서버상의 UDDI Repository의 내용을 보려면 UDDI Browser라는 Swing Application을 사용하면 됩니다.

http://www.uddibrowser.org/
에서 다운로드 받아 압축을 풀고 실행하면 됩니다.

Windows환경에선 ub.bat 파일을 실행하면 되고, Linux환경에서는 ant를 실행하면 됩니다(build.xml파일이 제공된다).

JBoss ESB 서버에 접속하면 아래와 같은 에러가 발생합니다.
     [java] Caught exception: null
     [java] java.lang.NullPointerException
     [java]     at org.uddibrowser.uddi.UDDIWrapper.findBusiness(UDDIWrapper.java:488)
     [java]     at org.uddibrowser.RegistryActionController.processRead(RegistryActionController.java:500)
     [java]     at org.uddibrowser.RegistryActionController.asyncWork(RegistryActionController.java:471)
     [java]     at org.uddibrowser.RegistryActionController.access$000(RegistryActionController.java:76)
     [java]     at org.uddibrowser.RegistryActionController$1.construct(RegistryActionController.java:355)
     [java]     at org.uddibrowser.ui.SwingWorker$2.run(SwingWorker.java:137)
     [java]     at java.lang.Thread.run(Thread.java:595)

문제는 UDDI Browser에서 사용하는 UDDI4J의 버전이 서버와 맞지 않아 발생하는 것이며,
http://uddi4j.sourceforge.net/
위의 UDDI4J 프로젝트 사이트에서 최신 버전을 다운로드하여 ub-0.2-bin/lib/uddi4j.jar 파일을 업데이트하면 UDDI Browser를 이용하여 JBoss ESB의 서비스를 검색할 수 있습니다.



|

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