'분류 전체보기'에 해당되는 글 539건

  1. 2003.04.29 미국과 ebXML 표준화 공조
  2. 2003.04.29 win2000에서 Oracle9i + ebxmlrr 설치 잘 안되네요. ㅡㅡ;; 3
  3. 2003.04.24 Registration and Discovery of Web Services
  4. 2003.04.24 UDDI와 함께 사용할 수 있는 방안을 위한 자료..
  5. 2003.04.23 기업은행 B2B `ebXML` 첫 채택
  6. 2003.04.23 국산 XML전자문서 가이드라인, 아시아 표준으로 채택 전망
  7. 2003.04.23 전자카탈로그 표준화 위해 민·관 공조
  8. 2003.04.21 JTOP Project 메뉴에 ebXML 스터디중입니다.
  9. 2003.04.21 [설치] pio님 내용에서 한가지 보충.. 1
  10. 2003.04.18 ebxml 레지스트리 구조 1
  11. 2003.04.18 BPEL4WS submitted to OASIS Standards Body
  12. 2003.04.17 ebxml 레지스트리에 org 만들기
  13. 2003.04.16 ebxml registry 설치하기 1
  14. 2003.04.15 ebxmlrr 에 접속해 정보 가져오기 1 3
  15. 2003.04.15 hermes msh
  16. 2003.04.15 정부에서 진행하는 일부 프로젝트에서의 문제점...
  17. 2003.04.04 Restrictions for Datatypes
  18. 2003.04.04 Common XML Schema Data Types
  19. 2003.04.04 MSDN에 올라온 최신 schema 자료입니다.
  20. 2003.04.04 schema 공부하기...
  21. 2003.04.04 Using W3C XML Schema
  22. 2003.04.04 XML Schema Tutorial
  23. 2003.04.03 JAXB를 이용한 XML Mapping 아티클
  24. 2003.04.01 JBoss.NET (with Axis)
  25. 2003.04.01 Standard mappings from WSDL to Java(Interoperability고려시)
  26. 2003.03.24 Developing an Amazon Web Services Client
  27. 2003.03.24 The Future of Web Services Security
  28. 2003.03.21 대용량 데이터를 JDBC로 테스트한 셈플과 결과(4)
  29. 2003.03.21 대용량 데이터를 JDBC로 테스트한 셈플과 결과(3)
  30. 2003.03.20 대용량 데이터를 JDBC로 테스트한 셈플과 결과(2)

당초 EDI가 잘 발달되어 다른 나라들보다 늦게 진행되리라 생각되었던
미국과 함께 표준화 공조 사업이 발촉된다면....
생각보다 좀 더 실용화 단계가 앞당겨 질꺼라 예상되네요.
거기에 기사에서도 나왔듯이..
아시아 Hub 계획도 잘 진행될 것 같고...

앞으로가 재밌어지겠네요.
(이제는 열심히 공부해야할 때가 된듯.. ^^)



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:13)
Posted by 아름프로
일과 시간이나 퇴근후에 잠깐씩 해봐서인지 어째서인지..
잘 안되네요.
build createDB 할때.. 잘 들어가다가..
거의 다 됬으쯔음해서.. 에러가 떨어집니다.
쩝~
제대로 되면 다시 글 남길께요.
(내부 분석이전에 설치부터 이러고 있으니... )



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:50)
Posted by 아름프로
Registration and Discovery of Web Services
소제목 : Using JAXR with XML Registries such as UDDI and ebXML

JAXR을 이용하여
UDDI와 ebXML(Reg/Rep)을 이용하는 좋은 내용입니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:37)
Posted by 아름프로
Registration and Discovery of Web Services
소제목 : Using JAXR with XML Registries such as UDDI and ebXML

JAXR을 이용하여 UDDI와 Reg/Rep를 사용하는 방법을 다룹니다.
해석을 달리하면 제목과 같은 내용이 되겠죠..

참고하시길..



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:48)
Posted by 아름프로
조성훈 hoon21@dt.co.kr 2003/04/23

기업은행(www.kiupbank.co.kr 행장 김종창)이 국내 금융권 최초로 방카슈랑스의 정보교환 아키텍처를 차세대 국가간 전자상거래 표준인 ebXML로 채택해 금융권과 관련업계에 파장을 미칠 전망이다.

기업은행은 22일 방카슈랑스 구축사업자인 삼성SDS를 통해 ebXML 업체인 이노디지털(www.innodigital.co.kr 대표 김종락)과 계약했다고 밝혔다.

기업은행의 이번 결정은 일부 시범사업을 제외하고는 기업간 전자상거래에 ebXML이 도입되는 최초의 사례로, 향후 ebXML 확산에 신호탄이 될 전망이다. 기업은행은 현재 10개 보험사와 방카슈랑스 관련 양해각서(MOU) 체결을 추진중인데, 대부분 보험사가 ebXML 시스템 구축에 동참할 것으로 보인다.

방카슈랑스는 은행 창구에서 보험사의 상품을 위탁 판매하는 것으로, 사실상 은행과 보험사간 B2B(기업간 거래)라고 할 수 있다. 따라서 이 둘의 전자거래를 연계할 아키텍처가 필요한데, 현재 유럽 등지에서 보편화된 방식은 전자문서교환(EDI)이다. 유럽의 경우 방카슈랑스가 십수 년 전에 시작돼 당시 기술로는 EDI 이외의 대안이 없었기 때문.

하지만 EDI는 시스템이 안정적인 반면 구축비용이 많이 들고 업체간 호환이 제한되어 있으며 상대방에 따라 개별 구축이 필요한 구조여서 상대방이나 거래환경의 변화에 따른 유지보수 및 확장에 어려움이 있다.

