Seeking MVC Example

Hi
Would anyone be so kind to share his/her experience
on how to implement the MVC architecture ?
I'm new to this.
I like to know how (code/implementation wise) from a servlet,
it instantiates a bean, and the bean performs some action,
and how the same servlet uses a RequestDispatcher object
to ask JSP to display contents from that bean.
Say client sends login and password infor (in html form) to
the servlet. And there's a login bean that needs to authenticate
the user with a database. If the login is valid, a user bean
is created. And then the jsp must display the beans contents
to the user.
Any help is FULLY appreciated.

Gum,
the article was focusing on something else,
not MVC 2Yes, but it used the MVC pattern as a basis for its example, and discussed a relatively important side effect that can result when MVC is applied to Java. I felt it was good supplimental reading because it laid out a few variations of the same MVC example for examination. But I enjoyed the link from nataliaV too, thanks nataliaV ;)

Similar Messages

  • MVC Example

    Hi,
    Could anyone refer me to a VERY GOOD example of a MVC application with database transaction?
    I am rather confused when to use a servlet or a jsp page. Also were to put the database transactions. I have been told that always goes into the javabeans but for some applications this is not always the best solution.
    PS : I use a pool management system for my database transaction so I need to be able to share this object everywhere in my application.
    Thanks

    Yes!
    Client calls servlet
    servlet calls Delegate Methods which may be desided by XML Object.
    Delegate(Use case specific Client Business logic can put here) calls beans
    bean does Persistance (database) logic
    Delegate forwards result to servlet
    servlet forwards results to JSP
    JSP displays results to client
    servlet -> controller
    (Delegate+bean) -> model
    JSP -> view (Only Presentation logic)

  • Seeking simple example pl/sql to create text file from table data

    hello,
    I am hoping someone can provide very simple example of creating a file on my local harddrive using a pl/sql program. The basic steps are as follows:
    First, I store some text in a varchar2 variable like this:
    1. select sometext into otextvar from mytable where recordid = 1;
    Second, I want this text to become a file in my data directory:
    2. c:\data\sometext.txt
    The second step is where I need help.
    Any suggestions are greatly appreciated.

    Use this function
    It will create for you a file in your /home/oracle directory with sysdate name and will insert all table names in it
    CREATE OR REPLACE PROCEDURE my_proc AS
    CURSOR cursor1 IS
    SELECT table_name from all_tables;
    CURSOR cursor2 IS
    SELECT sysdate from dual;
    rec1 cursor1%ROWTYPE;
    rec2 cursor2%ROWTYPE;
    created_file_name VARCHAR2(100);
    file_name utl_file.file_type;
    BEGIN
    OPEN cursor2;
    LOOP
    FETCH cursor2 INTO rec2;
    EXIT WHEN cursor2%NOTFOUND;
    created_file_name:=rec2.sysdate;
    file_name := utl_file.fopen('/home/oracle', created_file_name,'W');
    OPEN cursor1;
    LOOP
    FETCH cursor1 INTO rec1;
    EXIT WHEN cursor1%NOTFOUND;
    utl_file.putf(file_name, '%s\n',rec1.TABLE_NAME);
    END LOOP;
    utl_file.fclose(file_name);
    END LOOP;
    END my_proc;
    SQL>exec my_proc;

  • Hash function - seeking for example

    Can some one give me an example of Hash function in flex. I wont to turn a string to hash code and then test if other string is giving me same hash code or in other words: I wont to set a password as part of my flex app.
    This is what I found http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/mx/utils/SHA256.ht ml on the help pages.
    I hope you be able to help me.

    var b:ByteArray = new ByteArray();
    b.writeMultiByte(data.toString(), "UTF-8");
    SHA256.computeDigest(b);

  • MVC example in SAP

    hi,
    please take a look at SAP example in 6.20 : tutorial_4_mvc.
    I have the same probelm as this example has, the only difference is the search criteria for authors is for me a text edit field(more than one value with tab separation).
    When you enter a search in this SAP example for field Title as 'Dynamic Commerce' (depends on the table entries in your client, i believe std. SAP delivered data would be there)u get the result and when u click on the radio button , u get the detail for this book.
    Now , when u do a new search for ex. C/C++, you get a result which is preselected with a radio button.
    I would like to deslect/clear this in my case.
    I am trying everything but no luck yet.
    Please suggest.
    Thanks.

    Dont post duplicate threads..
    Raja T

  • How to deploy and run Spring petportal example on Oracle portal?

    Is there any how-to steps or article show the petportal (Spring portlet MVC) example deploy and run Oracle portal?

    Hi,
    I haven't tired this, but I looked at the "README.txt" file included in the Spring PetPortal Application & it uses the standard JSR 168 Portlet standards.
    Hence, I assume that this would work as with any other remote portlet Implementation - host the portlet remotely & consume it in Oracle Portal 10.1.4.
    I just noticed that it has been 8 days since you posted the question - have you tried anything already ? If yes, what are your experiences so far ?
    Regards,
    Sandeep

  • Problem with video file SEEKING (Seek.java)

    Hi,
    I have a problem with seeking the video file, actually mpeg2 file. I tried the Seek.java example from sun web site (http://www.cs.odu.edu/~cs778/spring04/lectures/jmfsolutions/examplesindex.html#seek) but it doesn't work. When I try to call getControl it returns null.
    fpc = (FramePositioningControl)p.getControl("javax.media.control.FramePositioningControl");
    if (fpc == null) {
    System.err.println("The player does not support FramePositioningControl.");
    System.err.println("There's no reason to go on for the purpose of this demo.");
    return false;
    Does anybody have some idea how to make a player that will support FramePositioningControl ???
    Or do you know some java dvd player that can be used in java application for free?
    thx a lot

    try {
         Manager.setHint(Manager.PLUGIN_PLAYER, new Boolean(true));
                   player = Manager.createRealizedPlayer(new MediaLocator("file:"
                   + fd.getDirectory() + fd.getFile()));
              } catch (NoPlayerException err) {
                   err.printStackTrace();
              } catch (CannotRealizeException err) {
                   err.printStackTrace();
              } catch (IOException err) {
                   err.printStackTrace();
    if (player == null) {
    System.out.println("Trouble creating a player.");
    return;
    FramePositioningControl fpc = (FramePositioningControl)player.getControl
    ("javax.media.control.FramePositioningControl");
    if (fpc == null) {
         System.err.println("The player does not support FramePositioningControl.");
         System.err.println("There's no reason to go on for the purpose of this demo.");
         return;
         }

  • Does anyone have a very simplee4 and GEF4 UI-integration example?

    Does anyone have a very simple GEF4 example? I am trying to learn GEF4 without ever having used the prior versions of GEF. I have bought five different books on eclipse plug-ins and RCP. Only one book, "Eclipse Plug-ins third edition" had a chapter on GEF. I read chapter 20 on GEF but it is based on version 3.x. Then I read other pages like this (https://wiki.eclipse.org/GEF/GEF4/MVC/Examples#Logo_Example_.28Standalone.2C_Eclipse_UI.2C_Web.29) and this (http://nyssen.blogspot.de/2015/06/gef4-mission-to-mars-accomplished.html) but they all assume prior GEF knowledge.
    Does anyone have a very simple GEF project example that is a Eclipse4 "Part" with a GEF UI-integration? By simple I am thinking only one "figure", a filled circle for example, with the a supporting Model and Controller (EditPart) that just outputs to the console a message like "The move is over the circle" to the console. All the other examples have a lot more stuff that is making it hard for this newbie to get a grip on the basics of the MVC in GEF4.

    I agree with you that something needs to change.
    I am a long time Macintosh user and Apple fan. I was using iTunes to download video podcasts to my iPod for a while before I realized that the list all buttons list all of the "Featured" podcasts only. I had no idea how much content was out there.
    I also take issue with the listings on iTunes. There is a Tiger Woods podcast that is killing all the other podcasts in terms of popularity. The problem is, it isn't really a podcast. It is simply a commercial that is in iPod format. This hardly deserves the spot in ITMS that it has. It is not updated or new, but it is listed as new and notable. As if Tiger needs more press.
    It seems that the big money podcasts get billing and premiere placement in the store. I hope they give some sort of fair time in the spotlight to podcasts that are regularly updated.
    PodcastGolfLessons.com
    http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=152856310

  • Where is the "Logo Example (UI-integration)" example?

    As per this page
    https://wiki.eclipse.org/GEF/GEF4/MVC/Examples#Logo_Example_.28Standalone.2C_Eclipse_UI.2C_Web.29
    in the "Logo Example (UI-integration)" section there should be a "'GEF4 MVC Logo Example" which can simply be installed from the update-sites. I can not find the example even when I use the "-- All Available Sites --" option on the "Install new software" panel.

    Yes, the GEF4 MVC logo example is bundled by the GEF4 MVC examples feature, as outlined in the deliverables section of the release plan (https://projects.eclipse.org/projects/tools.gef/releases/3.10.0-mars/plan) and the respective example documentation (https://wiki.eclipse.org/GEF/GEF4/MVC/Examples#Logo_Example_.28Standalone.2C_Eclipse_UI.2C_Web.29).

  • HOW TO Developing an Authorization plug-in

    #if defined (_WIN32)
    #pragma warning(disable : 4996)
    BOOL WINAPI DllMain(
        HINSTANCE hinstDLL,  // handle to DLL module
        DWORD fdwReason,     // reason for calling function
        LPVOID lpReserved )  // reserved
    return TRUE;
    #endif
    How to create here
    /*----------------------------------------------------------------------------+
    |       ___     _       _                                                    |
    |      /   |   | |     | |                                                   |
    |     / /| | __| | ___ | |__   ___                                           |
    |    / /_| |/ _  |/ _ \|  _ \ / _ \                                          |
    |   / ___  | (_| | (_) | |_) |  __/                                          |
    |  /_/   |_|\__,_|\___/|____/ \___|                                          |
    |                                                                            |
    |                                                                            |
    |  ADOBE CONFIDENTIAL                                                        |
    |  __________________                                                        |
    |                                                                            |
    |  Copyright (c) 2003 - 2010, Adobe Systems Incorporated.                    |
    |  All rights reserved.                                                      |
    |                                                                            |
    |  NOTICE:  All information contained herein is, and remains the property    |
    |  of Adobe Systems Incorporated and its suppliers, if any. The intellectual |
    |  and technical concepts contained herein are proprietary to Adobe Systems  |
    |  Incorporated and its suppliers and may be covered by U.S. and Foreign     |
    |  Patents, patents in process, and are protected by trade secret or         |
    |  copyright law. Dissemination of this information or reproduction of this  |
    |  material is strictly forbidden unless prior written permission is         |
    |  obtained from Adobe Systems Incorporated.                                 |
    |                                                                            |
    |          Adobe Systems Incorporated       415.832.2000                     |
    |          601 Townsend Street              415.832.2020 fax                 |
    |          San Francisco, CA 94103                                           |
    |                                                                            |
    +----------------------------------------------------------------------------*/
    #include "StdAfx.h"
    #include "FmsAuthAdaptor.h"
    #include "FmsAuthActions.h"
    #include "FmsMedia.h"
    #include <stdio.h>
    #include <fcntl.h>
    #include <string.h>
    #include "hash.h"
    #include <sstream>
    #if defined (_WIN32)
    #pragma warning(disable : 4996)
    BOOL WINAPI DllMain(
        HINSTANCE hinstDLL,  // handle to DLL module
        DWORD fdwReason,     // reason for calling function
        LPVOID lpReserved )  // reserved
    return TRUE;
    #endif
    // Flag to process SWF Verification in this auth sample.  A real SWF file
    // must be targeted in the SWFVerification code below for the example to work.
    static const bool kAuthorizeSwfVerification = false;
    class FmsAuthAdaptor : public IFmsAuthAdaptor
    public:
      FmsAuthAdaptor(IFmsAuthServerContext2* pFmsAuthServerContext)
       : m_pFmsAuthServerContext(pFmsAuthServerContext) {}
      virtual ~FmsAuthAdaptor() {}
      void authorize(IFmsAuthEvent* pAev);
      void notify(IFmsAuthEvent* pAev);
      void getEvents(I32 aevBitAuth[], I32 aevBitNotf[], unsigned int count);
    private:
      bool getStats(I64 clientStatsHandle, FmsClientStats& baseStats);
      void processStats(IFmsAuthEvent* pAev);
      IFmsAuthServerContext2* m_pFmsAuthServerContext;
    // Utils
    // Note: Do not delete the return value.  The return value is a buffer
    // allocated in FMS memory space, and FMS will manage the memory.
    static char* getStringField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kString)
      return reinterpret_cast<char*>(field.str);
    return 0;
    // Note: Do not delete the return value.  The return value is a buffer
    // allocated in FMS memory space, and FMS will manage the memory.
    static U8* getBufferField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kBuffer)
      return field.buf;
    return 0;
    static bool getI8Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I8& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI8)
      iValue = field.i8;
      return true;
    return false;
    static bool getI32Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I32& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI32)
      iValue = field.i32;
      return true;
    return false;
    static bool getI64Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I64& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI64)
      iValue = field.i64;
      return true;
    return false;
    static bool getFloatField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, float& fValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kFloat)
      fValue = field.f;
      return true;
    return false;
    static bool getU16Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, U16& iValue)
    FmsVariant field;
    if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kU16)
      iValue = field.u16;
      return true;
    return false;
    static bool setStringField(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, char* pValue)
    FmsVariant field;
    field.setString(reinterpret_cast<I8*>(pValue));
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setI8Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I8 iValue)
    FmsVariant field;
    field.setI8(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setU8Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, U8 iValue)
    FmsVariant field;
    field.setU8(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setI32Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I32 iValue)
    FmsVariant field;
    field.setI32(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setI64Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I64 iValue)
    FmsVariant field;
    field.setI64(iValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool setFloatField(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, float fValue)
    FmsVariant field;
    field.setFloat(fValue);
    return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
    static bool isADPCMSupported(int iAudioCodecs)
    return (iAudioCodecs & SUPPORT_SND_ADPCM) != 0;
    static bool isVP6Supported(int iVideoCodecs)
    int iAllVP6 = ( SUPPORT_VID_VP6ALPHA | SUPPORT_VID_VP6 );
    return (iVideoCodecs & iAllVP6) != 0;
    static bool isService(int iType)
    return (iType & TYPE_SERVICE) != 0;
    static bool isAMF3(unsigned char uEncod)
    return (uEncod == ENCODE_AMF3);
    // This class will process all authorization events
    class MyFmsAuthorizeEvent
    public:
    MyFmsAuthorizeEvent(IFmsAuthEvent* pAev, IFmsAuthServerContext2* pFmsAuthServerContext)
      : m_pAev(pAev), m_pFmsAuthServerContext(pFmsAuthServerContext) {}
    virtual ~MyFmsAuthorizeEvent() {}
    void authorize();
    private:
    IFmsAuthEvent*   m_pAev;
    IFmsAuthServerContext2* m_pFmsAuthServerContext;
    void MyFmsAuthorizeEvent::authorize()
    bool bAuthorized = true;  // default authorization state
    switch(m_pAev->getType())
      case IFmsAuthEvent::E_CONNECT:
       // only E_CONNECT allows changes to the following fields:
       // F_CLIENT_AUDIO_SAMPLE_ACCESS
       // F_CLIENT_AUDIO_SAMPLE_ACCESS_LOCK
       // F_CLIENT_READ_ACCESS
       // F_CLIENT_READ_ACCESS_LOCK
       // F_CLIENT_VIDEO_SAMPLE_ACCESS
       // F_CLIENT_VIDEO_SAMPLE_ACCESS_LOCK
       // F_CLIENT_WRITE_ACCESS_LOCK
       // F_CLIENT_WRITE_ACCESS
       I8 iValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS, iValue))
        setI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS, iValue);
       // redirect connection example
       char* pUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       if (pUri && !strcmp(pUri, "rtmp://localhost/streamtest"))
        setStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI,
         "rtmp://localhost:1935/streamtest");
        bAuthorized = false;
       // set DiffServ fields based on a client IP
       // char* pIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       // if (pIp && !strcmp(pIp, "192.168.1.1"))
        // set the DSCP bits and mask
        U8 m_diffServBits = 170;
        U8 m_diffServMask = 252;
        setU8Field(m_pAev, IFmsAuthEvent::F_CLIENT_DIFFSERV_BITS, m_diffServBits);
        setU8Field(m_pAev, IFmsAuthEvent::F_CLIENT_DIFFSERV_MASK, m_diffServMask);
        bAuthorized = true;
      break;
      case IFmsAuthEvent::E_PLAY:
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       if (pStreamName)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       if (pStreamType)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       if (pStreamQuery)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY, pStreamQuery);
       I8 iValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, iValue))
        // If iValue is 1 (true) the playlist will be reset and the
        // stream will be the only stream in the playlist; otherwise
        // 0 (false) means the stream will be added to the existing
        // playlist.
        setI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, iValue);
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, iValue))
        // If iValue is 1 (true) the stream timestamps will be ignored;
        // otherwise 0 (false) means the timestamps will be handled.
        setI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, iValue);
       char* pStreamTransition = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TRANSITION);
       if (pStreamTransition && strlen(pStreamTransition))
        // MBR transition example
        if (!strcmp(pStreamTransition, "switch") ||
         !strcmp(pStreamTransition, "swap"))
         // get the old stream's properties
         char* pOldStreamName = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_NAME);
         char* pOldStreamType = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_TYPE);
         char* pOldStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_QUERY);
         // if pOldStream is empty (optional for switch) current stream is in play
         // do we really want stream transition? 
          // no we do not allow transition
          // bAuthorized = false;
          // now transition will be turned off and old stream continue playing
          // break;    
         // doing nothing will execute transition mode as is
         // or you could modify transition by changing transition properties
         // set it to 1 to indicate they will be hooking up the stream,
         // but that it does not currently exist
         setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_LIVE_PUBLISH_PENDING, 1);
        // get the offset value if transition is set to offset mode for reconnect
        if (!strcmp(pStreamTransition, "resume"))
         float fValue;
         if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_OFFSET, fValue))
          float offset = fValue; //offset value in seconds
       else
        // This is a regular play waiting for approval, which may be converted
        // into a play2 command by changing transition properties
      break;
      case IFmsAuthEvent::E_PUBLISH:
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       if (pStreamName)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       if (pStreamType)
        setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
       I32 iValue;
       if (getI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, iValue))
        // publish types:
        // 0 : record
        // 1 : append
        // 2 : appendWithGap
        // -1 : live
        setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, iValue);
      break;
      case IFmsAuthEvent::E_FILENAME_TRANSFORM:
        I64 iValue;
        if (getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, iValue))
         // some fields are not eligible to be modified. The return
         // value will be false when trying to modify the F_CLIENT_ID.
         bool bSet = setI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, iValue);
        char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
        if (pStreamName)
         // some fields are not eligible to be modified. The return
         // value will be false when trying to modify the F_STREAM_NAME.
         bool bSet = setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
        char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
        if (pStreamPath)
         setStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH, pStreamPath);
        char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
        if (pStreamType)
         setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType); 
      break;
      case IFmsAuthEvent::E_PAUSE:
       bAuthorized = false; // block all E_PAUSE events.
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE_TIME, fValue))
        float fPauseTime = fValue; // in seconds
       I8 iValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE, iValue))
        // 1 (true) means PAUSE
        // 0 (false) means UNPAUSE
        bool boolPause = iValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE_TOGGLE, iValue))
        // 1 (true) means PAUSE_TOGGLE
        // 0 (false) means no PAUSE_TOGGLE was set
        bool boolPauseToggle = iValue != 0;
       FmsVariant field;
       // Notify Action example: An IFmsNofifyAction is created to notify
       // server side action script (SSAS) of the E_PAUSE event by calling
       // the function name "method" in the script.  In this example two
       // variables will be passed to "method" by calling addParam(field)
       // on the action.
       if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
        I64 clientId = field.i64;
        IFmsNotifyAction* pAction = m_pAev->addNotifyAction("Notified by adaptor");
        pAction->setClientId(field);
        const char mtd[] = "method";
        field.setString(reinterpret_cast<I8*>(const_cast<char*>(mtd)));
        pAction->setMethodName(field);
        // create and insert a U16 "12345" as the first parameter
        field.setU16(12345);
        pAction->addParam(field);
        // create and insert clientId as a double as the second parameter
        field.setDouble((double)clientId);
        pAction->addParam(field);
        // Note: SSAS does not work with I64 or Buffer variants
        // field.setI64(clientId);
        // pAction->addParam(field); // incorrect
      break;
      case IFmsAuthEvent::E_SEEK:
       bAuthorized = false; // block all E_SEEK events
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fValue))
        // Modification of the seek position example:
        // fValue + 3; will add 3 seconds to the initial seek posistion
        float fSeekTime = fValue; // value in seconds
        setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fSeekTime);
      break;
      case IFmsAuthEvent::E_LOADSEGMENT:
       // bAuthorized = false; // block all E_LOADSEGMENT events
       // E_LOADSEGMENT is a read only event that substitutes E_PLAY on
       // FMS Origin servers for recorded streams.
       I64 iValue;
       if (getI64Field(m_pAev, IFmsAuthEvent::F_SEGMENT_START, iValue))
        I64 iStart = iValue; // in bytes
       if (getI64Field(m_pAev, IFmsAuthEvent::F_SEGMENT_END, iValue))
        I64 iEnd = iValue; // in bytes
      break;
      case IFmsAuthEvent::E_RECORD:
       // bAuthorized = false; // block all E_RECORD events
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, fValue))
        float recMaxSize = fValue; // in kilobytes
        setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, recMaxSize);
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, fValue))
        float recMaxDuration = fValue; // in seconds
        setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, recMaxDuration);
      break;
      case IFmsAuthEvent::E_SWF_VERIFY:
       // SWF Verification example:
       // kAuthorizeSwfVerification is assigned false by default.  The
       // target SWF file must be updated for this to work.
       if(kAuthorizeSwfVerification)
        I8 swfvVersion = 0;
        if(getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_VERSION, swfvVersion))
         std::stringstream stream;
         stream << "Swf verification version is " << static_cast<int>(swfvVersion);
         m_pFmsAuthServerContext->log(stream.str().c_str(), IFmsServerContext::kInformation, false);
        I64 swfvDepth;
        if(getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DEPTH, swfvDepth))
         I32 swfvTTL;
         if(getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, swfvTTL))
          swfvTTL /= 2;
          setI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, swfvTTL);
         U8 digest[kSHA256DigestLen];
         // Target a real SWF file instead of sample.swf
         hashSwfFileAtDepth("C:\\sample.swf", swfvDepth, digest);
         FmsVariant field;
         field.setBuffer(digest, kSHA256DigestLen);
         m_pAev->setField(IFmsAuthEvent::F_CLIENT_SWFV_DIGEST, field);
      break;
      case IFmsAuthEvent::E_APPSTART:
      case IFmsAuthEvent::E_APPSTOP:
      case IFmsAuthEvent::E_DISCONNECT:
      case IFmsAuthEvent::E_STOP:
      case IFmsAuthEvent::E_UNPUBLISH:
      case IFmsAuthEvent::E_ACTION:
      case IFmsAuthEvent::E_CODEC_CHANGE:
      case IFmsAuthEvent::E_RECORD_STOP:
      case IFmsAuthEvent::E_CLIENT_PAUSE:
      case IFmsAuthEvent::E_SWF_VERIFY_COMPLETE:
      case IFmsAuthEvent::E_CLIENT_SEEK:
      case IFmsAuthEvent::E_START_TRANSMIT:
      case IFmsAuthEvent::E_STOP_TRANSMIT:
      case IFmsAuthEvent::E_MAXEVENT:
      break;
    IFmsAuthServerContext2::AuthFailureDesc* desc = NULL;
    if(!bAuthorized)
      desc = new IFmsAuthServerContext2::AuthFailureDesc("Blocked by auth adaptor",
       IFmsAuthServerContext2::kDefaultStatus, -1);
    char buf[1024];
    const char* const action = bAuthorized ? "approved" : "rejected";
    sprintf(buf, "Received authorization type=%d id=%p %s\n", m_pAev->getType(),
      m_pAev, action);
    // log to the configured FMS log directory. If the third parameter is true,
    // also send the log to the system event log.
    m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
    m_pFmsAuthServerContext->onAuthorize(m_pAev, bAuthorized, desc);
    delete desc;
    class MyFmsNotifyEvent
    public:
      MyFmsNotifyEvent(IFmsAuthEvent* pAev, IFmsAuthServerContext2* pFmsAuthServerContext)
       : m_pAev(pAev), m_pFmsAuthServerContext(pFmsAuthServerContext) {}
      virtual ~MyFmsNotifyEvent() {}
      void notify() const;
    private:
      IFmsAuthEvent* m_pAev;
      IFmsAuthServerContext2* m_pFmsAuthServerContext;
    void MyFmsNotifyEvent::notify() const
    switch(m_pAev->getType())
      case IFmsAuthEvent::E_PLAY:
       char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
       char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
       char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
       char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
       char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
       char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
       char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
       char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
       char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
       char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
       char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
       char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
       char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
       I32 iValue;
       if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_CODECS, iValue))
        bool bADPCM = isADPCMSupported(iValue);
       if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_CODECS, iValue))
        bool bVP6 = isVP6Supported(iValue);
       if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_TYPE, iValue))
        bool bService = isService(iValue);
       if (getI32Field(m_pAev, IFmsAuthEvent::F_STREAM_ID, iValue))
        I32 iStreamId = iValue;
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_LENGTH, fValue))
        float fLength = fValue; // in seconds
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_POSITION, fValue))
        float iPosition = fValue; // in seconds
       I64 lValue;
       if (getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, lValue))
        I64 iClientId = lValue; 
       I8 sValue;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SECURE, sValue))
        bool bSecure = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_AMF_ENCODING, sValue))
        bool bAMF3 = isAMF3(sValue);
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS_LOCK, sValue))
        bool bRead = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS_LOCK, sValue))
        bool bWrite = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS_LOCK, sValue))
        bool bAudioRead = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS_LOCK, sValue))
        bool bVideoRead = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, sValue))
        bool bReset = sValue != 0;
       if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, sValue))
        bool bIgnore = sValue != 0;
      break;
      case IFmsAuthEvent::E_SEEK:
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fValue))
        float fSeekTime = fValue;
       // Disconnect Action example: disconnect the client that was
       // specified by the E_SEEK notify event
       FmsVariant field;
       if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
        IFmsDisconnectAction* pAction =
         const_cast<IFmsAuthEvent*>(m_pAev)->
          addDisconnectAction("Seek is not allowed. Blocked by adaptor");
        pAction->setClientId(field);
      break;
      case IFmsAuthEvent::E_CODEC_CHANGE:
       char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
       char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
       char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
       char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
       char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
       char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
       char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
       char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
       char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
       char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
       char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
       char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
       char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
       U16 fType;
       if (getU16Field(m_pAev, IFmsAuthEvent::F_STREAM_CODEC_TYPE, fType))
        U16 streamCodecType = fType;
        if (streamCodecType == kVIDEO_CODEC)
         U16 fValue;
         if (getU16Field(m_pAev, IFmsAuthEvent::F_STREAM_CODEC, fValue))
          U16 streamCodecValue = fValue;
          if (streamCodecValue == VIDEO_CODEC_SORENSON)
           // Disconnect Action example: Disallow clients trying
           // to publish content with the sorenson video codec.
           FmsVariant field;
           if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
            IFmsDisconnectAction* pAction =
             const_cast<IFmsAuthEvent*>(m_pAev)->
             addDisconnectAction("Sorenson is not allowed. Blocked by adaptor");
            pAction->setClientId(field);
      break;
      case IFmsAuthEvent::E_RECORD_STOP:
       char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
       char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
       char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
       char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
       char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
       char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
       char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
       char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
       char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
       char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
       char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
       char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
       char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
       char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
       char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
       char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
       char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
       char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
       float fValue;
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, fValue))
        float recMaxSize = fValue; // in kilobytes
       if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, fValue))
        float recMaxDuration = fValue; // in seconds
      break;
      case IFmsAuthEvent::E_SWF_VERIFY_COMPLETE:
       char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
       I8 version; // version of SWF verification
       getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_VERSION, version);
       I64 depth; // depth in the SWF file hashed
       getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DEPTH, depth);
       I32 ttl; // time to live of the SWF hash provided
       getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, ttl);
       // digest provided to match against
       U8* buffer = getBufferField(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DIGEST);
       // result of the attempted match-- see FmsAuthEvents.h enum
       // eSWFMatch for the meaning of this field
       I32 match;
       getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_RESULT, match);
       std::stringstream stream;
       stream << "swf verification for client: "
         << std::string(pClIp)
         << " is complete, the result is: " << match;
       m_pFmsAuthServerContext->log(stream.str().c_str(), IFmsServerContext::kInformation, false);
      break;
      case IFmsAuthEvent::E_APPSTART:
      case IFmsAuthEvent::E_APPSTOP:
      case IFmsAuthEvent::E_CONNECT:
      case IFmsAuthEvent::E_DISCONNECT:
      case IFmsAuthEvent::E_FILENAME_TRANSFORM:
      case IFmsAuthEvent::E_STOP:
      case IFmsAuthEvent::E_PAUSE:
      case IFmsAuthEvent::E_PUBLISH:
      case IFmsAuthEvent::E_UNPUBLISH:
      case IFmsAuthEvent::E_LOADSEGMENT:
      case IFmsAuthEvent::E_ACTION:
      case IFmsAuthEvent::E_RECORD:
      case IFmsAuthEvent::E_CLIENT_PAUSE:
      case IFmsAuthEvent::E_SWF_VERIFY:
      case IFmsAuthEvent::E_CLIENT_SEEK:
      case IFmsAuthEvent::E_START_TRANSMIT:
      case IFmsAuthEvent::E_STOP_TRANSMIT:
      case IFmsAuthEvent::E_MAXEVENT:
      break;
    char buf[1024];
    sprintf(buf, "Received notification type=%d id=%p\n", m_pAev->getType(), m_pAev);
    // log to the configured FMS log directory. If the third parameter is true,
    // also send the log to the system event log.
    m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
    m_pFmsAuthServerContext->onNotify(m_pAev);
    /* All authorization events flow through this wrapper function.
    * Note: This sample auth adaptor has MyFmsAppAuthEvent allocated on the
    * stack, but time intensive implementations may warrant authorization to
    * be allocated on the heap so work may be passed to a thread pool.  This
    * prevents starvation of the calling FMS threads in custom code that may
    * have processing delays (ie database calls, network filesystem access, etc..).
    void FmsAuthAdaptor::authorize(IFmsAuthEvent* pAev)
      MyFmsAuthorizeEvent(pAev, m_pFmsAuthServerContext).authorize();
    /* All notification events flow through this wrapper function.
    * Note: This sample auth adaptor has MyFmsNotifyEvent allocated on the
    * stack, but time intensive implementations may warrant notifications to
    * be allocated on the heap so work may be passed to a thread pool.  This
    * prevents starvation of the calling FMS threads in custom code that may
    * have processing delays (ie database calls, network filesystem access, etc..).
    void FmsAuthAdaptor::notify(IFmsAuthEvent* pAev)
      processStats(pAev);
      MyFmsNotifyEvent(pAev, m_pFmsAuthServerContext).notify();
    * Get client statistics.
    bool FmsAuthAdaptor::getStats(I64 clientStatsHandle, FmsClientStats& baseStats)
    bool bValue= m_pFmsAuthServerContext->getClientStats(clientStatsHandle, baseStats);
    return bValue;
    * Example obtainting client stats from an E_CONNECT or E_STOP event
    void FmsAuthAdaptor::processStats(IFmsAuthEvent* pAev)
      I64 statsHandle;
      FmsClientStats baseStats;
      if (!getI64Field(pAev, IFmsAuthEvent::F_CLIENT_STATS_HANDLE, statsHandle))
       return;
      char* pAppName = getStringField(pAev, IFmsAuthEvent::F_APP_NAME);
      if (pAev->getType() == IFmsAuthEvent::E_CONNECT)
       getStats(statsHandle, baseStats);
       // log data
       char buf[1024];
       char hashKey[9];
       memset(hashKey, 0, 9);
       memcpy(hashKey, &statsHandle, sizeof(statsHandle));
       sprintf(buf, "client Stats Handle= %s, bytes_in= %f, bytes_out= %f\n", hashKey,
        static_cast<double>(baseStats.bytes_in), static_cast<double>(baseStats.bytes_out));
       m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
      else if (pAev->getType() == IFmsAuthEvent::E_STOP)
       getStats(statsHandle, baseStats);
    /* By default, all authorization and notifications events will be sent.
    * Call excludeEvents with the bit set to 1, to stop recieving events.
    * Note: The events:
    * E_APPSTART, E_APPSTOP, E_DISCONNECT, E_STOP, E_UNPUBLISH, E_CODEC_CHANGE
    * are excluded by default and are not authorizable.
    void FmsAuthAdaptor::getEvents(I32 aevBitAuth[], I32 aevBitNotf[], unsigned int count)
    // exclude certain auth events
    IFmsAuthEvent::EventType authExcludeEvent[] = { IFmsAuthEvent::E_SEEK };
    // set E_SEEK to a non authorizable event
    m_pFmsAuthServerContext->excludeEvents(aevBitAuth, count, authExcludeEvent, 1);
    // Warning: if E_CODEC_CHANGE event is not excluded, all messages will be
    // scanned to detect codec change. Subscribe to this event only as needed.
    // Example that excludes certain notify events. (E_PAUSE, E_CODEC_CHANGE)
    IFmsAuthEvent::EventType notifyExcludeEvent[] =
      { IFmsAuthEvent::E_PAUSE, IFmsAuthEvent::E_CODEC_CHANGE };
    m_pFmsAuthServerContext->excludeEvents(aevBitNotf, count, notifyExcludeEvent, 2);
    extern "C" void FCExport FmsCreateAuthAdaptor3(IFmsAuthServerContext2* pAuthServerCtx,
                  IFmsAuthAdaptor*& pFmsAuthAdaptor, U32& iVersion)
    pFmsAuthAdaptor = new FmsAuthAdaptor(pAuthServerCtx);
    U32 version = pAuthServerCtx->getVersion();
    U16 w2 = LWORD(version);
    U16 w1 = HWORD(version);
    iVersion = MKLONG(INTERFACE_MINOR_VERSION, INTERFACE_MAJOR_VERSION);
    char buf[1024];
    char *ptr = buf;
    int valueLen = pAuthServerCtx->getConfig("UserKey1", &ptr, sizeof(buf));
    if (!valueLen)
      valueLen = pAuthServerCtx->getConfig("UserKey2", &ptr, sizeof(buf));
      if (!valueLen)
       return;
      if (valueLen < 0)
       // failed to find this key
       return;
    if (valueLen < 0)
      // failed to find this key
      return;
    // value length is bigger then the buffer size, and a real adaptor should
        // allocate valueLen + 1 bytes and call again
    extern "C" void FCExport FmsDestroyAuthAdaptor3(IFmsAuthAdaptor* pAuthAdaptor )
    delete pAuthAdaptor;

    There is no API to Acrobat's document compare feature.
    It is certainly possible for an experienced plug-in programmer to
    create a new compare plug-in. For example, extract text from two PDFs
    and compare it. Comparison algorithms have been much studied so should
    be findable in academic literature.
    Going beyond text comparison would be a major exercise.
    Aandi Inston

  • Error in a book ?

    Hi. I have a book from Wrox called "Beginning Java Databases". In it is a MVC example using an EJB with the following interface:
    import org.w3c.dom.*;
    public interface MVCObject extends EJBObject {
        public Document retrieve (HttpServletRequest _request) throws RemoteException, Exception;
        public Document post (HttpServletRequest _request) throws RemoteException, Exception;
    }My question is how can this remote interface ever be used when the org.w3c.dom.Document class is not Remote or Serializable ??
    Their example involves a jsp which calls a RequestHandler which gets the session bean to process a HTTP request and return an XML document. My attempt to use such a method does not work, throwing an exception in the container implemented stub when the retrieve method is called.
    I put my application in a war file and deploy it using Sun's application deployment tool from the reference implementation, whereas the book is deploying to Tomcat and JBoss.
    I am new to programming for the web and must have missed something here. Can you help?
    Thanks.

    Document and HttpServletRequest are just interfaces, and no they do not implement Serializable. However, all that matters is that whatever class winds up implementing these interface also implements Serializable and/or Remote. The implementing class is generally vendor specific, so you may or may not be able to get the source code or javadocs for the implementing class. You can probably find out what the implementing class by doing some thing like System.out.println(request.getClass())

  • Submitting a PDF form --- save and send completed PDF document?

    A small government site has a number of 'submittable' PDF
    form documents
    that they'd like me to include on the website. I am not very
    familiar
    with PDF forms in this way, and hope someone here can help
    sort out a
    few things...
    Can a PDF form be submitted so that
    a) the completed PDF doc is saved on the server (and renamed)
    b) a printable , completed PDF (looks just like the one they
    filled out,
    with all their values saved in the input boxes) is emailed to
    specific
    address
    c) the raw user data is saved to database (maybe a list of
    fields in one
    column of a db table, and a matching list of values in
    another? this
    would just be for backup in case the completed PDF did not
    save
    correctly to the server, or for later reference)
    We've looked at the standard Acrobat 'submit via email' and
    that won't
    cut it... that method appears to simply trigger a 'mailto'
    popup, with
    the pdf as an attachment. Our system needs to be automated
    via CFmail.
    None of these would handle any 'sensitive' information, the
    main
    concern, from their part, is people being able to submit the
    form and
    have both the city office and the recipient get a copy that
    prints just
    as if they had hit 'print' when filling out the actual PDF.
    Is all of this possible ??
    if so... any tips appreciated!
    Michael Evangelista, Evangelista Design
    Web : www.mredesign.com Blog : www.miuaiga.com
    Developer Newsgroups: news://forums.mredesign.com

    nobody?
    seems i can do some of this with 'cfpdfform'... looking into
    it but also
    seeking live examples/experience.
    Michael Evangelista, Evangelista Design
    Web : www.mredesign.com Blog : www.miuaiga.com
    Developer Newsgroups: news://forums.mredesign.com

  • Assistance needed with migration from OSMF 1.0 to OSMF 2.0

    I am using a third party plug-in for HTTP Live Streaming playback, http://code.google.com/p/apple-http-osmf/
    Porting the plug-in from OSMF 1.0 to OSMF 2.0 did not go as smoothly as I had hoped.
    A change in behaviour between OSMF 1.0 and OSMF 2.0 is causing us trouble when seeking in Apple HLS streams.
    *** The problem ***
    Playing a stream where the first segment has a non-zero timestamp, if one seeks for example 10 minutes into the file, the seek will complete instantly and in some cases a single frame from the new time is rendered but the scrub bar and time indicator will reset to zero and count up at a normal rate as if it was playing, then after up to 20 seconds, playback will resume at the new location and scrub bar and time indicator will return to the right value.
    *** How to Reproduce ***
    Build OSMFPlayer using at.matthew.httpstreaming.HTTPStreamingM3U8NetLoader to provide the video element and modify org.osmf.net.httpstreaming.HTTPNetStream to ignore _initialTime in the seek function.
    1) Using OSMF 1.0, the result is a player that plays and seeks normally.
    2) Using OSMF 2.0, the result is a player that does not behave right when seeking in streams that have a non-zero _initialTime.
    Example of a stream that exhibits this problem: http://fastly.zenzuz.com/streaming/GUSGUS/prog_index.m3u8
    *** Codebase / Libraries Involved ***
    - OSMF 2.0
    - apple-http-osmf svn r11
    - OSMFPlayer from the OSMF framework samples
    *** Our Observations ***
    Immediately after seeking, the buffer level in HTTPNetStream will go far above the configured maximum buffer level, by the seek amount, so seeking 10 minutes into the file will result in a buffer level of a tad over 600 seconds. When playback resumes, the buffer level will return to normal. One of the changes in OSMF 2.0 from version 1.0 is a difference in how the NetStream class is used, OSMF 2.0 uses an extra instance of NetStream for buffering.
    *** References ***
    Live document on this issue in open Google Docs:
    https://docs.google.com/document/d/1TO9oyg8cK5ezSLNkeyCTKdtFA__fDY8g7te2PWt-UTw/edit
    Where exactly are the NetStream time codes derived from?

    Hello,
    You can see following doc id for detailed procedure and instructions
    Doc ID: 730365.1 Oracle Database Upgrade Path Reference List
    Regards

  • Help required building ADF-Swing/ADF-Faces using ADF Business Components

    My question is in regards to how you can go about building a light swing application to an ADF model?
    In particular if I were to say that we were developing a 3-tier project whereby we had a database tier, a series of EJB-ADF façade session beans to the database (middle-tier), and a swing client communicating with the session beans (view-controller tier), how would you go about developing these screens?
    In particular can we develop these screens using ADF-Faces and also ADF-Swing?
    The EJB session façade beans of course are ADF app modules with customised methods. The methods would return back customised DTO objects. These DTO objects are wrappers to row objects ADF would create. This would be mainly due to making these facade beans web service enabled (Oracle state that these methods cannot return oracle.jbo objects if they are to be web service enabled).
    This would be typically deployed to an app server, like Oracle App Server 10G.
    Could you please have a look at this, as I am doing a lot of research into this.
    eg. Taking example from oracle magazine sept/oct 2006
    with slight enhancements
    package oramag.frameworks.example.common;
    import oracle.jbo.ApplicationModule;
    import oramag.frameworks.customdto.EmployeeDTO;
    public interface HRService extends ApplicationModule {
    void deleteCurrentEmpAndCommit();
    EmployeeDTO findEmployee(int employeeId); // new method
    import oramag.frameworks.customdto.EmployeeDTO;
    public class HRServiceImpl extends ApplicationModuleImpl {
    public void deleteCurrentEmpAndCommit() {
    Row empRow = getEmpView().getCurrentRow();
    if (empRow != null) {
    empRow.remove();
    getDBTransaction().commit();
    public EmployeeDTO findEmployee(int employeeId)() {
    EmployeeDTO employeeDTO = null;
    EmployeesImpl employees = getEmployees();
    employees.setNamedWhereClauseParam("EmployeeId", employeeId);
    employees.executeQuery();
    if(employees.hasNext()) {
    EmployeesRowImpl employee = (EmployeesRowImpl)employees.next();
    employeeDTO = new EmployeeDTO(employee);
    return employeeDTO;
    public EmployeesImpl getEmployees() {
    return (EmployeesImpl)findViewObject("Employees");
    Now given the above code snippet, how could you turn this into an ADF-Swing/ADF Faces application so that if a user using the swing application enters an employee id, then the application will execute the query on the app server, the app server in turn returns the results to the client, and the client finally display the results. Typical MVC example.
    Cheers
    Rodney

    The tutorial is for ADF BC used with JavaServer Faces.
    While the tutorial doesn't cover it, we also support drag and drop development for Swing and visual WYSIWYG layout for Swing panels and windows, too. For a very simple example, watch screencast #4 on my blog here:
    http://radio.weblogs.com/0118231/stories/2005/06/24/jdeveloperAdfScreencasts.html
    One thing I have noticed is that when using ADF business components, when the app module returns a custom DTO object like the above example, it returns the data in a element structure according to the data control palette.
    You don't generally ever need to create your own custom DTO's when working with ADF for use by client UI's. The only situation where can be necessary -- until we simplify this in the JDeveloper/ADF 11g release -- is when you desire to expose custom methods that can return sets/arrays of typed row structures through a web service. However, web services are not involved/required in building 3-tier Swing applications.
    When dropping onto a page it does so like a string and doesnt give option to display the data in a read only form etc. Is there anything we need to do, to get the functionality.
    It's more of what you don't need to do :-)
    Just leverage the active data model that the ADF application module provides. You can read more about it in section 4.5 "Understanding the Active Data Model" of the ADF Developer's Guide for Forms/4GL Developers on the ADF Learning Center at http://www.oracle.com/technology/products/adf/learnadf.html). Your UI's bind to view object instances in the data model, and your UI's are automatically kept up to date without needing to write methods that return data. I short article I wrote that preceeded my writing the ADF Developer Guide content on this topis is here:
    http://radio.weblogs.com/0118231/stories/2006/01/26/theAdfBusinessComponentsActiveDataModel.html
    I know that when dropping a view object you get this functionality. Also was wondering if we were to pass an object of thios type back to the model it might not give us the rich functionality like input forms, like what Oracle provides if we were to drop a enitity view object.
    Just use the active data model and everything becomes totally easy, with no changes required to switch between local or three-tier deployment configurations.
    Trying to do everything with hand-coded DTO beans is really going the hard way.
    Could you help us regarding this?

  • Entity framework code first inheritance table per type problem

    hello
    i am using ODP.NET version 11.2.0.3.20. i am trying to get entity framework code first to work. one problem i have encountered is with inheritance. i have a "table per type" inheritance scenario. i have 3 tables involved. the base table is called "S_PERIOD" which maps to the base "Period" class. i have a derived table called "S_SEASON_QUARTER" that maps to the derived "Quarter" class. And I have another derived table called "S_SEASON_PRICE_PERIOD" that maps to the derived "PriceBreak" class. for testing purposes i am trying to load all records. the problem is that every class instance ends up being of type "Quarter", which is incorrect. for whatever reason the provider thinks that every "S_PERIOD" record has a corresponding "S_SEASON_QUARTER" record. i took a look at the generated SQL and posted it down below. looking at this SQL it's clear to me why every object ends up being of type "Quarter". It looks like the provider is checking the "C2" field to determine the concrete type to instantiate. the problem however is that the "C2" field value provided by each derived table is ALWAYS equal to "1", which is a problem since this will result in the "case" statement always hitting the second "when" condition. does anyone have any idea how to fix this? thank you
    SELECT
    CASE WHEN (( NOT (("Project1"."C2" = 1) AND ("Project1"."C2" IS NOT NULL))) AND ( NOT (("Project2"."C2" = 1) AND ("Project2"."C2" IS NOT NULL)))) THEN '0X' WHEN (("Project1"."C2" = 1) AND ("Project1"."C2" IS NOT NULL)) THEN '0X0X' ELSE '0X1X' END AS "C1",
    CAST( "Extent1"."PERIOD_ID" AS number(10,0)) AS "C2",
    "Extent1"."START_DATE" AS "START_DATE",
    "Extent1"."END_DATE" AS "END_DATE",
    "Extent1"."NAME" AS "NAME",
    "Extent1"."TYPE_CODE" AS "TYPE_CODE",
    CAST( "Extent1"."CREATE_USER_ID" AS number(10,0)) AS "C3",
    "Extent1"."CREATE_DATE" AS "CREATE_DATE",
    CAST( "Extent1"."MODIFY_USER_ID" AS number(10,0)) AS "C4",
    "Extent1"."MODIFY_DATE" AS "MODIFY_DATE",
    CASE WHEN (( NOT (("Project1"."C2" = 1) AND ("Project1"."C2" IS NOT NULL))) AND ( NOT (("Project2"."C2" = 1) AND ("Project2"."C2" IS NOT NULL)))) THEN NULL WHEN (("Project1"."C2" = 1) AND ("Project1"."C2" IS NOT NULL)) THEN "Project1"."QUARTER_NAME" END AS "C5"
    FROM "DBO_SPACE_DEV"."S_PERIOD" "Extent1"
    LEFT OUTER JOIN (SELECT
         "Extent2"."QUARTER_NAME" AS "QUARTER_NAME",
         CAST( "Extent2"."QUARTER_ID" AS number(10,0)) AS "C1",
         1 AS "C2"
         FROM "DBO_SPACE_DEV"."S_SEASON_QUARTER" "Extent2" ) "Project1" ON ( CAST( "Extent1"."PERIOD_ID" AS number(10,0))) = "Project1"."C1"
    LEFT OUTER JOIN (SELECT
         CAST( "Extent3"."PRICE_PERIOD_ID" AS number(10,0)) AS "C1",
         1 AS "C2"
         FROM "DBO_SPACE_DEV"."S_SEASON_PRICE_PERIOD" "Extent3" ) "Project2" ON ( CAST( "Extent1"."PERIOD_ID" AS number(10,0))) = "Project2"."C1"
    Edited by: 997830 on Apr 3, 2013 8:40 AM

    An update:
    I tried again following this example to the letter:
    Using NuGet to Install and Configure Oracle Data Provider for .NET
    This time I used a console application as described in the example. Yes, I rebuilt the project after the NuGet install.
    I made the appropriate mods to App.config. I get the same error message as with the MVC example above.
    Does the ODP.Net driver really work with EF? If so, can anyone provide me with a working sample project?

Maybe you are looking for

  • Generic Extraction Problem

    HI There, I am trying to creat grneric extractor (with Table) on MBEW table .while i saving it is not saving.it is showing some some error . *ERROR IS Diagnosis You tried to generate an extract structure with the template structure MBEW. This operati

  • HELP!!My ibook won't boot (has nothing to do with the MAC OSX update)

    My preview, i photo, and all other picture galleries weren't working so i turned the computer off and when i tried to turn it back up it got to the grey screen with turning wheel but wouldnt go further even after an hour. Two questions: 1) is there a

  • Problem e mailing with photos attached

    I have written an e mail attached photos but am unable to send as my blackberry is using an old e mail address. How do I rectify this?

  • Wrt54G compatability issue

    Recently I have been unable to connect my PC with my wrt54g. When I try to connect to my linksys I get a response the settings do not match the settings required by the network.  Any suggestions on how I can fix this issue?

  • Danish dictionary

    I've just bought an iMac and I've noticed that in Pages '08 and in Mail there is an option to change dictionary, but I can not find my native one which is Danish. The list is there, but no choice of danish dictionary. Is it possible to have a 'system