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 advance

    Sandu,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.0

    Hi,
    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,
    Navin

    Maybe 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,
    Joost

    Hi 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

  • PhP and XML

    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
    nkrao

    you 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