PHP and Advanced Queuing
I am a newbie with AQ. We use PHP for our middle tier. Database is Oracle 9i. What we would like to do is to let our middle tier know of some data changes. Has anyone implemented this in PHP? For enqueuing, do I use HTTP notification? How do I dequeue that message using PHP? Please help.
I am afraid Oracle AQ interfaces has not been directly implemented in PHP. Oracle AQ provides lots of programmatic interfaces: PL/SQL, OCI/OCCI, Java Message Service and Servlet, and VB interfaces. The most desirable way is to wrap the OCIAQ* family functions in a PHP extension.
Alternatively, you can use AQ's SOAP interfaces in PHP, or turn to Java for this part:)
Similar Messages
-
Nested Tables and Advanced Queues- Please Help.
How do i work with NestedTable type and Advanced Queue.
I have done the following
I have Oracle 8.1.7 enterprise edition.
create type myType as TABLE OF varchar(32);
create type myObject as OBJECT (
id int,
myt myType);
DECLARE
BEGIN
dbms_aqadm.create_queue_table(
queue_table => 'my_queue_table',
multiple_consumers => TRUE,
queue_payload_type => 'myObject',
compatible => '8.1.3'
END;
The Nested Table and Object are created successfully.
but the queue is not created.
I get the following message.
DECLARE
ERROR at line 1:
ORA-22913: must specify table name for nested table column or
attribute
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 2012
ORA-06512: at "SYS.DBMS_AQADM", line 55
ORA-06512: at line 3
I know how to specify the nested table storage clause for
create table statement, but there is no provision for
it in the create_queue_table procedure.
Any help will be greately appriciated.
i have already created and tested aqs with simple data types,
also i have created simple tables with nested table type
elements.
but the combo of Nested tables and AQ is not working.
thanks in advance.Hi Francois. Thank you very much for your reply, but it seems that i still get errors. So let me tell what i have done.
As you suggested me: i have done a block based on a sub-query for the nested-table:
'select courses from department where name= :department.name'.
In the master block(department) i have the when-new-record-instance trigger:
Declare
LC$Req varchar2(256);
Begin
LC$Req := '(select ns.courses from table
( select courses from department where name = ''' || :DEPARTMENT.name || ''' ) ns )';
Go_block('block11');
Clear_Block ;
Set_Block_Property( 'block11', QUERY_DATA_SOURCE_NAME, LC$Req ) ;
Execute_query ;
End ;
Now the errors i receive, this time in the runtime mode are:
- FRM-41380: Cannot set the blocks query data source
-FRM-41003: This function cannot be performed here.
Since it seems that you know how to work with the nested table i would really appreaciate your help. I am new in the nested table and if you could give an ex with my tables it would be great.
Thank you in advance. -
JMS and advanced Queues - how to dequeue?
Hi,
I've recently built a MDB that listens to an Oracle Queue (9.0.4) via JMS . Everything works fine, the only thing is that the rows that have been enqueued are not deleted (dequeued) from the queue table once the MDB has picked them up.
This only causes a problem when the database re-starts as the MDB picks up all the messages again. And also is a problem as the table will keep growing with all the messages.
Can you tell me what I should do to dequeue the messages? Should this be a trigger of some sort or is there something I can do from within the bean to dequeue the message once it has been consumed? Or is there another way of handling this?
Appreciate your help.
Cheers.Hello,
Great! I need that solution :)
Can you point out how you connected the MDB to the AQ? What software or adapter did you use?
I have the vice versa problem.
The MDB always deletes the message in the queue table, but a rollback never works.
Did you enable transactions by the following settings in ejb-jar.xml:
<container-transaction >
<method >
<ejb-name>MyMdb</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
I use BEA to deploy the MDB and Dips xa-compliant StartupClass package to register the AQ Connection Factory to in the JNDI tree.
Regards
Thomas -
Using JMS and Advanced Queuing within forms.
I am wondering if anyone can forsee problems with embedding a javabean inside a form that:
listens to an Oracle queue.
Do you think there would be some type of problem with a connection factory trying to create a connection and a session from within forms using JDBC?
Thanks in advanceSandu,you are right.
A Forms timer with status polling is a good and stabil solution .
But we are connected on a database and a polling of a database event - Job is finished, or a reply received in a Queue -
is always a network traffic and overhead when we use polling times < 1 min ..
It would be also a good solution and interesting feature of Forms that the database event sends a message to the waiting client (process ?) .. -
Request for Comments and Experiences with Streams Advanced Queuing
Hi,
I would like to get some feedback about what your experiences with Streams Advanced Queuing. What do you like about it? What don't you like? How do you use it? What features would you love to see in it? Please post to the forums. Thanks!I love the new homeless Instant Client! I wish we had it years ago. Some comments:
1) The MS ODBC administrator GPF's (blows up) when trying to configure a new data source using the new Oracle IC drivers. Have to hand-edit the registry.
2) I heartily agree with the request that the new client install without requiring the normal Oracle installer. It's just too bloated for easy deployment. I'd rather hand install the files than to have to use that. Also, .zip not .jar please.
3) Need better documentation on the connection string options. It took me 3 weeks to figure out that what used to be scott/tiger@mydb is now scott/[email protected]:1524/mydb.xxx.yyy (it's looking for the GLOBAL_NAME, not the SID and TNSPING won't show you that! Doh!)
4) Please let us specify a range of ports (e.g. :1521-1524) and let it figure out where the SID is on that machine. We move ours around and don't want to update hundreds of clients with hardcoded command lines.
5) Maximum backward compatibility, please! It's not easy moving all those Oracle apps to 8.1.7.4+ databases, yet, but my old OCI client programs should not have to care. I don't want to have 2 SQL*net driver stacks on my PC's.
Thanks -- I'll be watching for new features. -
Advanced queues are waiting in ready status and do not process
Advanced queues are waiting in ready status and do not process.
There are no Db locks.
DB 11.2.0.2.0Hi,
With this information it is not possible to get appropriate answer in the forum.
By the way you checked alert log file.
Check the below link also:
http://www.cs.umbc.edu/portal/help/oracle8/server.815/a68005/03_adq2f.htm
Best regards,
Rafi.
http://rafioracledba.blogspot.com/ -
Weblogic JMS bridge between Weblogic and oracle Advanced Queue
Hi,
We are facing some issues when we are trying to integrate with Oracle AQ JMS through Weblogic.
We have configured a Foreign AQ server which points to the oracle Advanced Queue and we are trying to create a Weblogic JMS bridge between AQ and weblogic. The bridge works perfectly if create the connection factories and bridge destinations with NonTX mode. The issue is with XA mode. Also we have deployed the Resource adaper for XAResource to use XA transactions.
No help is available for the exception on google too :)
Following is the exception we are getting.
<An error occurred in bridge "aqjmsbridge" during the transfer of messages (javax.resource.ResourceException: Failed to setup the Resource Adapter Connection for enlistment in the transaction, Pool = 'eis/jms/WLSConnectionFactoryJNDIXA', javax.transaction.SystemException: start() failed on resource 'eis/jms/WLSConnectionFactoryJNDIXA': XA_OK
javax.transaction.xa.XAException: method start should not be called on weblogic.transaction.internal.IgnoreXAResource
at weblogic.jms.foreign.IgnoreXAResourceImpl.start(ForeignAQIntegration.java:260)
at weblogic.connector.security.layer.AdapterLayer.start(AdapterLayer.java:513)
at weblogic.connector.transaction.outbound.XAWrapper.start(XAWrapper.java:466)
at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1184)
at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1117)
at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:275)
at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:516)
at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:443)
at weblogic.connector.transaction.outbound.XATxConnectionHandler.enListResource(XATxConnectionHandler.java:118)
at weblogic.connector.outbound.ConnectionWrapper.invoke(ConnectionWrapper.java:218)
at $Proxy59.receive(Unknown Source)
at weblogic.jms.bridge.internal.MessagingBridge.processMessages(MessagingBridge.java:1427)
at weblogic.jms.bridge.internal.MessagingBridge.beginForwarding(MessagingBridge.java:1002)
at weblogic.jms.bridge.internal.MessagingBridge.run(MessagingBridge.java:1079)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
.).>
Will appriciate any help for the above.
Thanks and Regards,
NavinMaybe this if of any help:
- Re: Help with creating AQ JMS
or
- Re: AQ Weblogic integration - JMS-107: Operation not allowed on Connection -
Error when connect to Advanced Queuing Oracle
Dear sir,
I'm using intellij IDE write one a class java to connect Advanced Queuing, my code follow :
queueConnectionFactory = AQjmsFactory.getQueueConnectionFactory("host", "sid", 1521, "thin");
queueConnection = queueConnectionFactory.createQueueConnection("usernamer", "password");
but program have error : "Exception in thread "main" oracle.jms.AQjmsException: ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found".
I try connect this schema by "sql developer", i receive same error. i change file sqldeveloper.conf, put line - AddVMOption -Duser.timezone="+07:00" then sql developer work fine.
I download tzupdater-1.3.40-2011h and run "java -jar tzupdater.jar -u" and "java -jar tzupdater.jar -f" but app not run.
can you have me. i need complete this app.Post the stack trace
-
'unable to connect' and 'localhost' and index.php and dreamweaverCC
Hi.
I am developing a Web Site and index.php is my point of entry.
Document Root Library/WebServer/Documents
so my path is: Library/WebServer/Documents/dwwdSite
httpd.conf file is modified to add index.php and have it listed first.
<IfModule dir_module>
DirectoryIndex index.php index.html
<IfModule>
Troubleshooting:
I was using Netbeans IDE and when I ran index.php it opened in the browser.
When I launched 'any' of my index.php files from Netbeans IDE, they opened correctly in the brower
I am now using DreamweaverCC and when I run the index.php Error Message ' Unable to Connect'.
For the last 2 days I have been working on this and I am completely stuck.
This morning I thought of another way to test the 'unable to connect' error.
I decided to copy this same file into Netbeans IDE and I NOW get the same Error Message ' Unable to Connect'
when running index.php from Netbeans.
Somehow, my settings are not correctly configured anymore.
Here are my screenshots from Dreamweaver > manage sites.
I believe that this is a rather simple fix that I am somehow not seeing.
Maybe some can spot some mistake.
I appreciate your help and explanation.Site window settings.
Site Name: dwwdSite
Local site folder: /Library/WebServer/Documents/dwwdSite
Server window settings.
Server Name: testing Server
Address: Macintosh HD/Library/WebServer/Documents/dwwdSite
Connect using: Local/network
Testing: yes (checked)
Server folder: /Library/WebServer/Documents/dwwdSite
(I also tried this: Server folder: /Library/WebServer/Documents)
Web URL: http://www.localhost/dwwdSite
Server Advanced tab: (within server window settings)
Testing server: PHP MySQL
Advanced Settings window.
Local info: Web URL: http://www.localhost/dwwdSite
Enable cache: yes (checked) -
Messages stuck in QRFC inbound and outbound queues by system error
Hi Experts,
We faced a big problem in our PI server which stopped all the traffic in the iDoc to File interface. Both the QRFC queues (inbound - SMQ1 as outbound - SMQ2) where stuck by a system error.
In IDX5 of PI we saw two inbound iDocs on exact the same date/time of creation. Both iDocs are displayed in SXMB_MONI with the status "Canceled - Since Already Processed". The output files of both iDocs are generetad on the outbound side.
The output files are genereted with a date/time stamp in filename exactly as: "pi_20101106-221812-437.dat" and "pi_20101106-221812-438.dat". So it seems that both processes where running on exact the same time.
When looking into the system error we see the following details:
com.sap.engine.interfaces.messaging.api.exception.DuplicateMessageException: Message Id 00505697-181b-1ddf-babd-68f1ac208528(INBOUND) already exists in duplicate check table: com.sap.sql.DuplicateKeyException: [200]: Duplicate key
This caused that the QRFC queues where both stuck in inbound as outbound with a SYSERROR, so PI stopped and the queues should be reactivated manually.
Does anybody have some idea of the real cause of this error. We really want to prevent such situation in the future.
Thanks in advance!
Best regards,
JoostHi Joost,
Are you using an adpater module to avoid the same file name processed by the receiver channel ???
If this is the case change the filename and retest flow otherwise remove the module (ex: localejbs/AF_Modules/MessageTransformBean - Local Enterprise Bean) from the channel check it whether the file getting processed or not...
OR...you have an incorrect module configuration in the receiver channel.
Do not remove the standard SAP module and make sure that you add additional modules before it.
cheers,
Ram. -
Java advanced queue MDB class usage
Hello,
Loads of questions about JMS AQ and MDB.
I have not found anything that tells you how to use the oracle.jms classes within a MDB's directly. Do I just cast the message to a AQMessage and retrieve from there?
I have found plenty of documentation about using the oracle.jms classes. Ive found a lot of information about using advanced queues and enqueing and dequeuing to them in Java. I have found information about MDBs and how to use them as a regular service ie: using TextMessage
Is there a simple document describing MDB oracle AQ classes? I have looked through umpteen million Oracle documents to no avail.
Is there an interface for MDB in the Oracle AQ classes which has an onMessage() method which I can implement taking in oracle.jms classes?
When processing a message that I would like to put on another queue do I call the AQ classes to enqueue a message and set its attributes that way or do I use the JMS classes and their methods to do that?http://download-west.oracle.com/docs/cd/A97688_12/generic.903/a97677/mdb.htm#1013265 should get me most of the way there.
-
Propagation between queues in Oracle Advanced Queuing
We would like to connect two queues that reside in different database schemas/instances.
We try to use the propagation feature of Oracle to achieve this.
The queue-type is the same for both queues.
Enqueuing is done with a recipient list in order to set multiple local subscribers for the messages that are put onto the queue.
We would like to propagate between queues without changing the applications that write to originating queue and the other applications that read from the target queue.
During our research we only found ways where we need to change the application that writes onto the queue, which is not acceptable for us. Also the list of subscribers needs to be different based on the message.
Therefore I have the following question:
- is there a way to set up propagation between queues in a way where we don't need to modify the sending application?
- if not, is there a different way to connect two queues via a subscriber/consumer?Oracle8i for Linux does have AQ, although I haven't evaluated it
yet. If you're still having trouble with the install, make sure
you get the patch. A quicker and easier way to get Oracle8i up
cheaply for evaluation is to download the NT version. I'm
evaluating Oracle8i for both Linux and NT and the NT version is
more stable.
I would really appreciate hearing about your experiences with AQ
on Oracle8 (8.0.4.3). I have several projects that we have been
considering using AQ with. Please send me an email and tell me
what problems / work-arounds you found.
Christian Schroeder (guest) wrote:
: Hello,
: I still haven't managed to install 8i completely
: (files with zero-length, wrong permissions, wrong JVM, ...),
: anyway... -))
: We are using Oracle Advanced Queuing under 8.0.4.3 on AIX in
: a project at my company and I wondered if AQ is in 8i for
Linux?
: I really would like to evaluate it at home, since the AIX
: AQ version has some bugs and restrictions which I really need
to
: get around.
: My idea is to get 8i for AIX, but I wouldn't buy it if the
: queuing is still unstable.
: The 8.0.4 documentation states that one will get AQ in the
: Enterprise Edition with message-type 'RAW' and the Objects
Option
: will add full functionality if also purchased. I didn't find
: any comments on AQ in the installation guide.
: Regards,
: Christian
null -
I have recently just started using php and understand the
concept behind server side scripting. I was arguing with a co
worker about which would be better:
If I were to use php to run a query on some data in MySql and
pass the data back to flex...now if I had mutliple queries to run
would it be more efficient to run 1 large query on the data and
then store that data in an array, lets say, and search through it
locally.
OR
Call multiple times to a php script that has different
queries to the database?
Is there a right or wrong answer?
Thanks in advance!Thanks for the answer I was thinking the same thing depending
on amount of data and such.
I am not a database guru but I do have a small background in
MySQL and the problem is I want to break the data up into tables as
much as I can(I like more tables with less data then less tables
and more data)...then I would prefer calling multiple queries.
While my co-worker wants 1 large table and run 1 query...which I
believe is more expensive. The data is quiet large in my opinion,
and how 3000-10000 table entries relate to size I am not sure.
I suppose I should mention I am trying to set up an office
intranet using Flex and this is why this topic has come up.
But if there is no definitive answer we will have to agree to
disagree...=) -
Oracle Advanced Queuing - Propagation problem - 11g
Hi,
I have a problem when propagation messages between queues. When the message is propagated, it stays on the source queue with READY state.
I have created two queues on 11g with a propagation rule that any message from queue A are sent to queue B. My problem is that the message from the source queue stays in the source queue even after propagation, which isn't what I was expecting. The problem doesn't occur if the queues are on a different database. This problem only happens if the queues are on the same database.
the script I use is this:
For USERB (which has the destination queue)
create type EVENT_MESSAGE as object (
eventsource VARCHAR2(30),
eventname VARCHAR2(255),
eventid NUMBER(19,0),
message CLOB
DECLARE
an_agent sys.aq$_agent;
BEGIN
-- create the publish/subscribe queue table
dbms_aqadm.create_queue_table(
queue_table => 'DESTINATION_QUEUE_TABLE',
queue_payload_type=>'EVENT_MESSAGE',
sort_list => 'ENQ_TIME',
message_grouping => DBMS_AQADM.NONE,
multiple_consumers=>true
-- create the queue
dbms_aqadm.create_queue(
queue_name => 'DESTINATION',
queue_table => 'DESTINATION_QUEUE_TABLE',
queue_type => DBMS_AQADM.NORMAL_QUEUE,
max_retries => 5
dbms_aqadm.create_aq_agent(agent_name =>'DEQUEUE_AGENT');
an_agent := sys.aq$_agent('DEQUEUE_AGENT', null, null);
dbms_aqadm.enable_db_access(
agent_name => 'DEQUEUE_AGENT',
db_username => 'USERB'
dbms_aqadm.add_subscriber(
queue_name => 'DESTINATION',
subscriber => an_agent,
queue_to_queue => FALSE,
delivery_mode => DBMS_AQADM.PERSISTENT
-- start the queues
dbms_aqadm.start_queue('DESTINATION');
END;
For USERA
create type EVENT_MESSAGE as object (
eventsource VARCHAR2(30),
eventname VARCHAR2(255),
eventid NUMBER(19,0),
message CLOB
BEGIN
-- create the publish/subscribe queue table
dbms_aqadm.create_queue_table(
queue_table => 'SOURCE_QUEUE_TABLE',
queue_payload_type=>'EVENT_MESSAGE',
sort_list => 'ENQ_TIME',
message_grouping => DBMS_AQADM.NONE,
multiple_consumers=>true
-- create the queue
dbms_aqadm.create_queue(
queue_name => 'SOURCE',
queue_table => 'SOURCE_QUEUE_TABLE',
queue_type => DBMS_AQADM.NORMAL_QUEUE,
max_retries => 5
-- start the queues
dbms_aqadm.start_queue('SOURCE');
-- create the propagation
dbms_aqadm.add_subscriber(queue_name => 'SOURCE',
subscriber => sys.aq$_agent('DEQUEUE_AGENT','USERB.DESTINATION',null),
queue_to_queue => true);
dbms_aqadm.schedule_propagation(queue_name => 'SOURCE',
start_time => sysdate,
latency => 25,
destination_queue => 'USERB.DESTINATION');
END;
When I enqueue a message to the source on USERA with this:
declare
rc binary_integer;
nq_opt dbms_aq.enqueue_options_t;
nq_pro dbms_aq.message_properties_t;
datas EVENT_MESSAGE;
msgid raw(16);
begin
nq_pro.expiration := dbms_aq.never;
nq_pro.sender_id := sys.aq$_agent('ENQUEUE_AGENT', null, null);
datas := AGEAS_EVENT_MESSAGE('message','eventname',1,null);
dbms_aq.enqueue('SOURCE',nq_opt,nq_pro,datas,msgid);
end;
The message is propagated to the destination queue, no problem, but the message state on the source queue is kept as ready. I would have expected it to be marked as processed and disappear from the queue table.
When I look at the AQ$_SOURCE_QUEUE_TABLE_S the I see these records:
QUEUE_NAME NAME ADDRESS PROTOCOL SUBSCRIBER TYPE
SOURCE (null) "USERB"."DESTINATION"@AQ$_LOCAL 0 1736
SOURCE DEQUEUE_AGENT "USERB"."DESTINATION" 0 577
Can anyone help?I was talking about following oracle documentations:
Oracle Database 11g: Advanced Queuing (Technical Whitepaper)
Streams Advanced Queuing: Best Practices (Technical Whitepaper)
Oracle Streams Advanced Queuing and Real Application Clusters: Scalability and Performance Guidelines (Technical Whitepaper)
They are available at.. http://www.oracle.com/technetwork/database/features/data-integration/default-159085.html -
How to automate checking status of Replication agent and Replication queue in CQ5
As part of monitoring the status of replication agents and replication queue, is it possible to automate the checking process?
We can check them from GUI, but from a monitoring perspective we are loking for a mechanism where the status can be checked continuously and we are alerted whenever there is some issue.
1. Check status of replication agent (enabled/disabled)
2. Check status of replication queue (if the queue is blocked)
Thanks in advance
nkraoyou can pull the queue from the page the same way the UI gets the list
in the table:
curl -u admin:admin
"http://localhost:4502/etc/replication/agents.author/publish/jcr:content.queue.json?agent=p ublish"
and then use a shell library like ticktick.sh to parse the json
response. A sample of how to get the bundles loaded and installed from
CQ using the ticktick library can be found here
https://github.com/kristopolous/TickTick
http://ruben42.wordpress.com/2012/04/24/using-ticktick-sh-to-parse-json-responses-from-ado be-cq5-5/
Maybe you are looking for
-
Help: Export format from FCP for DVD Studio
What settings do I export my 3 minute film so I can use DVD Studio Pro? (What size do I want if I want my film to be wide screen just like a professional DVD movie you buy at your nearest store?) Thank You!
-
Im trying to uninstall itunes and it says im not an administrator and it wont let me
Im trying to uninstall my itunes so that I can reinstall a newer version. When I go to uninstal it wont let me it says I am not logged in as an adminstrator???
-
How do i handle in SAX parser & for example if my xml file look like this <book> <title>xyz&abc</title> </book> How would i get xyy&abc
-
Hosting Option Business Catalyst | Account Size
Hi everyone, I was wondering where I can find information about the "size" of my Business Catalyst Account? How much saving space, MB or GB do I have and stuff like that. Is this anywhere to find in my account (when I am online which the admin)...? B
-
JAR file "com.sap.tc.logging"
If any one has this JAR file -- "com.sap.tc.logging.Category" Please mail it to me-- [email protected] Regards pranay