반면 2000년부터 국제표준으로 부상한 ebXML은 독립적인 표준 아키텍처 기반으로 거래 환경 변화에 유연하게 대처할 수 있으며, 유지보수 및 확장시 비용ㆍ시간ㆍ인력을 대거 절감할 수 있다. 특히 솔루션 업체에 의존적이지 않은 국제표준이어서 안정성이 높다.

장기적인 관점에서 확장성과 호환성이 월등히 높은 ebXML이 방카슈랑스의 표준 아키텍처가 되어야 한다는 주장이 제기되고 있으나 금융권에서 ebXML 구축사례가 없었다. 따라기업은행의 ebXML 도입은 ebXML 확산의 하나의 전기가 될 것으로 예상된다. 기업은행이 ebXML을 도입한 것도 기업들과의 자금거래가 많은 은행 특성상 향후 기업간 전자상거래 와 연계를 고려했다는 것.

기업은행 전산정보부의 이병호 차장은 "기은은 90년대 중반 은행간 거래 전용네트워크인 SWIFT를 도입함으로써 그전의 텔렉스를 통한 정보교환의 비효율을 극복한 경험이 있다"면서 "이번 ebXML 도입도 같은 맥락으로, 은행과 보험사간의 정보교환은 물론이고 금융과 산업간의 결합, 금융과 무역ㆍ 물류가 결합된 새로운 금융 전자상거래 모델을 구상하고 있다"고 밝혔다.

아시아 ebXML위원회 상호연동성 테스트 의장인 이노디지털 이정남 팀장은 "ebXML은 국제 전자상거래를 표준으로 자리매김 했기 때문에 올해를 기점으로 대거 확산될 것으로 예상되며, 방카슈랑스 업계도 이 추세를 따를 것으로 보인다"고 말했다.

조성훈기자

* 용어설명 : ebXML

ebusiness eXtensible Markup Language의 약자로 국제기구인 유엔 전자거래 및 무역촉진 포럼(UN/CEFACT)과 정보표준화기구인 OASIS(Organization for the Advancement of Structured Information Standards)가 공동 추진하고 있는 국제 전자상거래 표준. 차세대 웹 기술인 확장성표시언어(XML)를 적용해 업무프로세스가 서로 다른 기업간 전자상거래를 가능하게 해주는 기술이다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:13)
Posted by 아름프로
우리나라에서 개발돼 적용되고 있는 차세대형 전자문서개발 가이드라인이 아시아 표준으로 채택될 전망이다. 이에 따라 국내기업들은 아시아 지역 국가간 전자문서 거래에서 호환성과 전자거래에 유연성을 동시에 확보할 수 있을 것으로 기대된다.
 한국전자거래진흥원(원장 정덕진)은 지난달 28일 말레이시아 콸라룸푸르에서 폐막된 제8차 ebXML아시아위원회에서 진흥원이 발표한 확장성표기언어(XML)기반 전자문서개발 가이드라인인 ‘XML 메시지 가이드라인’에 대해 회원국들 모두가 긍정적인 반응을 보여 특별한 사유가 없는 이상 표준으로 채택될 가능성이 높다고 밝혔다.
 특히 아시아회원국 가운데 전자문서 가이드라인을 자체 개발한 국가는 아직 우리나라가 유일하기 때문에 위원회 내부에서도 한국 표준의 아시아표준 채택에 이견이 없는 것으로 전해졌다.
 진흥원이 이번에 소개한 XML 메시지가이드라인은 지난 2월 발표된 가이드라인을 아시아버전으로 확장한 것이다.

진흥원은 지난해 1월에 초판을, 올 2월에 두번째 버전을 발표했었다.
 ebXML아시아위원회에 참가한 한국전자거래진흥원 장재경 표준개발팀장은 “각 회원국들이 63종에 이르는 가이드라인의 핵심컴포넌트(Co Componet)에 대해 자국에서 적용하는데 문제점이 없는지 파악에 들어갔다”며 “오는 7월의 제9차 아시아위원회에서는 코컴포넌트테스트그룹(CCTG)을 결성해 발생하는 문제에 대한 해결을 논의할 예정”이라고 말했다.
 진흥원의 가이드라인이 범아시아의 표준으로 채택될 경우 지금까지 이 가이드라인에 맞춰 전자문서를 작성해온 국내업체들은 아시아 지역 다른 국가와의 거래에 있어 호환성 문제 등 각종 부담을 크게 덜 수 있을 것으로 기대된다. 장 팀장은 “가이드라인은 의무사항이 아니기 때문에 단기간에 크게 확산되지는 않겠지만 각국에서 도입 필요성을 인식하고 있어 점차 확산될 것”이라고 밝혔다.
 진흥원이 사무국을 맡고 있는 ebXML아시아위원회( http://www.ebxmlasia.org)는 아시아에서 국가가 ebXML 표준 제정 및 전자상거래 활성화를 위해 구성된 기구로서, 현재 한국을 비롯해 일본·중국·대만·말레이시아 등 9개국이 참가하고 있다.
 한편 한국전자거래진흥원은 이달 28일부터 런던에서 열리는 ‘유엔전자문서표준화기구(UN/CEFACT) 국제전자문서 미팅그룹’에서 독자개발한 전자문서 가이드라인을 발표할 예정이다. <김준배기자 joon@etnews.co.kr>  
○ 신문게재일자 : 2003/04/03
○ 입력시간 : 2003/04/02 18:25:55





***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:13)
Posted by 아름프로
전자상거래 활성화 선결과제인 전자카탈로그 표준화를 위해 민관이 손을 맞잡는다.
조달청·대한상공회의소·전자상거래표준화통합포럼(ECIF)·한국유통정보센터·한국전자거래협회 등은 최근 대전 조달청에서 ‘전자카탈로그 유관기관 간담회’를 갖고 전자카탈로그 표준화를 위해 민관이 적극 협조키로 했다.
이 간담회에서 참석자들은 전자카탈로그 표준을 만들기 위해 민관 공조가 절실하다는데 뜻을 같이하고 2개월에 한번씩 정기 간담회를 개최해 표준화에 장애가 되는 요소들을 개선해 나가기로 했다. 이와 함께 조달청이 각 기관들과 공동으로 진행할 1차 추진과제를 선정했다.
 이에 따라 조달청과 대한상공회의소는 각각 구축한 기업정보 데이터베이스를 공유하는 한편 유사어 사전의 용어 사이의 관계를 정의해 통일성을 높이는 온톨로지(ontology)를 개발하기로 했다.

