목차 >> Core 
+- Glue Service  
+- GlueContext  
----+- EventType  
----+- ContentType

5장 Core

GlueContext

GlueContext는 Map구조의 내부저장소 interface입니다.
GlueContext는 임시 데이타 저장소로 사용되며, Glue Service 단위로 Control layer에서 생성됩니다.

그림 : GlueContext
GlueContext

Glue Service 실행시 Event Data의 유형은 웹, 포틀릿, 그외의 것으로 구분하고 있습니다. 그에 따른 GlueContext 는 다음을 사용합니다.

  1. com.poscoict.glueframework.context.GlueDefaultContext

    웹(서블릿과 포틀릿)을 제외한 Data를 담는 저장소로 Root Map와 Message List를 갖습니다.

    그림 : GlueDefaultContext
    GlueDefaultContext
    GlueContext ctx = new GlueDefaultContext();
    ctx.put(GlueBizControlConstants.SERVICE_NAME, "hello-service");
    // ctx.put(key, value);
    
  2. com.poscoict.glueframework.context.GlueWebContext

    웹브라우저(서블릿)에서 발생되는 Data 를 담는 저장소로 HttpRequest(ServletRequest)의 Parameter와 Attribute와 HttpSession, Cookie, Header Data를 별도의 Map 형태로 포함하며, MultipartRequest를 갖습니다.

    GlueContext ctx = new GlueWebContext();//EventType.WEB_BROWSER 임
    ctx.put(GlueBizControlConstants.SERVICE_NAME, "hello-service");
    // ctx.putAll( dataMap, ContentType );
    // ctx.setMultiPartRequest( multiPart )
    
  3. com.poscoict.glueframework.context.GluePortletContext

    웹브라우저(포틀릿)에서 발생되는 Data 를 담는 저장소로 PortletRequest의 Public Parameter, Private Parameter, Attribute와 PortletSession, ApplicationSession, Cookie, Header Data를 별도의 Map으로 갖습니다.

    GlueContext ctx = new GluePortletContext();//EventType.WEB_BROWSER 임
    ctx.put(GlueBizControlConstants.SERVICE_NAME, "hello-service");
    // ctx.putAll( dataMap, ContentType );
    

EventType

EventType 에는 DEFAULT, WEB_BROWSER, EAI_SERVER, EDGE_SERVER가 있습니다. GlueContext 생성시 EventType을 명시적으로 지정할 수 있습니다. com.poscoict.glueframework.web.control.portlet.GlueSimpleController 와 com.poscoict.glueframework.web.control.spring.GlueSimpleController 의 경우는 GlueContext 생성시 EventType은 WEB_BROWSER로 지정하고 있으며,
com.poscoict.glueframework.web.GlueHttpReceiverAdapter 의 경우는 EventType은 EAI_SERVER으로 지정하고 있습니다.

GlueContext ctx = new GlueDefaultContext(EventType.DEFAULT);

ContentType

ContentType은 GlueWebContext와 GluePortletContext의 Root Map을 제외한 부가적인 Map의 유형을 나타냅니다.

GlueWebContext 의 ContentType 은 다음과 같습니다.

  • HTTP_REQUEST_PARAM
  • HTTP_REQUEST_ATTR
  • SESSION_ATTR
  • COOKIE
  • HTTP_HEADER

    다음은 ContentType 을 이용해서 GlueContext에서 data에 접근하는 코드 예제입니다.

    //GlueWebContext ctx = . . .
    String data[] = (String[])ctx.get(key, WebContentType.HTTP_REQUEST_PARAM);
    // 또는
    String data[] = ctx.getAndTryToCast( key, String[], WebContentType.HTTP_REQUEST_PARAM );
    
    • GlueWebContext에서 ContentType이 주어지지 않는 경우 key 탐색 우선 순위는 다음과 같습니다.
      //GlueWebContext ctx = . . .
      Object data = ctx.get(key);
      //또는 Class<T> data = ctx.getAndTryToCast( key, Class<T>) 형태로.. 
      String data = ctx.getAndTryToCast( key, String);
      
      1. Root Map
      2. Request Attribute Map : HTTP_REQUEST_ATTR 에 해당
      3. Request Parameter Map : HTTP_REQUEST_PARAM 에 해당

GluePortletContext 의 ContentType 은 다음과 같습니다.

  • PORTLET_REQUEST_PARAM_PUBLIC
  • PORTLET_REQUEST_PARAM_PRIVATE
  • PORTLET_REQUEST_ATTR
  • SESSION_ATTR_APPLICATION_SCOPE
  • SESSION_ATTR_PORTLET_SCOPE
  • COOKIE
  • HTTP_HEADER

    다음은 ContentType 을 이용해서 GlueContext에서 data에 접근하는 코드 예제입니다.

    //GluePortletContext ctx = . . .
    String data[] = ctx.get(key, PortletContentType.PORTLET_REQUEST_PARAM_PUBLIC);
    // 또는
    String data[] = ctx.getAndTryToCast( key, String[], PortletContentType.PORTLET_REQUEST_PARAM_PUBLIC );
    
    • GluePortletContext에서 key 탐색 우선 순위는 다음과 같습니다.
      1. Root Map
      2. Request Attribute Map : PORTLET_REQUEST_ATTR 에 해당
      3. Private Request Parameter Map : PORTLET_REQUEST_PARAM_PRIVATE 에 해당
      4. Public Request Parameter Map : PORTLET_REQUEST_PARAM_PUBLIC 에 해당
        //GluePortletContext ctx = . . .
        ctx.get(key);
        //또는 Class<T> data = ctx.getAndTryToCast( key, Class<T>) 형태로.. 
        String data = ctx.getAndTryToCast( key, String);
        

Control Layer에서 GlueContext 생성 후 input data 등록시 그 성격에 따라 담을 수 있습니다.
다음은 GlueContext 생성시 ContentType 을 이용해서 유형별로 data를 담는 코드 예제입니다.

GlueContext ctx = new GlueWebContext();//EventType.WEB_BROWSER 임
ctx.put( key, value1 );
Map paramMap = ...;
paramMap.put( key, value2 );
ctx.putAll( paramMap, WebContentType.HTTP_REQUEST_PARAM );
Map attrMap = ...;
attrMap.put( key, value3 );
ctx.putAll( attrMap, WebContentType.HTTP_REQUEST_PARAM );

Activity Layer에서는 ContentType를 통해 Data에 접근 할 수 있습니다. ContentType이 주어지지 않는 경우 key 탐색 우선 순위를 따라 일부 ContentType 의 Data에 접근 할 수 있습니다.

Object value = ctx.get(key);
String[] param = (String[])ctx.get(key, WebContentType.HTTP_REQUEST_PARAM);
Object attr = ctx.get(key, WebContentType.HTTP_REQUEST_ATTR);