앞글에서 작성했던 iBATIS 응용 프로그램을 JBoss 4.2.2에서 실행되는 EJB 프로그램과 연동하여 보려고 합니다. 앞글에서 작성했던 iBATIS 응용 프로그램의 내용은, 사원이름을 키워드로 EMP 테이블에서 검색하여 그 사원의 사번을 리턴하여 출력하는 것이었습니다. 다음과 같은 순서에 따라 작업을 해 보겠습니다.
1. iBATIS 라이브러리를 Java EE 서버(JBoss)에 복사합니다. 다음 그림 참조하세요
2. Eclipse 에서 EJB Module을 하나 생성합니다.
3. 위의 그림에서 보이는 ejbModule 이란 노드의 아래에 iBATIS의 모든 설정파일(*.xml, *.properties)을 복사합니다. iBATIS 의 모든 설정파일들은 classpath 안에 위치하도록 되어있기 때문입니다.
4. EJB 구성 파일 및 iBATIS 응용 클래스들은 편의상 모두 sample 이란 패키지 안에 두겠습니다.

5. 위의 작업을 할 때 iBATIS응용 클래스들은 모두 복사해 와서 sample패키지 안에 복사해 넣으면 되고 이때 자동으로 소스에 정의된 패키지 선언문이 sample 으로 변경됩니다.
6. 맵파일인 EMP.xml, Person.xml 파일 안에는 아직도 패키지 경로가 sample으로 변경되지 않았기 때문에 에디터에서 열고 수동으로 변경해 주어야 합니다.
7. EJB모듈을 구성하는 원격 인터페이스 파일을 내용을 다음과 같이 작성합니다.
package sample;
import javax.ejb.Remote;
@Remote
public interface Sample {
public String getMsg();
public int getEmpnoByEname(String ename);
}
8. EJB 모듈을 구성하는 구현클래스(SampleBean.java)는 다음과 같이 작성합니다.
package sample;
import javax.ejb.Stateless;
import sample.MyAppSqlConfig;
import com.ibatis.sqlmap.client.SqlMapClient;
@Stateless
public class SampleBean implements Sample {
@Override
public String getMsg() {
return "Sample EJB";
}
@Override
public int getEmpnoByEname(String ename) {
SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
int empno = 0;
try{
Integer it = (Integer)sqlMap.queryForObject ("selectEmpnoByEname", ename);
empno = it.intValue();
}catch(Exception e){
System.out.println("에러:--> "+e);
}
return empno;
}
}
위의 코드에 보이는 "selectEmpnoByEname" 은 EMP.xml 안에 정의된 SQL 문장의 ID이며 다음과 같이 작성되어 있습니다.
SELECT
EMPNO as value
FROM EMP
WHERE ENAME=#hello#
</select>
9. EJB 모듈에 접속하는 웹모듈을 작성하고 index.jsp 페이지를 하나 생성하여 다음과 같이 작성합니다. 웹 클라이언트를 Eclipse 에서 작성하는 방법은 앞글을 참고하세요.
<%@ page import="javax.naming.*" %>
<%@ page import="sample.*" %>
<html>
<head>
<title>Eclipse 3.3, JBoss 4.2.2, EJB 3.0, iBATIS 2.3</title>
</head>
<body><p><center>
<%
Context ctx = new InitialContext();
Sample s = (Sample) ctx.lookup("SampleBean/remote");
int empno = s.getEmpnoByEname("KING");
out.println("검색된 KING의 사번: "+empno);
%>
</center></body></html>
10. EJB 모듈과 WEB 모듈을 모두 Deploy 한 후에 index.jsp를 JBoss에서 실행하면 다음과 같은 결과를 확인할 수 있습니다.