| 목차 >> Core  +- Glue Service ----+- dependency ----+- applicationContext.xml ----+- GlueBizController  | 
Glue Service는 독립적인 Business의 한 기능을 수행하는 실행 단위입니다. 
그림과 같이 Glue Service는 Glue Activity Diagram과 일치하며, XML 파일은 Glue Activity Diagram 을 통해 생성할 수 있습니다( ex> hello.glue_uml_ad -> hello-service.xml ). 
Glue Service의 수정이 필요할 때는, XML 스키마(GlueService.xsd)를 준수하기 위해 Glue Activity Diagram을 수정해서 XML파일을 재생성 하도록 합니다. 
| 그림 : Glue Service (xml & diagram) | 
| 그림 : Glue Service (db & diagram) | 
Glue Service는 Activity와 Activity 간의 흐름으로 구성되어 있습니다. Glue Service의 크기는 설계자&개발자의 성향에 따라 다를 수 있습니다.
Glue Service를 실행시 다음 dependency 와 applicationContext.xml이 필요합니다. Glue Core 모듈의 프로젝트 정보에서 의존물들을 확인할 수 있습니다.
<dependency>
    <groupId>com.poscoict</groupId>
    <artifactId>glue-core</artifactId>
    <version>${glue.version}</version>
</dependency>
Glue Service 실행시 applicationContext.xml이 필요하며, applicationContext.xml에는 serviceManager(bean id 고정임)가 포함되어 있어야 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <bean id="serviceManager" class="com.poscoict.glueframework.biz.control.GlueServiceManagerImpl">
        <property name="cacheManager" ref="cacheManager" />
        <property name="serviceLoader" ref="serviceLoader" />
    </bean>
    <bean id="cacheManager" class=. . ./>
    <bean id="serviceLoader" class=". . ."/>
</beans>
GlueServiceLoader 는 GlueService를 file로 부터 생성합니다.
GlueServiceManagerImpl 이 참조하는 serviceLoader는 다음과 같은 속성을 갖을 수 있습니다 (GlueAPI). 
<bean id="serviceLoader" class="com.poscoict.glueframework.biz.control.GlueServiceLoader"/>
<bean id="serviceLoader" class="com.poscoict.glueframework.biz.control.GlueServiceLoader">
    <property name="rootPath" ref="path/biz"/>
</bean>
<bean id="serviceLoader" class="com.poscoict.glueframework.biz.control.GlueServiceLoader">
    <property name="extraServiceFiles">
        <list>
            <value>path/biz1-service.xml</value>
            <value>path/biz2-service.xml</value>
        </list>
   </property>
 </bean>
GlueServiceDBLoader 는 GlueService를 DB로 부터 생성합니다.
DB 생성 Script는 glue-core 모듈안에 포함되어 있습니다. ( com.poscoict.glueframework.biz.control )
GlueServiceManagerImpl 이 참조하는 serviceLoader는 다음과 같은 속성을 갖을 수 있습니다 (GlueAPI). 
<bean id="serviceLoader" class="com.poscoict.glueframework.biz.control.GlueServiceDBLoader">
    <property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" ... />
내부적으로 다음 SQL이 사용됩니다.
select SERVICE_NAME from SERVICE_INFO
select INITIAL_ACTIVITY from SERVICE_INFO where SERVICE_NAME=?
select TX_NAME, TX_VAL from SERVICE_TX_MAPPING where SERVICE_NAME=?
select ACTIVITY_NAME, ACTIVITY_CLASS from SERVICE_ACTIVITY_INFO where SERVICE_NAME=?
select TRANSITION_NAME, TRANSITION_VAL from SERVICE_ACTIVITY_FLOW where SERVICE_NAME=? and ACTIVITY_NAME=?
select PROPERTY_NAME, PROPERTY_VAL from SERVICE_ACTIVITY_PROPERTY where SERVICE_NAME=? and ACTIVITY_NAME=?
queryManager : 참조할 GlueQueryManager Bean
queryIdMap : service loading sql 정보 map
<bean id="serviceLoader" class="com.poscoict.glueframework.biz.control.GlueServiceDBLoader">
    <property name="dataSource" ref="dataSource"/>
    <property name="queryManager" ref="queryManager"/>
    <property name="queryIdMap">
        <map>
            <entry key="serviceList" value="meta.service.list.select" />
            <entry key="serviceInfo" value="meta.service.select" />
            <entry key="transactionManagerInfo" value="meta.tx.select" />
            <entry key="activityList" value="meta.activity.select" />
            <entry key="transitionInfo" value="meta.transition.select" />
            <entry key="propertyInfo" value="meta.property.select" />
        </map>
    </property>