조달청은 또 한국전자거래협회와 G2B와 B2B의 분류 및 속성에 온톨로지 구축사업을 전개하기로 했으며 전자카탈로그표준화와 관련된 기술세미나를 공동 개최하기로 했다. 한국유통정보센터와는 전자카탈로그의 분류체계인 속성세트의 표준화를 추진하기로 했다.
조달청 목록정보과 김점석 과장은 “정부와 민간과의 전자카탈로그 표준화에 상당한 문제점이 있다는 것을 깨달아 추진하게 됐다”며 “지속적인 토론과 협의를 통해 범국가적인 전자카탈로그 표준을 만들 계획이며 아울러 외국 전자카탈로그와의 연계도 모색할 방침이다”고 밝혔다.
<김준배기자 joon@etnews.co.kr>
 
<용어:온톨로지>
용어 사이의 관계를 정의하고 있는 일종의 사전. 어휘의 정의를 다른 어휘와의 논리적 관계뿐만 아니라 가장 기본적(primitive) 어휘부터 파악해 나가는 구조를 통해 나타낸다. 이는 지식표현이 해당 분야의 전문가들이 동의하거나 공통적으로 사용하는 가장 기본적인 어휘에서 출발한다는 점에서 해당 분야에 특정적(domain-specfic)이라 할 수 있다. 온톨로지는 해당 분야 전문가들의 관심, 목적, 관점을 반영한다.  
○ 신문게재일자 : 2003/04/23
○ 입력시간 : 2003/04/22 14:32:43





***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:13)
Posted by 아름프로
이곳 말고..
JTOP Project 메뉴에 보시면 ebXML 스터디가 있습니다.
관심 있으신 분은 참여하세요.  ^^
언제든 오픈되어 있습니다. ~



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:13)
Posted by 아름프로
차니랍니다.
cvs에서 받은 녀석은 모두 포함되어 있어서.. build 하면 바로 되었기에
pio님 설명처럼 하면 쉽게 설치를 할 수가 있습니다.

그런데 bin~으로 제공되는(b3기준) 녀석의 경우
ebxmlrr-server-2.1-beta3-libraries.zip 이 녀석을
ebxmlrrmisclib 이곳에 압축을 풀어주시고 build를 해야된답니다.
설치 메뉴얼에 있는 내용인데..
pio님 설명에 빠져 있어서 적어봅니다.

그럼 수거~~



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:50)
Posted by 아름프로
아래 제 강의를 통해서 ebxmlrr을 설치하고 사용해 보신 분들은 개념적으로 나마
ebxml 레지스트리/리파지 토리가  무슨일을 하는지 느끼셨을 겁니다.

이제 좀더 하부구조를 살펴 보도록 하겠습니다.

ebxmlrr은  
http://localhost:8080/ebxmlrr/registry/soap  이 주소로 항상 메시지를 보내도록 만들어 졌습니다.

여기서 메시지를 기다리는 친구는
com.sun.ebxml.registry.interfaces.soap 밑의 RegistryJAXMServlet 란 객체입니다.


이 객체 안에는
public void init() throws ServletException {
        try {
            log.info("------------------------------------------ ");
            log.info("init ");
            log.info("------------------------------------------ ");
            XalanVersion.verifyVersion();
            //initialise XML Security library
            org.apache.xml.security.Init.init();
        } catch (Exception ex) {
            log.fatal("init failed", ex);
            throw new ServletException(ex);
        }
    }

위와 같은 초기 화 메쏘드가 존재하는데
탐캣을 시작하시면 위 메쏘드가 호출 되고 ebxmlrr이 서비스 대기 모두에 들어갑니다.

그리고 우리가 레지스트리 브라우져를 실행하고 접속을 요청하면
( 그때 사실 classication scheme 을 가져오라는 adhocquery를 요청하게 됩니다)
이 객체의 onMessage ( SOAPMessage msg)
부분이 호출됩니다.


    public SOAPMessage onMessage(SOAPMessage msg) {
        //System.err.println("onMessage called for RegistryJAXMServlet");
        
        log.info("onMessage()  ");
        SOAPMessage soapResponse = null;
        
        try {
            
    
           .... 생략

           // xml to Request Object
           //  

            Request request = new Request(headerSignature,
BindingUtility.getInstance().getRequestObject(requestRootElement, requestXML), idToRepositoryItemMap);
          //  log.info( requestXML);

            System.out.println( requestXML);            
            System.out.println( requestRootElement);            
           }
}

