2014년 5월 21일 수요일

JBoss EAP 6.0 (jBoss Application Server 7.0)에서 오라클 DataSource 설정하기


** 참고: https://community.jboss.org/thread/169104

1. 오라클 JDBC 드라이버(ojdbc6.jar) 다운로드
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

2. jBoss Oracle JDBC 모듈 추가
ojdbc6.jar 파일을 ${JBOSS_HOME}/modules/com/oracle/ojdbc6/main 디렉토리에 복사
위 디렉토리에 module.xml 파일을 생성하고 아래 내용으로 저장

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle.ojdbc6">
    <resources>
        <resource-root path="ojdbc6.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api" />
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>



3. DataSource 설정
${JBOSS_HOME}/standalone/configuration/standalone.xml에 DataSource 정보 추가
            <datasources>
                ...
                <datasource jndi-name="java:/TestDS" pool-name="TestDS" enabled="true">
                    <connection-url>jdbc:oracle:thin:@192.168.0.1:ORCL</connection-url>
                    <driver>oracle</driver>
                    <security>
                        <user-name>scott</user-name>
                        <password>tiger</password>
                    </security>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                </datasource>
                <drivers>
                    ...
                    <driver name="oracle" module="com.oracle.ojdbc6">
                        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>

Define multiple JBoss 7 instance using Eclipse Juno


참조 : https://community.jboss.org/thread/221012

* Instance 파일 복사
${JBOSS_HOME}/standalone 디렉토리를 ${JBOSS_HOME}/foo 로 복사

* ${JBOSS_HOME}/foo/configuration/standalone.xml 수정
before
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
after
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:10000}">

* Eclipse server runtime 추가
Window > Preferences > Server > Runtime Environments > Add
Create a runtime environment "JBoss 7.1 Runtime foo"
Configuration file: ..\..\foo\configuration\standalone.xml

* 새 서버 생성
Server view 에서 New / Server
JBoss Community / JBoss AS 7.1 추가

* Server 정보 수정
Server view 에서 위에서 생성된 서버 double click
Server Ports 에서 Detect from Local Runtime 체크 해제하고 Port offset을 10000으로 설정
Deployment 탭으로 이동해서 아래와 같이 수정
- "Use a custom deploy folder" check
- "standalone/deployments" -> "foo/deployments"
- "standalone/tmp" by "foo/tmp"

* Open launch configuration 수정
Overview 탭으로 이동
Always update arguments related to the runtime : uncheck
- Program arguments 수정
/*******************************************************************************
-mp "C:/tools/jboss/jboss-as-7.1.1.Final/modules" -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -b 0.0.0.0 --server-config=..\..\foo\configuration\standalone.xml
*******************************************************************************/
- VM arguments 수정
/*******************************************************************************
-server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true "-Dorg.jboss.boot.log.file=C:/tools/jboss/jboss-as-7.1.1.Final/foo/log/boot.log" "-Dlogging.configuration=file:/C:/tools/jboss/jboss-as-7.1.1.Final/foo/configuration/logging.properties" "-Djboss.home.dir=C:/tools/jboss/jboss-as-7.1.1.Final" "-Djboss.server.base.dir=C:\tools\jboss\jboss-as-7.1.1.Final\foo"
*******************************************************************************/
수정할 항목: org.jboss.boot.log.file / logging.configuration / jboss.server.base.dir


* 서버 구동 및 확인
Servers view에서 서버를 (재)시작하고 http://localhost:18080 접속 확인

이름 구분자로 String format하기

Apache commons lang의 StrSubstitutor 클래스를 이용한다.
(commons-lang 2.2 부터 지원)

Map valuesMap = new HashMap();
valuesMap.put("animal", "quick brown fox");
valuesMap.put("target", "lazy dog");
String templateString = "The ${animal} jumped over the ${target}.";
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);

결과(resolvedString) : The quick brown fox jumped over the lazy dog.


http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/index.html?org/apache/commons/lang/StringUtils.html

2014년 5월 16일 금요일

MyBatis(iBatis)에서 파라미터에 Null 값이 있을 경우 에러 처리

MyBatis(iBatis)에서 파라미터에 Null 값이 있을 경우 에러가 발생한다.
아래 2가지 방식으로 설정 가능하다.

1. 전체 설정
jdbcTypeForNull의 기본값은 OTHER 이다.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"      
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
<configuration>
<settings>
        ...
        <setting name="jdbcTypeForNull" value="VARCHAR" />
     </settings>
    
<environments>
...
</environments>
<mappers>
<mapper resource="com/..."/>
...
</mappers>
</configuration>

2. 파라미터별 처리(jdbcType를 지정)
Null 값이 입력될 수 있는 부분에 아래와 같이 옵션을 추가한다.

#{id, jdbcType=VARCHAR}


MyBatis(iBatis)에서 Underscore 형식의 필드명을 camel case로 변경하기

MyBatis(iBatis) 설정을 아래와 같이 변경

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"      
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
<configuration>
<settings>
        ...
        <setting name="mapUnderscoreToCamelCase" value="true" />
     </settings>
    
<environments>
...
</environments>
<mappers>
<mapper resource="com/..."/>
...
</mappers>
</configuration>


2014년 4월 22일 화요일

Java web service framework 비교



Support Contract 비고
Apache AXIS2
first, last 가장 많이 사용(기준?)
Spring framework 적용가능
Apache CXF JAX-WS
JAX-RS
SAAJ
Web Services Metadata for the Java Platform
first, last 가장 널리 사용되고 있는 추세
(AXIS2에서 CXF로 넘어오는 경우가 많음)
AXIS2 보다 사용하기 편리
웹서비스 관련 표준들을 준수
(WSDL 2.0은 아직 지원하지 않음)
최소한의 오버해드로 웹서비스 관련 프레임웍 중 성능이 가장 뛰어남(?)
Spring framework 적용가능
전자정부 표준 프레임워크에서 사용
Jersey JAX-RS ?
Spring-WS JAX-RS first JAX-WS 표준을 완벽히 지원하지 않음
JAX-WS 같은 Spring annotation 지원
개발자가 작성해야할 코드가 가장 작음
RESTEasy JAX-RS
JAXB
? JBoss 프로젝트
Rich set of providers for: XML, JSON, YAML, Fastinfoset, Multipart, XOP, Atom, etc.
JAXB marshalling into XML, JSON, Jackson, Fastinfoset, and Atom
as well as wrappers for maps, arrays, lists, and sets of JAXB Objects.
Gzip content-encoding 지원
Restlet JAX-RS ? 경량 REST 프레임워크
Xstream, Jackson을 이용한 XML, JSON marshalling, unmarshalling 지원
FreeMarker, Velocity 통합가능
대용량 멀티파트 데이터 처리를 위해 Apache FileUpload와 통합가능
Spring @MVC
N/A Spring MVC를 이용해서 RESTful 서비스를 구현
https://spring.io/guides/gs/rest-service/


* JAX-WS : Java API for XML-Based Web Services (JAX-WS) 2.0 – JSR-224
* JAX-RS : The Java API for RESTful Web Services – JSR-311
* SAAJ : SOAP with Attachments API for Java (SAAJ) – JSR-67
* JAXB : Java Architecture for XML Binding