FSP with Java Code
FSP서버에서 Java 클래스 사용하는 예
개요
2. Action 에서 입력 파라미터 접수
3. Action 에서 입력파라미터(Dataset이나 파라미터 변수 값)를 Service 클래스에 전달
4. Service클래스에서 DB에 접속
5. Service 클래스에서 FSP에 등록된 SQL문장 실행
6. Service 클래스에서 Action으로 결과집합을 리턴
7. Action 클래스에서 MiPlatform에 결과를 전송(응답)
Action 클래스
package kodt.temp;
import java.io.DataInputStream;
import kodt.temp.MyBusiness;
import com.sz.business.BusinessRuntimeException;
import com.sz.core.ServiceManagerFactory;
import com.sz.service.sqlmap.SqlExecutor;
import com.sz.service.sqlmap.SqlMapFactoryHelper;
import com.sz.service.sqlmap.SqlRequest;
import com.sz.ui.AbstractAction;
import com.sz.ui.BusinessContext;
import com.tobesoft.platform.data.Dataset;
public class MyAction extends AbstractAction {
public void search(BusinessContext ctx) throws Exception {
System.out.println("액션 실행됨");
MyBusiness biz = (MyBusiness) ServiceManagerFactory.getServiceObject(getBizServiceName());
/* 위와 같은 방법으로 Service 클래스인 MyBusiness 참조를 구하고 인터페이스형으로 캐스팅하여 사용하면 된다 */
Dataset ds_list = biz.searchByCond((Dataset)ctx.getInputObject("ds_list"));
Dataset ds = biz.searchByCond(ds_list);
ctx.addOutput("ds_list", ds); // 클라이언트에 결과 값을 리턴(응답)
System.out.println("마이플랫폼 액션클래스 실행됨");
}
}
Service 클래스
package kodt.temp;
import com.sz.business.AbstractBusinessService;
import com.sz.service.sqlmap.DataSetSqlRequest;
import com.sz.service.sqlmap.SqlExecutor;
import com.sz.service.sqlmap.SqlMapFactoryHelper;
import com.sz.service.sqlmap.SqlRequest;
import com.sz.util.AppDataUtility;
import com.tobesoft.platform.data.Dataset;
/**
* {@link MyBusiness}를 실제 구현한 기본 서비스 제공 클래스.<p>
* MyBusiness 라는 인터페이스를 구현하고 있는데, 서비스 클래스를 사용할 때는 MyBusiness 형으로 캐스팅하여 사용해야 한다. 그리고 Service를 반드시 구현해야 한다. 여기서는 Service 를 구현한 AbstractBusinessService클래스를 상속하고 있다.
*
*/
public class DefaultMyBusiness extends AbstractBusinessService implements MyBusiness {
public Dataset searchByCond(Dataset dsCond) throws Exception {
// 서비스 정의 기본 Connection 사용
SqlExecutor db = SqlMapFactoryHelper.makeSqlExecutor(getConnection() , SqlMapFactoryHelper.DATASET);
// 처리할 sql 가져오기
SqlRequest sql = SqlMapFactoryHelper.makeSqlRequest("info:I130000_M01_TEST");
sql.addParamObject("ds_list", dsCond);
return (Dataset) db.query(sql).getResultObject();
}
}
인터페이스의 내용
package kodt.temp;
import com.tobesoft.platform.data.Dataset;
/**
* 각 서비스가 제공할 기능을 정의한다.
*/
public interface MyBusiness {
public Dataset searchByCond(Dataset dsCond) throws Exception;
}
위의 내용 중에서 "info:I130000_M01_TEST" 는 FSP 콘솔에서 등록한 SQL문장이며 이 문장을 실행한 결과를 Action 클래스에게 리턴하는 내용이다.
FSP콘솔에서 등록한 SQL문장의 내용: SELECT NAT_CD, NAT_NM FROM NAT_INFO WHERE NAT_CD=#NAT_CD#
기본 입력명: ds_list, 기본 출력명: ds_list
FSP 설정파일 WEB-INF/fsp/conf/service.xml 에 위의 Action, Service 를 등록한다.
<attribute name="BizServiceName">MyBiz</attribute>
</service>
<service name="MyBiz" code="kodt.temp.DefaultMyBusiness">
<attribute name="ResourceFactoryServiceName">#DefaultConnectionFactory</attribute>
<depends>DefaultConnectionFactory</depends>
</service>
........................
.........................
<service name="DefaultConnectionFactory"
code="com.sz.service.resource.jdbc.JdbcConnectionFactoryDataSourceService">
<attribute name="DataSourceName">DEV_DB</attribute>
<attribute name="ManagedResource">false</attribute>
<attribute name="JndiFinderServiceName">#DatasourceJndiFinder</attribute>
<attribute name="JournalLevel">0</attribute>
<attribute name="SQLLogServiceName">#DebugLogService</attribute>
<attribute name="SupportGlobalTransaction">true</attribute>
<depends>DatasourceJndiFinder</depends>
<depends>DebugLogService</depends>
</service>
META-INF/context.xml 에서 위의 DEV_DB와 연관된 부분
type="javax.sql.DataSource" driverClassName="com.ibm.db2.jcc.DB2Driver"
url="jdbc:db2://19.240.67.207:67000/costdb"
username="user01" password="user01" maxActive="20" maxIdle="10"
maxWait="-1"
/>
클라이언트(MiPlatform 스크립트)에서 위의 클래스를 호출하여 실행하고 그 결과를 응답 받아서 화면에 출력하는 예
function fn_action_test(){
fsp_clear();
/*------------------------------------------------------
fsp_callService : 서비스 호출 함수
* param1 : 서버에서 호출할 Action의 별명 (DEFAULT : DefaultAction)
* param2 : Action 안에서 호출해야 하는 메소드 명 (DEFAULT : execute)
* param3 : 서버로 전송할 DataSet 서버=로컬
* param4 : 서버로부터 전송 받을 DataSet 로컬=서버
* param5 : 서버로 전송할 기타 Argument 정보 예: key=value key2=value2
* param6 : 서버에서 처리가 완료된 후 Callback 받을 Function 명
* param7 : 처리중입니다. 메시지창 보여줄지 여부
* param8 : 동기처리 여부
-------------------------------------------------------*/
fsp_callService(
"MyAction",
"search",
"ds_list=ds_list",
"ds_list=ds_list",
"",
"fn_AfterSearch",
true,
true,
true
);
}