[Home] [Help]
PACKAGE BODY: APPS.XNB_QUEUE_HANDLERS_PKG
Source
1 PACKAGE BODY XNB_QUEUE_HANDLERS_PKG AS
2 /* $Header: XNBVQHLB.pls 120.0 2005/05/30 13:46:22 appldev noship $ */
3
4 --------------------------------------------------------------------------------------
5 /***** This is a private procedure to dequeue messages from the */
6 /* ECX_OUTBOUND to XNB_JMS_OUTBOUND */
7 /* */
8
9
10 ---------------------------------------------------------------------------------------
11
12 PROCEDURE ecx_to_jms_handler (
13 CONTEXT IN RAW,
14 reginfo IN SYS.aq$_reg_info,
15 descr IN SYS.aq$_descriptor,
16 payload IN RAW,
17 payloadl IN NUMBER
18 )
19 AS
20
21 l_ecx_dequeue_options DBMS_AQ.dequeue_options_t;
22 l_ecx_message_properties DBMS_AQ.message_properties_t;
23 l_ecx_message_handle RAW (16);
24 l_ecx_message SYSTEM.ecxmsg;
25 l_jms_enqueue_options DBMS_AQ.enqueue_options_t;
26 l_jms_message_properties DBMS_AQ.message_properties_t;
27 l_jms_message_handle RAW (16);
28 l_jms_message SYS.aq$_jms_text_message;
29 l_error_msg VARCHAR2 (1000);
30 l_payload_length NUMBER;
31 l_payload_vc VARCHAR2(4000);
32
33 NO_NEW_MESSAGES EXCEPTION;
34
35 pragma exception_init (NO_NEW_MESSAGES, -25228);
36 l_more_messages BOOLEAN ;
37
38 BEGIN
39
40
41 --------------------------------------------------------------------------------------
42 -- DEQUEUE FROM XML GATEWAY OUTBOUND QUEUE
43 --
44 -------------------------------------------------------------------------------------
45 xnb_debug.log('ecx_to_jms','Begin of ecx_to_jms Handler');
46 l_more_messages := TRUE;
47 l_ecx_dequeue_options.wait := 1;
48
49 WHILE (l_more_messages) LOOP
50
51 BEGIN
52 l_ecx_dequeue_options.deq_condition := 'tab.USER_DATA.PARTY_SITE_ID = ''XNB''';
53 l_ecx_dequeue_options.dequeue_mode := DBMS_AQ.REMOVE;
54
55
56 DBMS_AQ.DEQUEUE(queue_name => g_apps_schema||'.'||g_ecx_outbound_q
57 ,dequeue_options => l_ecx_dequeue_options
58 ,message_properties => l_ecx_message_properties
59 ,payload => l_ecx_message
60 ,msgid => l_ecx_message_handle);
61 COMMIT;
62 xnb_debug.log('ecx_to_jms','After DEqueue from ECX_outbound');
63 --------------------------------------------------------------------------------------
64 -- TRANSFORM FROM SYSTEM.ECXMSG TO SYS.AQ$_JMS_TEXT_MESSAGE
65 -- Create JMS text message and set properties
66 --
67 --------------------------------------------------------------------------------------
68
69 l_jms_message := SYS.AQ$_JMS_TEXT_MESSAGE.CONSTRUCT();
70
71 l_jms_message.SET_STRING_PROPERTY(g_ecx_message_type, l_ecx_message.message_type);
72 l_jms_message.SET_STRING_PROPERTY(g_ecx_message_standard, l_ecx_message.message_standard);
73 l_jms_message.SET_STRING_PROPERTY(g_ecx_transaction_type, l_ecx_message.transaction_type);
74 l_jms_message.SET_STRING_PROPERTY(g_ecx_transaction_subtype, l_ecx_message.transaction_subtype);
75 l_jms_message.SET_STRING_PROPERTY(g_ecx_document_number, l_ecx_message.document_number);
76 l_jms_message.SET_STRING_PROPERTY(g_ecx_party_id, l_ecx_message.partyid);
77 l_jms_message.SET_STRING_PROPERTY(g_ecx_party_site_id, l_ecx_message.party_site_id);
78 l_jms_message.SET_STRING_PROPERTY(g_ecx_party_type, l_ecx_message.party_type);
79 l_jms_message.SET_STRING_PROPERTY(g_ecx_protocol_type, l_ecx_message.protocol_type);
80 l_jms_message.SET_STRING_PROPERTY(g_ecx_protocol_address, l_ecx_message.protocol_address);
81 l_jms_message.SET_STRING_PROPERTY(g_ecx_username, l_ecx_message.username);
82 l_jms_message.SET_STRING_PROPERTY(g_ecx_password, l_ecx_message.password);
83 l_jms_message.SET_STRING_PROPERTY(g_ecx_attribute1, l_ecx_message.attribute1);
84 l_jms_message.SET_STRING_PROPERTY(g_ecx_attribute2, l_ecx_message.attribute2);
85 l_jms_message.SET_STRING_PROPERTY(g_ecx_attribute3, l_ecx_message.attribute3);
86 l_jms_message.SET_STRING_PROPERTY(g_ecx_attribute4, l_ecx_message.attribute4);
87 l_jms_message.SET_STRING_PROPERTY(g_ecx_attribute5, l_ecx_message.attribute5);
88
89 --------------------------------------------------------------------------------------
90 -- Retain the MSG_ID attribute of the Message
91 --
92 -------------------------------------------------------------------------------------
93
94 l_jms_message_handle := l_ecx_message_handle;
95
96 -------------------------------------------------------------------------------------
97 -- Find out the length of the message
98 --
99 -------------------------------------------------------------------------------------
100
101 l_payload_length := dbms_lob.getlength(l_ecx_message.payload);
102
103 -------------------------------------------------------------------------------------
104 -- If the length of the message is more than 4000 it has to be represented
105 -- as a CLOB in the JMS message otherwise as a VARCHAR
106 --
107 -------------------------------------------------------------------------------------
108
109 IF (l_payload_length) > 4000 THEN
110
111 l_jms_message.SET_TEXT(l_ecx_message.payload);
112
113 ELSE
114
115 DBMS_LOB.READ(l_ecx_message.payload, l_payload_length, 1, l_payload_vc);
116 l_jms_message.SET_TEXT(l_payload_vc);
117
118 END IF;
119
120 ------------------------------------------------------------
121 -- ENQUEUE ON JMS OUTBOUND QUEUE
122 --
123 ------------------------------------------------------------
124
125 dbms_aq.enqueue(queue_name => g_apps_schema||'.'||g_xnb_jms_outbound_q
126 ,enqueue_options => l_jms_enqueue_options
127 ,message_properties => l_jms_message_properties
128 ,payload => l_jms_message
129 ,msgid => l_jms_message_handle);
130
131 COMMIT;
132
133 xnb_debug.log('ecx_to_jms','After Enqueue into XNB_JMS_OUTBOUND');
134
135 EXCEPTION
136
137 WHEN NO_NEW_MESSAGES THEN
138 xnb_debug.log('XNB_QUEUE_HANDLERS_PKG.ecx_to_jms_handler','No New Message in ECX_OUTBOUND');
139 l_more_messages := FALSE;
140 END;
141
142 END LOOP;
143
144 EXCEPTION
145 WHEN OTHERS THEN
146 l_error_msg := SQLERRM;
147 xnb_debug.log('XNB_QUEUE_HANDLERS_PKG.ecx_to_jms_handler',l_error_msg);
148
149 END ecx_to_jms_handler;
150
151
152 ---------------------------------------------------------------------------------------
153 /***** This is a private procedure to dequeue messages from the */
154 /* XNB_JMS_INBOUND TO ECX_INBOUND */
155 /* */
156 ---------------------------------------------------------------------------------------
157
158 PROCEDURE jms_to_ecx_handler (
159 CONTEXT IN RAW,
160 reginfo IN SYS.aq$_reg_info,
161 descr IN SYS.aq$_descriptor,
162 payload IN RAW,
163 payloadl IN NUMBER
164 )
165 AS
166
167 l_jms_dequeue_options DBMS_AQ.dequeue_options_t;
168 l_jms_message_properties DBMS_AQ.message_properties_t;
169 l_jms_message_handle RAW (16);
170 l_jms_message SYS.aq$_jms_text_message;
171 l_ecx_enqueue_options DBMS_AQ.enqueue_options_t;
172 l_ecx_message_properties DBMS_AQ.message_properties_t;
173 l_ecx_message_handle RAW (16);
174 l_ecx_message SYSTEM.ecxmsg;
175 l_error_msg VARCHAR2 (1000);
176 l_payload_length NUMBER;
177
178 NO_NEW_MESSAGES EXCEPTION;
179
180 pragma exception_init (NO_NEW_MESSAGES, -25228);
181 l_more_messages BOOLEAN ;
182
183 BEGIN
184
185 --------------------------------------------------------------------------------------
186 -- DEQUEUE FROM JMS INBOUND QUEUE
187 --
188 -------------------------------------------------------------------------------------
189 l_more_messages := TRUE;
190 l_jms_dequeue_options.wait := 1;
191 xnb_debug.log('jms_to_ecx','Begin of jms_to_ecx_handler Handler');
192
193 WHILE (l_more_messages) LOOP
194
195 BEGIN
196
197 -- l_jms_dequeue_options.msgid := descr.msg_id;
198
199 l_jms_dequeue_options.dequeue_mode := DBMS_AQ.REMOVE;
200
201
202 DBMS_AQ.DEQUEUE( queue_name => g_apps_schema||'.'||g_xnb_jms_inbound_q
203 ,dequeue_options => l_jms_dequeue_options
204 ,message_properties => l_jms_message_properties
205 ,payload => l_jms_message
206 ,msgid => l_jms_message_handle);
207 COMMIT;
208 xnb_debug.log('jms_to_ecx','After Dequeu from inbound');
209
210 --------------------------------------------------------------------------------------
211 -- TRANSFORM FROM SYS.AQ$_JMS_TEXT_MESSAGE TO SYSTEM.ECXMSG
212 -- Create ECX text message and set Headers
213 --
214 --------------------------------------------------------------------------------------
215
216 --------------------------------------------------------------------------------------
217 -- Retain the MSG_ID attribute of the Message
218 --
219 -------------------------------------------------------------------------------------
220
221 l_ecx_message_handle := l_jms_message_handle;
222
223
224 -------------------------------------------------------------------------------------
225 -- Find out the length of the message
226 --
227 -------------------------------------------------------------------------------------
228
229 l_payload_length := l_jms_message.TEXT_LEN;
230
231 xnb_debug.log('jms_to_ecx',' AFTER REtreivING Payload'||l_payload_length);
232
233 -------------------------------------------------------------------------------------
234 -- If the length of the message is more than 4000 it has to be represented
235 -- as a CLOB in the JMS message otherwise as a VARCHAR
236 --
237 -------------------------------------------------------------------------------------
238
239 IF (l_payload_length) > 4000 THEN
240
241 xnb_debug.log('jms_to_ecx','Inside If payload > 4000');
242 l_ecx_message := SYSTEM.ECXMSG( l_jms_message.GET_STRING_PROPERTY(g_ecx_message_type), --MESSAGE_TYPE
243 l_jms_message.GET_STRING_PROPERTY(g_ecx_message_standard), --MESSAGE_STAND
244 l_jms_message.GET_STRING_PROPERTY(g_ecx_transaction_type), --TRANSACTION_T
245 l_jms_message.GET_STRING_PROPERTY(g_ecx_transaction_subtype), --TRANSACTION_S
246 l_jms_message.GET_STRING_PROPERTY(g_ecx_document_number), --DOCUMENT_NUMB
247 l_jms_message.GET_STRING_PROPERTY(g_ecx_party_id), --PARTYID
248 l_jms_message.GET_STRING_PROPERTY(g_ecx_party_site_id), --PARTY_SITE_ID
249 l_jms_message.GET_STRING_PROPERTY(g_ecx_party_type), --PARTY_TYPE
250 l_jms_message.GET_STRING_PROPERTY(g_ecx_protocol_type), --PROTOCOL_TYPE
251 l_jms_message.GET_STRING_PROPERTY(g_ecx_protocol_address), --PROTOCOL_ADDR
252 l_jms_message.GET_STRING_PROPERTY(g_ecx_username), --USERNAME
253 l_jms_message.GET_STRING_PROPERTY(g_ecx_password), --PASSWORD
254 l_jms_message.TEXT_LOB, --PAYLOAD is an
255 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute1), --ATTRIBUTE1
256 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute2), --ATTRIBUTE2
257 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute3), --ATTRIBUTE3
258 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute4), --ATTRIBUTE4
259 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute5)); --ATTRIBUTE5
260
261
262 ELSE
263
264 xnb_debug.log('jms_to_ecx','Inside Else');
265
266
267 l_ecx_message := SYSTEM.ECXMSG( l_jms_message.GET_STRING_PROPERTY(g_ecx_message_type), --MESSAGE_TYPE
268 l_jms_message.GET_STRING_PROPERTY(g_ecx_message_standard), --MESSAGE_STAND
269 l_jms_message.GET_STRING_PROPERTY(g_ecx_transaction_type), --TRANSACTION_T
270 l_jms_message.GET_STRING_PROPERTY(g_ecx_transaction_subtype), --TRANSACTION_S
271 l_jms_message.GET_STRING_PROPERTY(g_ecx_document_number), --DOCUMENT_NUMB
272 l_jms_message.GET_STRING_PROPERTY(g_ecx_party_id), --PARTYID
273 l_jms_message.GET_STRING_PROPERTY(g_ecx_party_site_id), --PARTY_SITE_ID
274 l_jms_message.GET_STRING_PROPERTY(g_ecx_party_type), --PARTY_TYPE
275 l_jms_message.GET_STRING_PROPERTY(g_ecx_protocol_type), --PROTOCOL_TYPE
276 l_jms_message.GET_STRING_PROPERTY(g_ecx_protocol_address), --PROTOCOL_ADDR
277 l_jms_message.GET_STRING_PROPERTY(g_ecx_username), --USERNAME
278 l_jms_message.GET_STRING_PROPERTY(g_ecx_password), --PASSWORD
279 l_jms_message.TEXT_VC, --PAYLOAD is an
280 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute1), --ATTRIBUTE1
281 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute2), --ATTRIBUTE2
282 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute3), --ATTRIBUTE3
283 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute4), --ATTRIBUTE4
284 l_jms_message.GET_STRING_PROPERTY(g_ecx_attribute5)); --ATTRIBUTE5
285
286
287 END IF;
288
289 xnb_debug.log('jms_to_ecx','Before Enqueue');
290 ------------------------------------------------------------
291 -- ENQUEUE ON ECX INBOUND QUEUE
292 --
293 ------------------------------------------------------------
294
295 dbms_aq.enqueue(queue_name => g_apps_schema||'.'||g_ecx_inbound_q
296 ,enqueue_options => l_ecx_enqueue_options
297 ,message_properties => l_ecx_message_properties
298 ,payload => l_ecx_message
299 ,msgid => l_ecx_message_handle);
300
301 xnb_debug.log('jms_to_ecx','After Enqueue');
302
303 COMMIT;
304
305 EXCEPTION
306
307 WHEN NO_NEW_MESSAGES THEN
308 xnb_debug.log('XNB_QUEUE_HANDLERS_PKG.jms_to_ecx_handler','No New Message in XNB_JMS_INBOUND');
309 l_more_messages := FALSE;
310 END;
311
312 END LOOP;
313
314 EXCEPTION
315 WHEN OTHERS THEN
316 l_error_msg := SQLERRM;
317 xnb_debug.log('XNB_QUEUE_HANDLERS_PKG.jms_to_ecx_handler',l_error_msg);
318
319 END jms_to_ecx_handler;
320
321 END XNB_QUEUE_HANDLERS_PKG;