2011-04-28 5 views
0

데이터 대기열 오브젝트에 문제가 있습니다. Java에서 Data Queue 오브젝트를 통해 AS/400 프로그램 (AS400이라고 함)에 메시지를 보내고 있습니다. iSeries에 쓰고 응답을 읽을 수는 있지만 데이터 대기열의 크기는 이전에 보낸 메시지의 크기로 정의되므로 응답을 받으면 크기가 잘립니다. 요청 메시지와 나는 느슨한 정보. 이 문제를 어떻게 해결할 수 있습니까? 누구든지 나를 도울 수 있습니까? JTOpen 라이브러리를 사용하고 있습니다.데이터 대기열 크기 제한 - iSeries에서 Java 로의 통신

감사

관계없이 생성되고 어떻게의
+0

데이터 큐는 어떻게 생성됩니까? (CRTDTAQ 명령을 사용하여) 명령 프롬프트에서 데이터 대기열을 만들 때 1에서 64512 바이트까지의 최대 입력 길이를 지정해야합니다. 아마 내가 길이 100의 데이터 큐를 만들고 200 바이트를 넣으려고한다면, 그것은 잘릴 것입니다. – dmc

+1

DataQueue 객체에서'create' 메소드를 사용할 수도 있습니다. [JTOpen Javadocs의이 사본 (http://javadoc.midrange.com/jtopen/com/ibm/as400/access/DataQueue.html)에 따르면, 여기에서 'maxEntryLength'를 지정합니다. if 당신은 자바에서 만들고 있어요. – dmc

답변

3

는 데이터 큐는 "최대 입력 길이"가 있습니다. 이것은 CL의 CRTDTAQ 명령 또는 JTOpen을 사용하여 DataQueue 오브젝트를 설정하는 경우 create 메소드 호출에 지정됩니다.

데이터 큐를 통해 길이가 다른 메시지를 보내려는 경우 "최대 항목 길이"가 실제 최대 항목 길이보다 크거나 같은 데이터 큐를 만들어야합니다. 그렇지 않으면 한쪽 끝에 뭔가를 놓을 위험이 있으며 다른 쪽에서 나올 때 잘리는 위험이 있습니다.

Here's the Javadoccreate의 데이터 대기열을 JTOpen에서 볼 수있는 방법을 보여줍니다.

+0

DataQueue는 40000 길이로 생성되고 Java에서 수신되는 메시지는 1000자를 초과하지 않으므로 올바르게 작동합니다. 무엇보다도, 우리가 500 문자 메시지를 iSeries로 보낼 때 응답 메시지는 길이가 500으로 잘립니다. 우리 솔루션은 우리가 보낸 메시지를 빈 공간으로 채워서 응답과 길이가 같도록했습니다. 비록 이것이 문제를 해결하지 못할지라도, 우리가 "해머 솔루션"이라고 부르는 것입니다 ... –

+0

나는 봅니다. iSeries에서 실행중인 프로그램이 데이터를 절단하지 않습니까? 데이터 큐 (예 : 'DBU'또는 'DMPOBJ'명령을 사용할 수도 있지만, 가장 친숙한 방법은 아니지만)를 볼 수있는 방법이 있다면 전체 응답을 통해이를 확인하는 것이 좋습니다. 데이터 큐에 저장합니다. Java 프로그램에서 메시지를 보내고 응답을 사용하도록 논리를 억제해야합니다. 행운을 빕니다! – dmc

1

대체 솔루션을 고려해 볼 수 있습니까? 유사한 상황에서 사용한 접근 방식은 크기 제한이없는 사용자 공간 (AS/400의 객체 유형 USRSPC)을 통해 요청/응답 메시지의 내용을 전달하는 것이 었습니다. 음, 정확하게 기억한다면 ~ 16GB ... 사용자 공간의 고정 크기 이름은 AS/400 서버와 Java 클라이언트 사이의 데이터 대기열 (DTAQ)을 통해 전달되었습니다.

+1

흥미로운 아이디어. 최대 사용자 공간 크기는 [IBM] (http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/topic/rzamp/rzamp.pdf)에 따르면 약 16MB입니다. 64kB의 최대 데이터 대기열 항목 크기보다 훨씬 좋습니다. – dmc

+0

수정 해 주셔서 감사합니다. @ dmc! 그 동안 잠깐, 세부 사항이 약간 색이 바랬습니다, 미안 해요. 나는 DTAARA, USRQ 또는 DTAQ가 훨씬 더 좋았다는 것을 기억합니다. 다시 한번 감사드립니다. – mazaneicha

+0

사용자 공간에 보안 문제가 있습니다 (따라서 * SEC QALWUSRDMN 시스템 값의 필요성). 그냥 파일 ("메시지")을 공유 디렉토리에 덤프하고 데이터 대기열을 사용하여 경로/이름을 보내지 않는 이유는 무엇입니까? 크기에 대한 우려는 없습니다. – user2338816