2011년 5월 24일 화요일

XINS(XML Interface for Network Services) - Part 1

REST, SOAP, XML-RPC, JSON, JSON-RPC와 같은 HTTP Protocol들을 지원하는 Open-source Web Service framework 이다.
XINS는 xins-project.xml 파일만 작성하면 자동으로 Client API, Server Code template, WSDL, JavaDoc등을 생성해 주고 개발자는 Business Logic만 추가해주면 된다.


Download Site
http://xins.sourceforge.net/

다운로드된 XINS 라이브러리를 설치 하고 설치위치를 환경변수에 XINS_HOME을 추가해주고 PATH에 $XINS_HOME/bin or %XINS_HOME%\bin를 추가해준다.

XINS 입문
Step1
"MyProject"이름의 Directory를 만든다.

Step2
"MyProject" Directory에 "xins-project.xml" 파일을 아래와 같이 작성한다.
<?xml version="1.0"?>
<!DOCTYPE project PUBLIC
"-//XINS//DTD XINS Project 1.4//EN"
"http://www.xins.org/dtd/xins-project_1_4.dtd">

<project name="MyProject" domain="com.mycompany">
</project>



Step3
"MyProject" 디렉토리에서 "xins create-api" 명령어를 실행한다. 실행 중에 구성 관련 질문이 출력되면 아래와 같이 입력 한다.
QuestionAnswer
API name?myapi
API description?My first XINS API
Want an implementation?y (for yes)
Want to define environments?y (for yes)
Function name?SayHello
Function description?Greets the caller



실행이 완료되면 MyProject 디렉토리 밑으로 apis, build 디렉토리가 생성되며 xins-project.xml 파일에도 api tag가 추가된다.

Step4
create-api 명령어로 자동생성된 apis/myapi/spec/SayHello.fnc 파일을 열어 아래와 같이 수정한다.
<?xml version="1.0"?>
<!DOCTYPE function PUBLIC
"-//XINS//DTD Function 1.4//EN"
"http://www.xins.org/dtd/function_1_4.dtd">

<function name="SayHello">
<description>Greets the caller</description>
<input>
<param name="name" required="true">
<description>Name of the person to greet</description>
</param>
</input>
<output>
<param name="greeting" required="true">
<description>Actual greeting for the caller.</description>
</param>
</output>
</function>



Step5
MyProject 디렉토리에서 "xins help"을 실행하면 XINS 명령어 리스트가 출력된다. 리스트는 아래와 같다.
[echo] Generic targets:
[echo] - version             Prints the version of XINS.
[echo] - help                Prints this message.
[echo] - all                 Generates everything.
[echo] - clean               Removes all generated files.
[echo] - specdocs            Generates all specification docs.
[echo] - wars                Generates all WAR files.
[echo] - capis               Generates all CAPI JAR files.
[echo] - javadoc-capis       Generates all CAPI Javadoc.
[echo]
[echo] The following commands assist in authoring specifications:
[echo] - create-api          Generates a new api specification file.
[echo] - create-function     Generates a new function specification file.
[echo] - create-rcd          Generates a new error code specification
[echo]                       file.
[echo] - create-type         Generates a new type specification file.
[echo] - create-example      Generates a new example for a function.
[echo] - create-logdoc       Generates the basic logdoc files for an API.
[echo]
[echo] The following targets are specific for a single API,
[echo] replace <api> with the name of an existing API:
[echo] - run-<api>           Runs the WAR file for the API.
[echo] - war-<api>           Creates the WAR file for the API.
[echo] - specdocs-<api>      Generates all specification docs for the API.
[echo] - javadoc-api-<api>   Generates Javadoc for the server API
[echo]                       implementation.
[echo] - server-<api>        Generates the WAR file, the API Javadoc for
[echo]                       the server side and the specdocs for the API.
[echo] - jar-<api>           Generates and compiles the CAPI classes.
[echo] - javadoc-capi-<api>  Generates the Javadoc for the CAPI classes.
[echo] - client-<api>        Generates the CAPI JAR file and the
[echo]                       corresponding Javadoc.
[echo] - clean-<api>         Cleans everything for the API.
[echo] - rebuild-<api>       Regenerates everything for the API.
[echo] - all-<api>           Generates everything for the API.
[echo] - wsdl-<api>          Generates the WSDL for the API.
[echo] - stub-<api>          Generates the stub for the API.
[echo] - test-<api>          Generates (if needed) and runs the tests.
[echo] - opendoc-<api>       Generates the specifications in Opendoc format for the API.
[echo]
[echo] APIs in this project are:
[echo] "myapi"

Step 6
MyProject 디렉토리에서 "xins all" 명령어를 실행하면 등록한 모든 API을 build 디렉토리 밑으로 Generate 해준다. 만일 여러개의 API가 등록되어 있어 그중 하나의 API만(여기서는 myapi) Generate 할 경우 "xins all-myapi"와 같이 명령어를 실행하면된다.

Step 7
build/specdocs/index.html에서 자동 생성된 API Document을 확인 할 수 있다.


Step8
myapi에 포함된 SayHello Function 정보도 확인 할수 있다.


Step 9
SayHello Function의 input parameter, output parameter을 확인 할 수 있다.


Step 10
상단의 "Test form"에서 API 테스트를 해 볼수 있다.

Step 11
build/javadoc-api/myapi/index.html에서 Server-side code의 JavaDoc 문서를 확인할 수 있다.
Client-side Code의 JavaDoc 문서는 build/javadoc-capi/myapi/index.html에서 확인할 수 있다.


Step 12
Business logic 추가를 위해 apis/myapi/impl/com/mycompany/myapi/api/SayHelloImpl.java의 call(Request) 메서드를 아래와 같이 수정한다.
public Result call(Request request) throws Throwable {
SuccessfulResult result = new SuccessfulResult();
result.setGreeting("Hello " + request.getName() + '.');
return result;
}



Step 13
MyProject 디렉토리 밑에 환경 설정 파일인 xins.properties 파일을 생성하여 아래 내용을 추가한다.
org.xins.server.config.reload=10
org.xins.server.acl=allow 0.0.0.0/0 *
log4j.rootLogger=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4c{1} %p %m%n
log4j.logger.org.xins.server.runtime.tx.3540=OFF



Step 14
xins -Dorg.xins.server.config=xins.properties run-myapi 명령어로 xins에 포함되어 있는 Servlet Container를 실행 시킨다.


만일 일반 WAS(Tomcat, JBoss, Resin 등)을 사용하여 myapi을 서비스를 실행 할경우에는 각 WAS의 JVM 실행 옵션에 아래와 같이 org.xins.server.config 항목을 추가해준다.

예 : Tomcat catalina.bat 파일에 다음 추가
JAVA_OPTS = "-Dorg.xins.server.config=D:/WAS/apache-tomcat-6.0.18/xins.properties"

build/webapps/myapi/myapi.war 파일을 Tomcat의 경우 webapps 밑에 복사해 넣는다.

Step 15
Step 10의 Test form 화면으로 이동하여 API을 테스트 할 수 있다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...