이번 강의 에서 설명할 부분은
위의 onMessage 메쏘드중 Request  객체를 생성하는 부분입니다.

개념을 설명 하면
레지스트리 브라우져가 ebxml rs 스펙에 준하는 요청을 xml 형태로 하게 됩니다.
이 메시지는 soap 형태로 ebxmlrr에 전달되는데
그 후에 soap message 에서   요청 문서를 꺼내 서 처리를 해야합니다.
그런데 요청은 AdhocQueryRequest, SubmitRequest, RemoveRequest ..
등 다양하기 때문에
아마 이런식으로 처리를 해야 할 것입니다.
도착한 xml 문서를 가지고 이것이 위의 요청중 어떤 요청인지 먼저 판별하고
만약 AdhocQueryRequest이면 이에 관한 요청 객체를 생성 처리,하고
SubmitRequest 이면 이에 관한 요청 객체를 생성해야 할 것입니다.
따라서 필요한 것은 xml 로 부터  조건에 따라 객체를 생성하는 것인데
이것은 castor 란 프레임 워크가 지원합니다.

이제 코드로 다시 돌아가서

    Request request = new Request(headerSignature,
BindingUtility.getInstance().getRequestObject(requestRootElement, requestXML), idToRepositoryItemMap);

에서 Request 객체를 살펴 보면 요청 객체를 생성 할때 BindingUtility를 사용합니다.

그래서 BindingUtility 의 getRequestObject 를 살펴 보면

                      
        public Object getRequestObject(String rootElement, String message) throws RegistryException {
                Object req = null;
                
                try {
if (rootElement.equals("AdhocQueryRequest")) {

req = AdhocQueryRequest.unmarshal(new StringReader(message));


}

ellse if (rootElement.equals("GetContentRequest")) {

req = GetContentRequest.unmarshal(new StringReader(message));


}
                        

    catch (org.exolab.castor.xml.MarshalException e) {
                throw new RegistryException(e);
                }
                catch (org.exolab.castor.xml.ValidationException e) {
                        throw new RegistryException(e);
                }
                
                return req;
}


위의 코드에서 보는 바와 같이

rootElement.equals("AdhocQueryRequest")  이면

req = AdhocQueryRequest.unmarshal(new StringReader(message));

요청 객체는 AdhocQueryRequest 가 되는 것입니다.
그런 이 요청 객체를 생성하는 방법은 xml 문서로 부터 직접 생성합니다.

AdhocQueryRequest 안을 들여야 보면

import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
import org.exolab.castor.xml.Validator;
import org.xml.sax.DocumentHandler;

public class AdhocQueryRequest implements Serializable
{
    private ResponseOption _responseOption;
    private AdhocQueryRequestChoice _adhocQueryRequestChoice;


    public static AdhocQueryRequest unmarshal(Reader reader)
        throws MarshalException, ValidationException {
        return ((AdhocQueryRequest)
                (Unmarshaller.unmarshal
                 (((class$org$oasis$ebxml$registry$bindings$query$AdhocQueryRequest
                    == null)
                   ? (class$org$oasis$ebxml$registry$bindings$query$AdhocQueryRequest
                      = (class$
                         ("org.oasis.ebxml.registry.bindings.query.AdhocQueryRequest")))
                   : class$org$oasis$ebxml$registry$bindings$query$AdhocQueryRequest),
                  reader)));
    }
    
   }

보시다 시피

public static AdhocQueryRequest unmarshal(Reader reader)


xml을 통해 AdhocQueryRequest를 리턴 하는 메쏘드가 존재합니다.
물론 이 ummarshal은 캐스터 프레임 워크의 것입니다.


        




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:51)
Posted by 아름프로
MS, IBM, BEA가 무섭게 치고 나오네요..
이제 이쪽도 좀 봐야겠네요.. ^^;




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:12)
Posted by 아름프로
java -jar registry-browser.jar 로 레지스트리 클라이언트를 실행하고
http://localhost:8080/ebxmlrr/.../soap 로 연결하면 레지스트리와 접속이 됩니다.

이것은 어제까지 저의 레지스트리 설치하기를 따라해 보시면 어렵지 않게 하실 수 있습니다.
그런데 문제는 새로운 org를 만든다거나.. 정보를 수정할 때 등록되지 않은 사용자란 에러 때문에 할수 가 없었습니다.

전 이런 식으로 이 문제를 해결 할 수 있었습니다.

1. 브라우저를 실행하고  User 를 레지스트리에 등록합니다.
   ( 이때 uuid 가 나올 것입니다.)
2. 이때 얻어진 uuid를 가지고 /root/ebxmlrr/build.xml을 수정합니다.
   build.xml 부분에 genKeys 쪽으로 가시면 현재 등록 되어있는 유저와 관련한 곳이 있는데
  그곳에다 이 uuid 로 새로운 유저를 만듭니다.
  

3. 그리고 다시 key를 만듭니다. ./build.sh genKeys
   ( 이때 패스워드 관련한 부부분은 ebxmlrr 로 하시면 됩니다.
    제설정 파일은 이렇게 되어있습니다.)

4. 그리고 이제 브라우저에서 이것을 사용하시려면
   /root/.jaxr_properties에 이 uuid를 추가 해 주십시오


5. 그리고 브라우저를 실행하고
    login ( 새번째 열쇠그림) 합니다.
   key alias 에 uuid
   passwd 에 uuid

   를 넣으시고

6.이제  기관을 추가 하고 수정하고 삭제해 보세요.


  
  
암튼 제가 좀 헤메서 ...

그리고 코드도 좀 고쳤습니다.

