DBA Data[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;