1. 먼저 insert 관련 tutorial을 이용해 insert Service를 만든다.

2. insert service에 fault handling 을 추가할것이다.
   먼저 insert.wsdl(자신이 처음에 insert관련 tutorial을 했을경우에 생성된 wsdl파일)을 열고
   <import namespace="http://schemas.oracle.com/bpel/extension"
            location="http://호스트명:포트번호/orabpel/xmllib/RuntimeFault.wsdl"/>
   을 추가한다.
   이것은 bindingFaults 의 메세지 타입을 정하기 위해 사용된다.

   bindingFaults
    - application 과 관련된 Fault이며 일반적으로 같은키(pk)의 데이타가 존재할때
      insert시도시 발생하는 에러와 같은것이다.
      이것은 BPEL Process에 의해 다뤄질수 있다.
  
   remoteFaults
    - system related, like trying to insert a row when the network or
      database is temporarily unavailable.  These can be retried automatically by
      configuring your bpel.xml.

      system과 관련된 Fault이며 query실행시 네티웍이나 database가 일시적으로 이용할수
      없는 상태가 된 경우와 같다.
      이것은 bpel.xml을 수정함으로써 자동적으로 재시도를 할수 있다.
      <partnerLinkBinding name="BPELSamples">
            <property name="wsdlLocation">insert.wsdl</property>
            <property name="retryInterval">60</property>        --> 재시도간격(60초마다)
            <property name="retryMaxCount">60</property>        --> 최대 60번까지만
         </partnerLinkBinding>

3. scope activity를 drag & drop 한후에 invoke및 assign을 넣는다 (insert service생성시 만든것)

4. scope의 Add Catch Branch를 클릭후에 fault handler를 더블클릭 한다.

5. Set Namespace URI to: http://schemas.oracle.com/bpel/extension

6. Set Local Part: to bindingFault

7. Create the Fault Variable
    - 2가지 방법이 있다.
        - 첫번째 방법
          type에 AdapterException 입력후 클릭... Browse Fault Variables은 클릭하지 않는다.
          .bpel file을 열고 <variables> element 에
          <variable name="AdapterException" messageType="bpelx:RuntimeFaultMessage"/> 을
          입력한다.

        - 두번째 방법
          Browse Fault Variables를 클릭후에 Variables선택후 Create 버튼 클릭
          name 에 AdapterException 입력
          message types 선택하고 Browse Message Type 클릭
         
          Type Explorer
            Message Types
                Partner Links
                    client
                        InsertWithCatch.wsdl
                            Imported WSDL
                                RuntimeFault.wsdl
                                    Message Types
                                        RuntimeFaultMessage

                                        선택
8. fault handler안에 scope activity를 추가한후 case 더블클릭한다.

9. bpws:getVariableData('AdapterException','code') = '1' 입력
   1은 ORA-00001의 1을 가리킨다.
   duplicate insert
   ORA-00001: unique constraint (SCOTT.MOVIES_PK1) violated

10. Scope안에 invoke를 양쪽에 추가한다.

11. 두개의 invoke를 생성한 partnerLink(DBAdapter)에 연결을 한다.

12. operation은 merge이며 변수는 자동생성이 아닌 기존에 invoke에서 사용한 변수를 이용한다.
    - 원래 insert만 수행하는 invoke에 fault handling을 이용하여 동일 데이타 발생시
      merge를 수행하게되며 fault handling을 사용안하고 그냥 merge만 사용하여 process를
      생성하는것보다 수행속도 면에서 많은 이점을 얻을수 있다.
      즉 3개의 invoke는 처음에 assign된 값을 이용해서만 DB와 통신을 하므로 처음에만
      같은 변수를 이용해 사용한다.

13. (90%)   Do insert

    (10%)   Try insert
        Do merge
            -perform existence check on each row (if check database on)
            -read each row from the database
            -perform an update or insert

vs.

     (100%)  Do merge
            -perform existence check on each row (if check database on)
            -read each row from the database (if exists)
            -perform an update or insert


        일반적으로 90%의 신규데이타는 insert를 수행하고 나머지 10%정도의
        데이타는 merge(update)를 수행하므로 merge시에 생기는 속도및 perfomance는
        100% 모두 merge하는것보다 성능에서 우월할수 있다.
1.("CustomerService" Scope)에서 ShipTo를 초기화 시켜주는 assign을 빼고 테스트 데이터에
<ns2:ShipTo>
    <ns2:Name>
         <ns2:First/>
         <ns2:Last/>
    </ns2:Name>
</ns2:ShipTo>
추가시켜서 먼저 초기화 시켜주어야 한다.(버그가 일어나 프로세스가 실행이 않됨)


2.("RequiresManualApproval" Decide Activity)를 만들때 처음 만들면 튜토리얼에서 보이는 형태로

보이지 않음 그래서 jdev에서 source를 한번 보고난후 다시돌아오면 정상적으로 보임.


3.("requiresApproval" Switch)에서 휴먼테스크를 만든후 밑에 만들어진 ("taskSwitch" Switch)에서 실행시 오류가 난다

이것은 source에서 한번 taskSwspitch를 제거후 툴에서 다시스위치를 생성 그다음 그스위치가 생성된자리에 taskSwitch를

다시 만들어 놓으면 문제해결.


4.("SelectSupplier" Scope)에서 RapidService.wsdl파일을 임포트할때 먼저 엔드포인트와 wsdl주소를 확인하고 넣어야

된다.

오라클 튜토리얼 보고 따라하다 한참 헤딩후에 알게 된것들 요즘 투토리얼이 좀 바꼈던데 ㅜㅜ
Clob insert 시에 문제가 있는데 구글 검색하니깐 몇까지 해볼만한 방안들이 있었다

근데 처음에 찾은 방식인 toplink를 바꿔 주니깐 문제없이 데이터가 들어감

toplink 에서 이것을
--------------------------------------------------------------
<opm:attribute-classification>[C</opm:attribute-classification>
-------------------------------------------------------------

이것로 바꿔줌
---------------------------------------------------------------------
<opm:attribute-classification>java.sql.Clob</opm:attribute-classification>
---------------------------------------------------------------------


+ Recent posts