잘안되시면 제가 링크에 제꺼 root를 그대로 옮겨 놨으니깐.
받아서 그냥 하시면 됩니다.
( 물론 postgresql 이나 자바가상 머신을 까셔야 합니다.)
제꺼에는 tomcat 과 ebxmlrr 과 그 browser와 api doc 등이 있습니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:51)
Posted by 아름프로
먼저 설치 환경은 래드햇 8.0 입니다.
모든 작업은 /root  디렉 밑에서 하였습니다.

그전에 postgresql을 설치 하셔야 합니다.
그리고 실행해 주시고 적당한 user와 passwd 를 주셔야 합니다.


먼저 ebxml rr 소스가 필요한데..

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ebxmlrr login

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ebxmlrr co ebxmlrr

로 소스를 받습니다.
그러면 /root/ebxmlrr 이란 디렉이 생기고 필요한 코드가 있을 것입니다.
그리고  buid.properties.template  --> build.properties 로 바꾸고 아래와 같이 설정 해주십시요
# This file contains the properties for DEPLOYMENT of ebxmlrr. The RUNTIME
# properties should be set in ebxmlrr.properties in your home directory. You
# should copy this file and rename it as build.properties and edit the file.
#
# $Header: /cvsroot/ebxmlrr/ebxmlrr/build.properties.template,v 1.12 2002/12/30 04:00:30 skchonghk Exp $

# JAVA_HOME must be set in environment.
# Other environment properties should be set in this file.
# (use forward slashes for separators for all platforms)

ebxmlrr.home=${user.home}/ebxmlrr <-- ebxmlrr 의 위치


# the location of your JavaCC directory
javacc.home=./misc/lib

# Distribution version. Users need not edit this
dist.version=2.1-beta1

# The directory for storing repository items. When you execute a appropriate
# target in build.xml, this directory will be created for you.
ebxmlrr.repository.home=${ebxmlrr.home}/data/repository

# tomcat installation home
catalina.home=/root/jakarta-tomcat-4.0.6 <--- 탐캣의 위치
( 탐캣을 받으신후 적당한 곳에 압축을 푸세요
전 /root 에서 작업했습니다.)


# ebxmlrr SOAP interface URL
ebxmlrr.url.soap=http://localhost:8080/ebxmlrr/registry/soap


# Path of JDBC driver
jdbcDriver=${build.home}/lib/postgresql.jar
#jdbcDriver=C:/oracle/ora92/jdbc/lib/classes12.jar

# JDBC connection URL
dbURL=jdbc:postgresql://localhost:5432/registry
#dbURL=jdbc:oracle:thin:@localhost:1521:test

# Database username
dbUsername=pgsql
( 아까말한 db user 이름)

# Database password
dbPassword=123456
( 패스워드)

# JDBC driver class
jdbcClassName=org.postgresql.Driver
#jdbcClassName=oracle.jdbc.driver.OracleDriver

#
#Used in calls to SOAPSender in build.xml
#Set to true if you want to test without Tomcat (useful for ebxmlrr dev team)
#Set to false by default and if you are a user
localCall=false

#
#Used to control apache common logging
#Use SimpleLog to have logging output
#apacheLog=org.apache.commons.logging.impl.SimpleLog
apacheLog=org.apache.commons.logging.impl.NoOpLog

그리고 ./build.sh
을 실행 시키면 되는데 잘 안될 것입니다.
( 안되는 분들은 링크에서 제것을 가져 다가 하시면 됩니다.)
( 이유는 모르겠습니다만은 !!)

암튼 이렇게 하면 /root/ebxmlrr/build 디렉에 필요한 클래스들이 ..컴팔되어 있습니다.

그리고 나서 아마도 ./build.sh deploy
해주시면 /root/jakarta-tomcat-4.0.6/webapps/ 에 ebxmlrr이란 디렉이 생기면서
레지스트리 서버가 인스톨 될 것입니다.
( 당연히 탐캣을 시작해 주셔야 겠죠.)
/root/jakarta-tomcat-4.0.6/bin/startup.sh
하시고
logs 디렉에 가셔서 실행상에 문제가 없는지 살펴보십시오.
전 xalan 버젼이 낮다는 예외가 발생해서
이런 예외를 발생 시키지 않도록 코드를 고쳤습니다.


그리고 설명서대로 ./build.sh genKeys
하시고 ./build.sh createDemoDB 하셔서 레지스트리 운영에 필요한 디비를 만들어 주세요

그리고 다하셨으면
./build.sh test 하세요.
그럼  화면상에 성공여부를 알수 있는 xml 메시지가 나타 날 것입니다.

전 1달전에 이 걸 설치하려다가 못하고 ( 그때도 설치는 했는데...)
지금에서야 설치하고 테스트 해 보았습니다.

잘 설치 되었는지 더 알 수 있는 방법은 ebxmlrr-client를 받으셔서
( 제걸 받으시면 /root/ebxmlrr/ebxmlrr-client-beta2에 있습니다.)
빌드 하시고 실행 하시면
( cd build/lib ; java -jar registry-browser.jar 하시고
화면이 뜨면 첫번째 로컬 호스트로 접속해 보시면...됩니다.

그리고 아래 제 강좌예제에 RegistryBrowser.java 메인 함수의
연결 부분을 http://localhost:8080/ebxmlrr/registry/soap로
연결하시면 정상 작동하는 것을 보실수 있을 겁니다.












***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:51)
Posted by 아름프로
ebxmlrr 클라이언트를 분석하다가 간단하게
레지스트리에서 sun 이란 기관의 정보를 가져와서 PostalAddress를 화면에 출력하는
프로그램을 만들었습니다.(?)

