nexacro : transaction, xapi

김선미·2022년 12월 28일

transaction

  • transaction : DataSet 의 데이터를 갱신하기 위한 서비스를 호출하고,트랜잭션이 완료되면 콜백 함수를 수행하는 메소드이다.
 Form.transaction( strSvcID, strURL, strInDatasets, strOutDatasets, 
 strArgument, strCallbackFunc [,bAsync [,nDataType [,bCompress]]] ) 
  • strSvcID : 트랜잭션을 구분하기 위한 ID
  • strURL : 트랜잭션을 요청할 서버 페이지 주소
  • strInDatasets : 서버로 보낼 dataset
  • strOutDatasets : 서버에서 보낸 데이터를 받을 dataset
    • 형식 : "FormDataSetID=ServerDatasetID FormDataSetID=ServerDatasetID"
    • 문자열 형태로 입력하며 빈칸으로 구분하여 여러개의 dataset을 입력할 수 있다.
  • strArgument : 서버로 보낼 변수
    • 형식 : "변수ID=변수값"
  • strCallbackFunc [,bAsync [,nDataType [,bCompress]]] : 서버의 처리결과를 받을 함수를 문자열로 지정
    • 대괄호 부분은 옵션으로 생략할 수 있다. 생략시 defalt 값으로 처리된다.
    • bAsync
      • transaction을 비동기(Async) 또는 동기(Sync)로 처리할지 설정
      • true:비동기 / false:동기 / defalt: true
    • nDataType
      • transaction 시 전송되는 데이터 형태를 설정
      • 0: xml / 1: binary (전용 브라우저에서만 쓸 수 있음) / 2:SSV (대용량 통신) / defalt: 0
    • bCompress
      • transaction 시 전송되는 데이터 압축 여부
      • true: 압축/ false:압축하지 않음/ defalt: false

xapi

  • (jsp 파일) xapi 패키지를 import 해야 사용할 수 있다.

  • select_emp.jsp 예제 참고

    • get 방식 (request.getparameter)
    • sql을 작성하고 쿼리를 실행하여 처리 결과를 rs (ResultSet) 객체로 받는다.
    • 조회 결과를 id가 "out_emp"인 dataset을 생성하여 rs를 담는다. out_emp는 화면에서 사용하는 dataset이다.
    • dataset을 PlatformData에 추가한다.
    • PlatformData에 에러 체크할 변수를 추가한다. 이 변수는 화면의 콜백 함수에서 파라미터로 받는다.
    • PlatformData를 클라이언트 화면으로 전송한다.
  • 예제) select_emp.jsp

<%@ page import = "org.apache.commons.logging.*" %>
<%@ page import = "com.nexacro17.xapi.data.*" %>
<%@ page import = "com.nexacro17.xapi.tx.*" %>
<%@ page import = "java.util.*" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.io.*" %>
<%@ page contentType = "text/xml; charset=UTF-8" %>

<%
// PlatformData
PlatformData out_pData = new PlatformData();
String sDept = (request.getParameter("sDept") == null) ? "" : request.getParameter("sDept");
	
int    nErrorCode  = 0;
String strErrorMsg = "START";

try {    
	/******* JDBC Connection *******/
	Connection conn = null;
	Statement  stmt = null;
	ResultSet  rs   = null;
	
	try { 
		Class.forName("org.sqlite.JDBC");
		conn = DriverManager.getConnection("jdbc:sqlite:C:\\Tomcat 8.0\\webapps\\EduProject\\File\\nexacro_edu_db.sqlite");

		stmt = conn.createStatement();
	  
		/******* SQL ************/
		String SQL;
		SQL  = "SELECT EMPL_ID    \n" +
			   "     , FULL_NAME  \n" +
			   "     , DEPT_CD    \n" +
			   "     , POS_CD     \n" +
			   "     , GENDER     \n" +
			   "     , HIRE_DATE  \n" +
			   "     , MARRIED    \n" +
			   "     , SALARY     \n" +
			   "     , MEMO       \n" +
			   "  FROM TB_EMP     \n" +
			   " WHERE 1=1        \n" ;
		
		if(sDept != null && sDept.length() != 0 && !sDept.equals("undefined"))
		{
			SQL += "AND DEPT_CD = '" + sDept + "'";
		}
		SQL += " ORDER BY DEPT_CD, FULL_NAME";
		
		System.out.println(SQL);        

		rs = stmt.executeQuery(SQL);
	  
		DataSet ds = new DataSet("out_emp");
		ds.addColumn("EMPL_ID" 	  ,DataTypes.STRING  ,(short)10 );
		ds.addColumn("FULL_NAME"  ,DataTypes.STRING  ,(short)50 );
		ds.addColumn("DEPT_CD"    ,DataTypes.STRING  ,(short)10 );
		ds.addColumn("POS_CD"     ,DataTypes.STRING  ,(short)10 );
		ds.addColumn("GENDER"     ,DataTypes.STRING  ,(short)10 );
		ds.addColumn("HIRE_DATE"  ,DataTypes.DATE    ,(short)10 );
		ds.addColumn("MARRIED"    ,DataTypes.STRING  ,(short)10 );
		ds.addColumn("SALARY"     ,DataTypes.INT     ,(short)10 );
		ds.addColumn("MEMO"       ,DataTypes.STRING  ,(short)10 );
			
		while(rs.next())
		{
			int row = ds.newRow();
			ds.set(row ,"EMPL_ID"       ,rs.getString("EMPL_ID")  );
			ds.set(row ,"FULL_NAME"     ,rs.getString("FULL_NAME"));
			ds.set(row ,"DEPT_CD"       ,rs.getString("DEPT_CD")  );
			ds.set(row ,"POS_CD"        ,rs.getString("POS_CD")   );
			ds.set(row ,"GENDER"        ,rs.getString("GENDER")   );
			ds.set(row ,"HIRE_DATE"     ,rs.getString("HIRE_DATE"));
			ds.set(row ,"MARRIED"       ,rs.getString("MARRIED")  );
			ds.set(row ,"SALARY"        ,rs.getString("SALARY")   );
			ds.set(row ,"MEMO"          ,rs.getString("MEMO")     );
		}
		  
		// #1 dataset -> PlatformData
		out_pData.addDataSet(ds);

		// #2 dataset -> PlatformData
		//DataSetList dsList = out_pData.getDataSetList();
		//dsList.add(ds);

		nErrorCode  = 0;
		strErrorMsg = "SUCC";
		
	} catch (SQLException e) {
		nErrorCode = -1;
		strErrorMsg = e.getMessage();
	}    
	
	/******** JDBC Close ********/
	if ( stmt != null ) try { stmt.close(); } catch (Exception e) {nErrorCode = -1; strErrorMsg = e.getMessage();}
	if ( conn != null ) try { conn.close(); } catch (Exception e) {nErrorCode = -1; strErrorMsg = e.getMessage();}
			
	} catch (Throwable th) {
		nErrorCode = -1;
		strErrorMsg = th.getMessage();
}

VariableList varList = out_pData.getVariableList();
varList.add("ErrorCode", nErrorCode);
varList.add("ErrorMsg" , strErrorMsg);


/*
Variable varErrCD = new Variable("ErrorCode");
varErrCD.set(nErrorCode);

Variable varErrMSG = new Variable("ErrorMsg");
varErrMSG.set(strErrorMsg);

out_pData.addVariable(varErrCD);
out_pData.addVariable(varErrMSG);
*/

HttpPlatformResponse pRes = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_XML, "utf-8");
pRes.setData(out_pData);

// Send data
pRes.sendData();
%>
profile
백엔드 개발 공부

0개의 댓글