AQ propagation over internet [message #126447] |
Mon, 04 July 2005 11:03 |
jeffhu
Messages: 1 Registered: July 2005
|
Junior Member |
|
|
Hi everyone,
I'm trying to create a simple Oracle-to-Oracle data replication service over the Internet using AQ. Right now I'm developing various pieces on one Oracle instance (9.2.0.5.0 Enterprise) residing on our intranet. The AQXmlServlet is running on a different machine (Tomcat 4.1 on XP Pro sp2), also on intranet.
The sender and the receiver are in their respective schema -- fmis_aq0 and fmis_aq1. The message payload is a custom type containing two numbers, two strings and two Spatial type objects (sdo_geometry). I'll post the scripts if someone is interested.
When I test the setup over an ordinary dblink, it works as expected. i.e. the data is moved from the source queue to the destination queue and triggers a PL/SQL procedure which saves the data in the receiving table.
However, when I try to use an HTTP-based dblink, I always get errors complaining about premature end of message in the response. more specifically the error message looks like this:
ORA-29266: end-of-body reached
ORA-06512: at "SYS.DBMS_PRVTAQIP", line 2750
ORA-06512: at line 1
Upon closer inspection I found that the source queque sends something like this to the servlet:
<?xml version="1.0"?>
<Envelope xmlns="http://ns.oracle.com/AQ/schemas/envelope">
<Body>
<AQXmlPush xmlns="http://ns.oracle.com/AQ/schemas/access">
<push_options>
<destination>FMIS_AQ1.FMIS_REQ_IN_QUEUE</destination>
<sequence_number>293</sequence_number>
<database_link>LAOS92.LULEA.LM.SE</database_link>
<source_qid>31290</source_qid>
</push_options>
<message_set>
<message>
<message_header>
<priority>1</priority>
<sender_id>
<address>
FMIS_AQ0.FMIS_REQ_OUT_QUEUE
</address>
<protocol>0</protocol>
</sender_id>
<recipient_list>
<recipient>
<address>
FMIS_AQ1.FMIS_REQ_IN_QUEUE
</address>
<protocol>0</protocol>
</recipient>
</recipient_list>
</message_header>
<message_payload>
<REQUEST_MSG_TYPE>
<MSG_ID>0</MSG_ID>
<OPERATION>test</OPERATION>
<OBJECT_ID>12</OBJECT_ID>
<LABEL_TEXT>test label</LABEL_TEXT>
</REQUEST_MSG_TYPE>
</message_payload>
</message>
</message_set>
</AQXmlPush>
</Body>
</Envelope>
(Note that the two Spatial objects are set to null for testing)
And the destination queue returns an empty response. In addition, the beforeAQOperation gets called but the afterAQOperation does not.
After that the source queue sends an AQXmlRollback which triggers both beforeAQOperation and afterAQOperation.
I've searched through the Oracle documents, AskTom and of course this forum and found no reference to AQXmlPush. If someone knows about this problem or has a working example, please respond.
Many thanks in advance.
Jeffrey
|
|
|
AQ propagation over internet => I have a question [message #159794 is a reply to message #126447] |
Tue, 21 February 2006 09:46 |
nallan_hara
Messages: 2 Registered: February 2006 Location: India
|
Junior Member |
|
|
Jeffrey,
I do not have an answer to the question you posted, but have a question for which you might have an asnwer.
Please let me know if you could.
You said you had setup http access. Did you have to write a separate servlet that extended the AQXMLServlet and had its own init, service and destroy methods? Or did just deploying the AQXMLServlet help?
Thanks,
Nallan
|
|
|
|