실행법은 ./run.sh
입니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:51)
Posted by 아름프로

hermes msh

2003. 4. 15. 12:41
말그대로 hermes msh 구조  입니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:51)
Posted by 아름프로
정부 주도하에 올해들어서 특히 중요부분으로 진행하는 것중에 하나가..
표준화 작업... 이란 것이 있습니다.
직접적으로 어떤 분야의 표준화를 만든다거나...
아니면 어떤 분야의 프로젝트를 진행함에 있어, 표준을 적용해야된다던가...

첫번째 경우에는 실제 표준화에 대한 아무런 지식없이 하는 업체들을 자주보게
되고, 두번째 경우엔 첫번째 과정도 거치지 않고 진행하는 것이 많기에 주어진
기간내에 표준화를 이루면서 한다는 것은 더더욱 현실적이 못한 실정입니다.

최근에 진행중인 모프로젝트의 경우,
몇군데 업체가 모여서 진행하는 프로젝트인데 이중에 한 부분을 표준화 진행하는
부분이 떨어져서 진행중이고.. 이것을 기반으로 제가 맡고 있는 부분을 서비스화
시키는 프로젝트인데...
다른 업체에서 진행하는 표준화란 것을 들여다보니(자칭 XML전문 회사라는 곳이)
이건 XML아는 누구나가 할 수 있는 수준의 문서장난(!)을 치고 있었답니다.
내용적으로 ebXML이란 이야기도 나와서 잘하겠지라 믿었거만...
CC에 대한 최소한의 'Naming Convention for Core Components'라도
봤으면 XML 엘리먼트 네임이 그렇게 황당하지 않으련만...

어쨌든,
진행하는 정부 시간에서도 표준화를 진행하는 부분에 있어.
어떤 표준화를 세계적인 표준이 있다면 적용할 것인지, 아니라면 표준화를 시킬 것이면
어떤 방식으로 표준화를 정의할 것인지...
좀 더 적극적으로 대응할 필요가 있을꺼 같단 생각을 해봅니다.


                                                       - 하루를 시작하며 차니 .. -




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:52)
Posted by 아름프로
Restrictions for Datatypes 입니다.
Restrictions for Datatypes



  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
ConstraintDescription
enumerationDefines a list of acceptable values
fractionDigitsSpecifies the maximum number of decimal places allowed.
    Must be equal to or greater than zero
lengthSpecifies the exact number of characters or list items
    allowed. Must be equal to or greater than zero
maxExclusiveSpecifies the upper bounds for numeric values (the value
    must be less than this value)
maxInclusiveSpecifies the upper bounds for numeric values (the value
    must be less than or equal to this value)
maxLengthSpecifies the maximum number of characters or list items
    allowed. Must be equal to or greater than zero
minExclusiveSpecifies the lower bounds for numeric values (the value
    must be greater than this value)
minInclusiveSpecifies the lower bounds for numeric values (the value
    must be greater than or equal to this value)
minLengthSpecifies the minimum number of characters or list items
    allowed. Must be equal to or greater than zero
patternDefines the exact sequence of characters that are
    acceptable
totalDigitsSpecifies the exact number of digits allowed. Must be
    greater than zero
whiteSpaceSpecifies how white space (line feeds, tabs, spaces, and carriage returns) are handled





***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:36)
Posted by 아름프로
xs <- namespace

Common XML Schema Data Types

xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time

찾을려면 또 잘 안찾아지는거라 적어놓습니다. ^^






***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:36)
Posted by 아름프로
schema를 MS에서 제안했으니.. 당연히 자료도 많겠죠?
그러나 한글 MSDN쪽에는 없네요. ㅡㅡ;
어쨌든, 최근에 정리해서 올라온 글이 있어서 올려봅니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:36)
Posted by 아름프로
W3C의 것을 이해하고 공부하는데에 있어..
너무도 유명한 w3schools의 schema 스터디 부분입니다.

^^



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:36)
Posted by 아름프로
한글 자료는 찾기 어렵네요. ㅡㅡ;
이번 역시 영어입니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:36)
Posted by 아름프로
유명한 자료라 아시는 분은 다 아시겠지만,
링크 걸어봅니다.

JAXB로 처리하려고 하다보니..
Castor같은 경우는 XML / Schema 선택 사항이였는데.
JAXB는 Schema 가 필수 사항이네요.
데이터 모델링과 클래스 모델링할때.... 스키마를 써야만 하는 시대가
이제 오나봅니다.

그럼 수거~





***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:36)
Posted by 아름프로
아래의 링크에가면 아티클과 소스까지 있답니다.

XML Mapping만 놓고 보면 JAXB와 Castor 네요...
(책에는 아직 Castor로 설명이 많네요. ㅡㅡ;; )

http://www.devx.com/Java/Article/10904



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:12)
Posted by 아름프로
JBoss.NET에 관한 내용입니다.
Axis 설치 방법과 관련 내용이 있습니다.

http://www.jboss.org/developers/projects/jboss/dotnet.jsp



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:12)
Posted by 아름프로
WSDL 에서 자바로 변경할 시의 맵핑되는 타입에 대한 것입니다.
Interoperability 를 고려한다면 잘 기억해야 될 내용입니다.
그럼 이만..
------------------------------------------------------------------

Standard mappings from WSDL to Java

