[Home] [Help]
PACKAGE BODY: APPS.XDP_ADAPTER_CORE_PIPE
Source
1 PACKAGE BODY XDP_ADAPTER_CORE_PIPE AS
2 /* $Header: XDPACOPB.pls 120.2 2005/07/07 02:23:52 appldev ship $ */
3
4
5 pv_ChannelTruncLength number := 4;
6 pv_ChannelLength number := 30;
7
8 Procedure CleanupPipe(p_ChannelName in varchar2,
9 p_CleanReturn in varchar2 default 'Y')
10 is
11 begin
12
13 DBMS_PIPE.PURGE(p_ChannelName);
14 if p_CleanReturn = 'Y' then
15 DBMS_PIPE.PURGE(GetReturnChannelName(p_ChannelName => CleanupPipe.p_ChannelName));
16 end if;
17
18 end CleanupPipe;
19
20 Procedure SendPipedMessage(p_ChannelName in varchar2,
21 p_Message in varchar2)
22 is
23 ReturnCode number := 0;
24 begin
25
26 -- dbms_output.put_line(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS'));
27 -- dbms_output.put_line('Sending ' || p_Message || ' on ' || p_ChannelName);
28 DBMS_PIPE.PACK_MESSAGE(SendPipedMessage.p_Message);
29 DBMS_PIPE.PACK_MESSAGE(SendPipedMessage.p_ChannelName);
30 ReturnCode := DBMS_PIPE.SEND_MESSAGE
31 (SendPipedMessage.p_ChannelName, pv_AckTimeout);
32
33 -- dbms_output.put_line('After Sending... Return Code: ' || ReturnCode);
34 end SendPipedMessage;
35
36
37 Procedure ReceivePipedMessage( p_ChannelName in varchar2,
38 p_Timeout in number,
39 p_ErrorCode OUT NOCOPY number,
40 p_Message OUT NOCOPY varchar2)
41 is
42 ActualTimeout number;
43 begin
44
45 if p_Timeout is null then
46 ActualTimeout := pv_AckTimeout;
47 else
48 ActualTimeout := p_Timeout;
49 end if;
50
51
52 -- dbms_output.put_line(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS'));
53 -- dbms_output.put_line('DBMS_PIPE.RECEIVE. Channel: ' || p_ChannelName || ' Timeout: ' || ActualTimeout);
54 p_ErrorCode := DBMS_PIPE.RECEIVE_MESSAGE
55 (ReceivePipedMessage.p_ChannelName, ActualTimeout);
56
57 -- dbms_output.put_line('After read..: ' || to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS'));
58 -- dbms_output.put_line('Error Code: ' || p_ErrorCode);
59 if p_ErrorCode = 0 then
60 if DBMS_PIPE.NEXT_ITEM_TYPE <> 0 then
61 -- dbms_output.put_line('Unpacking...');
62 DBMS_PIPE.UNPACK_MESSAGE(p_Message);
63 -- dbms_output.put_line('AFTER Unpacking...' || substr(p_Message,1,200));
64 else
65 p_Message := null;
66 end if;
67 end if;
68
69 -- exception
70 -- when others then
71 -- dbms_output.put_line('PIPE EXCEPTION: ' || SQLCODE);
72 -- dbms_output.put_line('PIPE EXCEPTION: ' || substr(sqlerrm,1,200));
73 -- dbms_output.put_line('PIPE EXCEPTION: ' || substr(sqlerrm,201,200));
74 end ReceivePipedMessage;
75
76
77 Function GetReturnChannelName(p_ChannelName in varchar2) return varchar2
78 is
79 ReturnChannelName varchar2(40);
80 begin
81
82 ReturnChannelName := GetReturnChannelName.p_ChannelName || '_R';
83
84 return (ReturnChannelName);
85
86 end GetReturnChannelName;
87
88
89 function ConstructChannelName (p_ChannelType in varchar2,
90 p_ChannelName in varchar2) return varchar2
91 is
92
93 begin
94
95 if p_ChannelType = 'CONTROL' then
96 return ( p_ChannelName || '_C');
97 elsif p_ChannelType = 'APPL' then
98 return ( p_ChannelName || '_A');
99 else
100 return (p_ChannelName);
101 end if;
102
103 end ConstructChannelName;
104
105
106 function GetUniqueChannelName (p_Name in varchar2) return varchar2
107 is
108 l_ChannelName varchar2(30);
109 l_Temp varchar2(80);
110 l_Seq number;
111 l_SeqLen number;
112 l_TruncLen number;
113 begin
114 l_temp := RTRIM(p_Name,' ');
115 l_temp := LTRIM(l_temp);
116
117
118 l_temp := REPLACE(l_Temp, ' ', '_');
119
120 SELECT XDP_CHANNEL_S.NEXTVAL into l_Seq
121 FROM dual;
122
123 l_ChannelName := to_char(l_Seq);
124
125 l_SeqLen := LENGTH(l_ChannelName);
126
127 l_TruncLen := pv_ChannelLength - (l_SeqLen + pv_ChannelTruncLength);
128
129 l_ChannelName := SUBSTR(l_Temp, 1, l_TruncLen) || '_' || l_ChannelName;
130
131 RETURN l_ChannelName;
132
133 end GetUniqueChannelName;
134
135 begin
136
137 pv_AckTimeout := XDP_ADAPTER_CORE_DB.GetAckTimeOut;
138
139 end XDP_ADAPTER_CORE_PIPE;