</bean>
<bean id="dataSource" ... />
<bean id="queryManager" ... />
제공되는 DB script를 수정해서 사용하는 경우 다음과 같이 query file을 작성할 수 있습니다. queryManager와 queryIdMap property를 사용해서 default SQL를 수정할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<queryMap desc="" xmlns="http://www.poscoict.com/glueframework/query">
    <query id="meta.service.list.select" desc="" resultType="" isNamed="false"><![CDATA[
select MVC_SERVICE_NM as "SERVICE_NAME" from TB_M00_GL_SERVICE_INFO
    ]]></query>
    <query id="meta.service.select" desc="" resultType="" isNamed="false"><![CDATA[
select ACTIVITY_NM as "INITIAL_ACTIVITY"
from TB_M00_GL_SERVICE_INFO
where MVC_SERVICE_NM=?
    ]]></query>
    <query id="meta.tx.select" desc="" resultType="" isNamed="false"><![CDATA[
select ATTRIBUTE1 as "TX_NAME", ATTRIBUTE2 as "TX_VAL"
from TB_M00_GL_TX_MAPPING
where MVC_SERVICE_NM=?
    ]]></query>
    <query id="meta.activity.select" desc="" resultType="" isNamed="false"><![CDATA[
select ACTIVITY_NM as "ACTIVITY_NAME", CLASS_NM as "ACTIVITY_CLASS"
from TB_M00_GL_ACTIVITY_INFO
where MVC_SERVICE_NM=?
    ]]></query>
    <query id="meta.trasition.select" desc="" resultType="" isNamed="false"><![CDATA[
select ATTRIBUTE1 as "TRANSITION_NAME", ATTRIBUTE2 as "TRANSITION_VAL"
from TB_M00_GL_ACTIVITY_FLOW
where MVC_SERVICE_NM=?
 and ACTIVITY_NM=?
    ]]></query>
    <query id="meta.property.select" desc="" resultType="" isNamed="false"><![CDATA[
select ATTRIBUTE1 as "PROPERTY_NAME", ATTRIBUTE2 as "PROPERTY_VAL"
from TB_M00_GL_ACTIVITY_PROPERTY
where MVC_SERVICE_NM=?
 and ACTIVITY_NM=?
    ]]></query>
</queryMap>
Glue Service를 실행하기 위해서는 com.poscoict.glueframework.biz.control.GlueBizController를 사용합니다. (Quick Start의 Test.java 참고)
GlueContext ctx = . . . ctx.put( GlueBizControlConstants.SERVICE_NAME, "hello-service" ); . . . GlueBizController controller = GlueBizProvider.getController(); controller.doAction( ctx );
GlueBizController 는 다음과 같이 2가지 Method를 제공합니다. (GlueAPI)
제공되는 Method를 를 통해 Glue Service를 실행시킬 수 있으며, Glue Service 실행시 필요한 Data는 GlueContext 를 통해 전달합니다. Glue Service가 실행되기 위해서는 GlueContext에는 항상 ServiceName이 포함되어 있어야 합니다. 그렇지 않으면 다음과 같은 형태의 에러메세지를 확인할 수 있습니다.
Exception in thread "main" com.poscoict.glueframework.GlueException: ServiceName doesn't exist
    at com.poscoict.glueframework.biz.control.GlueBizControllerImpl.doAction(GlueBizControllerImpl.java:227)
    at test.Test.main(Test.java:18)