xsd:base64Binary  byte[]
xsd:boolean  boolean
xsd:byte  byte
xsd:dateTime  java.util.Calendar
xsd:decimal  java.math.BigDecimal
xsd:double  double
xsd:float  float
xsd:hexBinary  byte[]
xsd:int int
xsd:integer java.math.BigInteger
xsd:long  long
xsd:QName  javax.xml.namespace.QName
xsd:short  short
xsd:string java.lang.String




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:37)
Posted by 아름프로
아마존 웹서비스 클라이언트 부분 만들기 예제 입니다.
C#쪽에도 관련 자료가 있으니.. 둘의 비교하여 보는 것도 재미있을 겁니다.

http://developer.java.sun.com/developer/technicalArticles/WebServices/amazonws/



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:12)
Posted by 아름프로
웹서비스의 시큐리티에 관련된 선 아티클입니다.
관련 글들도 링크 있으니 참고하세요.
http://java.sun.com/features/2003/03/webservices-qa.html



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:12)
Posted by 아름프로
결과 비교 :
================================================
res1  : 0.791초
res2  : 2.654초
res_full  : 3.646초
jacksun1001 : i love you1001 : 2002 : musician1100 : musician1100
.... 생략
jacksun1100 : i love you1100 : 2002 : musician1110 : musician1110
res3  : 0.04초
----------------------------------------------------------------------------------------
res1  : 0.791초
res2  : 0.1초
res_full  : 1.082초
jacksun1001 : i love you1001 : 2002 : musician1100 : musician1100
.... 생략
jacksun1100 : i love you1100 : 2002 : musician1110 : musician1110
res3  : 0.04초
=================================================

결론 :
결과적으로 2초 이상의 쿼리상의 이득을 얻을 수 있었습니다.
쿼리를 효율적으로 사용하기 어려운 상황이라면 이와 같이...
특정 범위에서 뽑아내는 방법에서 아이디어를 얻어서 설계하시면
퍼포먼스에 도움이 될겁니다.

ps :
더 좋은 방법을 JDBC2.0API에서 사용도 할 수 있겠지만,
MySQL의 최신 JDBC드라이버의 경우 아직 2.0이상의 새로운 메소드에
대해서 완전히 구현되지 않은 상황이라 absolute만 사용했습니다.




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:44)
Posted by 아름프로
(3), (4)에서는...
absolute를 이용하여 특정 위치를 결과를 뽑아서 사용할 경우의 속도 비교입니다.
5만건의 데이터를 쿼리한 것에서... 1001번째부터 1100까지 100개의 값을
추출하는 소스 입니다.

=============================================
while에서 뽑아오는 소스
--------------------------------------------------------------------------------

import java.sql.*;
import java.util.Vector;

public class DBTest6 {
        
        Vector result = new Vector();
        
        public void init() {
                
                long start_full = System.currentTimeMillis();
                
                String musician, music_subject, music_year, music_write, music_compose = null;
                Connection conn = null;
                Statement stmt = null;
                
                try {
                        Class.forName("org.gjt.mm.mysql.Driver");
                }catch (ClassNotFoundException ex) {
                        System.err.println("ClassNotFoundException: " + ex.getMessage());
                }

                try{
                        conn = DriverManager.getConnection("jdbc:mysql://localhost/music","music","music");

                        if(conn != null)  {
                                stmt = conn.createStatement();
                                
                                long start = System.currentTimeMillis();

                                ResultSet rst = stmt.executeQuery("select musician, music_subject, music_year, music_write, music_compose from musictest");                                
                                
                                long end = System.currentTimeMillis();
                                double res1 = (double)(end - start) / 1000;
                                //System.out.println("start1 : "+start);
                                //System.out.println("end2  : "+end);
                                System.out.println("res1  : "+res1+"초");
                                
                                long start2 = System.currentTimeMillis();
                                                                                                
                                while(rst.next()) {
                                        musician = rst.getString(1);
                                        music_subject = rst.getString(2);
                                        music_year = rst.getString(3);
                                        music_write = rst.getString(4);
                                        music_compose = rst.getString(4);
                                        
                                        Vector row = new Vector();
                                        row.add(musician);
                                        row.add(music_subject);
                                        row.add(music_year);
                                        row.add(music_write);
                                        row.add(music_compose);
                                        result.add(row);
                                }
                                
                                conn.close();
                                long end2 = System.currentTimeMillis();
                                double res2 = (double)(end2 - start2) / 1000;
                                
                                System.out.println("res2  : "+res2+"초");
                        }
                }catch(Exception e) {
                          e.printStackTrace();
                }finally {
                        if ( stmt != null ) try{stmt.close();}catch(Exception e){}
                        if ( conn != null ) try{conn.close();}catch(Exception e){}
                  }
                
                long end_full = System.currentTimeMillis();
                double res_full = (double)(end_full - start_full) / 1000;
                System.out.println("res_full  : "+res_full+"초");
        }
        
        public Vector getResult(){                
                return result;        
        }                
        
        public static void main(String[] args) {
                
                DBTest6 db = new DBTest6();
                db.init();
                Vector result = db.getResult();
                
                long start = System.currentTimeMillis();
                for(int i=1000; i < 1100; i++){
                        Vector row = (Vector)result.get(i);
                        
                        String musician = (String)row.get(0);
                        String music_subject = (String)row.get(1);
                        String music_year = (String)row.get(2);
                        String music_write = (String)row.get(3);
                        String music_compose = (String)row.get(4);
                        
                        System.out.println(musician +" : "+ music_subject + " : "+ music_year + " : "+ music_write + " : "+music_compose);                                                
                }
                long end = System.currentTimeMillis();
                double res2 = (double)(end - start) / 1000;
                System.out.println("res3  : "+res2+"초");
        }
}

---------------------------------------------------------------------------
absolute를 써서 뽑아오는 경우
---------------------------------------------------------------------------

import java.sql.*;
import java.util.Vector;

public class DBTest5 {
        
        Vector result = new Vector();
        
        public void init() {
                
                long start_full = System.currentTimeMillis();
                
                String musician, music_subject, music_year, music_write, music_compose = null;
                Connection conn = null;
                Statement stmt = null;
                
                try {
                        Class.forName("org.gjt.mm.mysql.Driver");
                }catch (ClassNotFoundException ex) {
                        System.err.println("ClassNotFoundException: " + ex.getMessage());
                }

                try{
                        conn = DriverManager.getConnection("jdbc:mysql://localhost/music","music","music");

                        if(conn != null)  {
                                stmt = conn.createStatement();
                                
                                long start = System.currentTimeMillis();

                                ResultSet rst = stmt.executeQuery("select musician, music_subject, music_year, music_write, music_compose from musictest");                                
                                
                                long end = System.currentTimeMillis();
                                double res1 = (double)(end - start) / 1000;
                                System.out.println("res1  : "+res1+"초");
                                
                                long start2 = System.currentTimeMillis();
                                                                                                                
                                int j = 1001;
                                rst.absolute(j);
                                for(int i = 0 ; i < 100 ; i++){
                                        musician = rst.getString(1);
                                        music_subject = rst.getString(2);
                                        music_year = rst.getString(3);
                                        music_write = rst.getString(4);
                                        music_compose = rst.getString(4);
                                        
                                        Vector row = new Vector();
                                        row.add(musician);
                                        row.add(music_subject);
                                        row.add(music_year);
                                        row.add(music_write);
                                        row.add(music_compose);
                                        result.add(row);
                                        
                                        rst.next();
                                }                                
                                
                                conn.close();
                                long end2 = System.currentTimeMillis();
                                double res2 = (double)(end2 - start2) / 1000;
                                
                                System.out.println("res2  : "+res2+"초");                                
                        }
                }catch(Exception e) {
                          e.printStackTrace();
                }finally {
                        if ( stmt != null ) try{stmt.close();}catch(Exception e){}
                        if ( conn != null ) try{conn.close();}catch(Exception e){}
                }

                
                long end_full = System.currentTimeMillis();
                double res_full = (double)(end_full - start_full) / 1000;
                System.out.println("res_full  : "+res_full+"초");
        }
        
        public Vector getResult(){                
                return result;        
        }                
        
        public static void main(String[] args) {
                
                DBTest5 db = new DBTest5();
                db.init();
                Vector result = db.getResult();
                
                long start = System.currentTimeMillis();
                for(int i=0; i < result.size(); i++){
                        Vector row = (Vector)result.get(i);
                        
                        String musician = (String)row.get(0);
                        String music_subject = (String)row.get(1);
                        String music_year = (String)row.get(2);
                        String music_write = (String)row.get(3);
                        String music_compose = (String)row.get(4);
                        
                        System.out.println(musician +" : "+ music_subject + " : "+ music_year + " : "+ music_write + " : "+music_compose);                                                
                }
                long end = System.currentTimeMillis();
                double res2 = (double)(end - start) / 1000;
                System.out.println("res3  : "+res2+"초");
        }
}
=============================================
결과는 (4)에서.. 계속..




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:44)
Posted by 아름프로
Select 테스트 5만건

결과
============================
1차 :
----------------------------------
res1  : 0.651초
res2  : 2.303초
res_full  : 3.134초
res3  : 0.02초
============================
2차 :
----------------------------------
res1  : 0.671초
res2  : 2.333초
res_full  : 3.174초
res3  : 0.021초
============================
3차 :
----------------------------------
res1  : 0.651초
res2  : 2.324초
res_full  : 3.155초
res3  : 0.03초
============================

결론
1. 가장 많은 시간을 차지하는 부분 while 문을 써서 데이터 추출하는 부분(res2)
2. 두번째로 많이 시간 걸리는 부분 (res1)
3. 5만건의 2차원 Vector로 결과치 처리하는데는 미미한(!) 시간 소요
4. MySQL5만건 기준시 데이터처리시에만 3초 정도소요
    (가장 기본적인 Query와 결과치를 뽑아내는 방식일 경우)

해결방안
1. Query 사용시 조건문의 절적한 사용
2. while 문을 통해 전체를 뽑는 방식보다는 ResultSet에서
    화면단위의 특정 부분을 뽑아서 결과를 만드는 방식 활용
    (absolute 등의 메소드 적절히 활용)
3. 1의 방식은 특정 DB에 종속되는 Query로만 해결가능 하므로 약간의 DB종속적인
    Query가 됨. (DB에 종속되지 않는 솔루션 만들시에는 검토대상)
4. 화면단위의 처리가 있는 경우 더 많은 시간 소요
5. 네트워크를 넘어 결과의 Object로 처리시 더 많은 시간 소요

해결방안으로 제시한 내용은 다음 글에서 계속... (작성하게 되면.. ㅡㅡ;; )




***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 17:44)
Posted by 아름프로

BLOG main image

카테고리

분류 전체보기 (539)
이야기방 (19)
토론/정보/사설 (16)
IBM Rational (9)
U-IT (0)
SOA/WS/ebXML (110)
개발방법론/모델링 (122)
J2SE (34)
J2EE (60)
DataBase (39)
Open Projects (30)
BP/표준화 (50)
Apache Projects (15)
Web/보안/OS (22)
Tools (7)
AJAX/WEB2.0 (1)
Linux/Unix (1)
영어 (0)
비공개방 (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

글 보관함

Total :
Today : Yesterday :