ORaMTS Support of Multiple Business Logic Servers

Does the 8.1.7.4.0 of Oracle Services For MTS beta support multiple business logic servers connecting to a single Oracle database instance using MTS DTC coordinated transactions without a single point of failure?
We would like to ensure that if any business logic server goes off line, that they will not effect any of the other business logic servers.
In the previous version of OraMTS, if the machine running OraMTS went down, no other machines were able to perform MTS distributed transactions. Does 8.1.7.4.0 of Oracle Services For MTS beta remove this dependency?

Mark, we came out with 8.1.7.4.0 precisely for the reasons you have stated. There is no longer a Windows NT Oracle Service For MTS per database. The logic to enlist Oracle connections in MTS transactions, and the logic to subsequently commit/abort these transactions is fully contained within the middle-tier dlls i.e. ORAMTS.DLL. This removes the single point-of-failure in pre 8.1.7.4.0 versions, and also makes the solution more scalable.

Similar Messages

  • Business logic in Database layer or in Middle layer.

    I am converting my form 6i client server application to .net 3 tier web architecture application using oracle 10g database.
    My application is a very data centric, millions of records calculations happen in many processes.
    I have a problem while presenting my design approach to engineering board in my company.
    Approach 1
    Put business logic in backend database layer.
    I proposed to put business logic in backend packages rather than putting it in middle .net layer and create web shell services in middle layer which would call these packages and show the data on screens.
    Approach 2
    Put business logic in middle tier .net layer.
    My company engineering board are more keen for this approach because they think this is the latest approach and now days nobody put business logic in database and moreover we would be having clear separation between data and logic.
    But my concern is we may have network latency issues in approach 2 because we need to move millions of records data back and forth between database and application server.
    Could you please suggest, which approach is best and why?

    My views:
    1. If it is a data centric operation, like you have mentioned, it will be a bottleneck to transfer the required data to middle tier for processing
    2. If you are going to support one and only one RDBMS as a backend ever, I don't see a reason to take an approach which is mostly taken in case one needs to support databases from different vendors as back end.
    3. If you are convinced that yours is the only application that would ever connect to this database, then you can add the business logic in the middle tier; If not, let it be in the database in form of triggers/procedures/functions/packages etc.
    4. Last but not the least, having business logic in the database would call for faster processing and that you can use all features of that particular RDBMS to full extent, in case needed.
    I always support having the business logic in the database layer (not that I hate business logic in application/middle tier) but there can be exceptions.
    Just my two cents :-)

  • Future support for using PL/SQL core business logic with ADF BC

    We want to migrate our large Forms client/server (6i) application to ADF, possibly using a migration tool like Ciphersoft Exodus.
    One scenario could be to use ADF BC and ADF-Faces or a different JSF-Implementation for presentation and business layer but keep our heavy PL/SQL-businesslogic inside the Oracle database in packages, triggers, functions and procedures.
    This scenario could be chosen due to the huge amount of interconnected logic inside the database (10 years of development; no technical components; any package may access any table and more of this kind of dependencies). The business logic nowadays held in Forms client will be moved mainly into the database as a prerequisite to this scenario.
    Choosing this "keep-logic-in-DB"-scenario we need a good support by ADF BC to do so. We know and prototyped that it is possible to call some PL/SQL via JDBC from ADF BC and it is possible to use stored procedure calls for standard business entity data access (ins, del, upd, ..). But this does not solve our problems. We want to reuse core business logic coded in PL/SQL. This is much more than change the ADF standard behavior for an update with an own PL/SQL-call.
    Now my question:
    Will there be a kind of sophisticated support to use ADF BC in combination with database-kept logic?
    If so, when will this happen and how will the common problems of transactional state inside the database and inside the ADF BC be solved? Any plans or ideas yet?
    Many other clients do have similar applications built in Forms and PL/SQL and would be glad to hear about a path of direction.
    I've read the technical article 'understanding the ADF BC state management feature' which you have contributed to. One current limitation is pointed out there: Using PL/SQL with ADF BC limits ADF AM pooling to 'restricted level' which reduces scalability.
    Are you aware of additional main problems/tasks to solve when using PL/SQL heavily with ADF BC, which we have to think about?
    Thank you for any response.
    Ingmar

    My main problem is two 'concurrent' areas holding state in an application system based on DB-stored PL/SQL-logic in combination with ADF BC.
    For a new System everything can be made ok:
    Sure, it is possible to build a new system with the business logic included in ADF BC only. All long-living state will be handled in the BC layer ( including support for UnitsOfWork longer than the webside short HTTP-requests and HTTP-sessions and longer than the database transactions.
    For an old system these problems arise:
    1. DB data changes not reflected in BC layer:
    Our PL/SQL-logic changes data in tables without notifying the ADF BC layer (and its cache). To keep the data in ADF BC entity objects identical to the changed database content a synchronization is needed. BC does not know which part of the application data has been changed because it has not initiated the changes through its entity objects. Therefore a full refresh is needed. In a Forms4GL environment the behavior is similar: We do frequently requeries of all relevant (base)tables after calling database stored logic to be sure to get the changed data to display and to operate on it.
    -> Reengineering of the PL/SQL-logic to make the ADF BC layer aware of the changes is a big effort (notifying BC about any change)
    2. longer living database transactions
    Our PL/SQL-logic in some areas makes use of lengthy database transactions. The technical DB-transaction is similar to the UnitOfWork. If we call this existing logic from ADF BC, database state is produced which will not be DB-committed in the same cycle.
    This reduces scalability of ADF BC AM pooling.
    Example:
    a) Call a DB-stored logic to check if some business data is consistent and prepare some data for versioning. This starts a DB-transaction but does not commit it.
    b) Control is handed back to the user interface. Successful result of step a) is displayed
    c) User now executes the versioning operation
    d) Call another DB-stored logic to execute the versioning. DB-transaction is still open
    e) Business layer commits the transaction automatically after successful finishing step d). Otherwise everything from a) to e) is rolled back.
    -> redesign of this behavior (= cutting the 1to1 relation between LogicalUnitOfWork and the technicalDatabaseTransaction is a big effort due to the big amount of code.

  • How to Display Multiple Rows in Business Logic Editor

    Hi Friends, I took the standard BAPI:   BAPI_MATERIAL_GETLIST and followed the SAP- xMII documentation. It is not showing any records. Does any one have good example. Please let me know.
    If I run the same BAPI from R3 system, it is showing 7 records.
    Can I display the data in Business Logic editor? Please help.

    Hi Dilip
              I have gone through your post and I think that the info provided by yu is not sufficent to answer yur question exactly but i would suggest yu the following solutions :-
    1. It may be the case that yu are not looping on the Response XML from the BAPI. You need to loop on the repeating node of the Response XML of the BAPI and on each loop yu need to append the record read to a xMII Output XML document using Row structure. Finally Yu can assign the document to the Output variable.
    2. Check for the type of Output Variable. I guess that it's String type. In that case, convert it to xml type.
    Hope it helps.
    Amit

  • Can we use WHO columns in Business Logic implementation

    Hi,
    Can we use WHO columns for business logic implementation..?
    From one table I need to pick up the latest record. I have a ActionDate column in the table which stores the date of the action.
    But on the same day there can be multiple action records. ie Multiple records have same ActionDate.
    Select * from action_table where action_date=(maximum action_date)
    The above query will return more than 1 record.
    Now can I use the Creation_Date which is a WHO column to identify the latest record..?
    Will it introduce any issues if I use creation_date WHO column?
    Usage of WHO column in application logic, Is it against the Standards ?
    Thanks a lot.

    I guess you are talking about populating the value using the history column creation_dt from EO.
    If so, you can use then. We are using them in all our applications to populate WHO columns of our table.
    Infact as far as I know, even Oracle application uses them.
    They generally populate the timestamp, so you may need to format them when doing date comparisons.
    Hope that helps.
    Amit

  • Multiple Business Systems for Multiple Receivers?

    hi,
    idoc > xi -> multiple receivers with xml payload
    I have a scenario where i have to configure multiple receivers for each Supplier from an IDOC. All the receivers will be either HTTP or SOAP.
    When the mapping would be the same for all the Suppliers but during configuration we have to determine the receiver based on an IDOC value to route the xml via HTTP or SOAP
    For this to achieve do we have to create multiple business systems for each receiver?
    If i create a receiver in the business service how can we determine the interface mapping in this scenario?
    Thanks,
    Tirumal

    Hi Tirumal,
    <i>For this to achieve do we have to create multiple business systems for each receiver?</i>
    As you know,Business system is a logical name for the Techincal Systems, Theoretcially it is not required to create different Business systems for the each receivers.
    Generally Business Systems are grouped/created based on the Business Process/Functionality/Type of Receivers etc.
    So if you think, your each receiver is of type different type/process then create different Business systems.
    It depends~
    If you create Business Service, then you need to add your Message Interfaces explicitly into the Business Service( By open the Business Service->You can see the Sender/Receiver Interface tabs).
    Hope this helps,
    regards,
    moorthy

  • How to get Custom Time Correction business logic implement for ESS in R/3?

    Hi Experts,
    I am in trouble of implementing the custom requirement of correcting the time in ESS. I have to implement the time corrections as per business logic.
    Can any body tell me where to do this?
    What I need is suppose employee DWS is from 9:30 AM to 6:00 PM and suppose he forgot to punch the In time and then corects the entry for 9:30 AM in ESS then it get inserted into the R/3 data but now requirement is if support the employee has punched but at 10:00 AM and then corrects to 9:30 AM then it does not change the 10:00 AM and we wanna deleted these 10 AM entry.
    Thanks in advance.

    I have solved by created enhancement spot in PT_COR_REQ
    for method IF_EX_PT_COR_REQ~POST_VIA_BLOP
    Regards,
    Gaurav Patwari

  • Best way to structure Business Logic

    Hi Experts,
    I am using Web Dynpro for my front-end and application services for the back-end. Which of these is the recommended way to structure the layout of my business logic:
    1) Keep everything in the 'src' folder of the CAF ejbmodule. Structure through the use of packages.
    2) Create an external Java DC, keep all code in there and call the code from the application services. Structure code through both packages and the use of multiple DCs.
    3) Create a child Java DC in the CAF ejbmodule project, keep the code there. Structure code through both packages and the use of multiple DCs.
    4) Some other way which I do not know of???
    I think that (2) is the best way to to this, but I'm not sure and I also don't know how to make the code in the Java DC accessible from the CAF in 7.1. In 7.0 one was required to assemble the Java DC into a J2EE Server Library project and then create the required dependencies. How does this work in 7.1?
    Thanks,
    JP

    Hi JP,
    > When you refer to "regular reference stuff" I take it
    > you mean the application/library references in your
    > 'application-j2ee-engine.xml' file?
    Correct.
    > Is there an easy way to discover which
    > application/library to reference, for example, if I
    > wanted to make use of 'com.sap.security.api.IUser'?
    >
    > It was always very difficult to find the correct DC
    > containing the required classes in 7.0 (usually one
    > had to use a JAR class finder). Is there an easier
    > way in 7.1?
    Hmm, I guess it would be a rather tough task to have a mapping between all classes (or even packages) and DCs. However it should be fairly intuitive to infer the DC from the class / package name. If still in doubt, you can search for its usage on help.sap.com - most probably you'll find the DC name as well therein.
    > Finally, how about Web Dynpro classes (like
    > com.sap.tc.webdynpro.services.sal.um.api.IWDClientUser
    > ): I'm not sure if it will ever be necessary, but can
    > they be accessed from Java DCs?
    According to the <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/javadocs">NW public javadocs</a>, the classes in the com.sap.tc.webdynpro.* packages are "Services in the Web Dynpro runtime environment that can be called by custom coding in Web Dynpro applications", so they're not intended for general use in any type of app.
    HTH!
    -- Vladimir

  • 3rd party tech systems for multiple business systems...

    I think this might a very stupid question but still would like to post it..:).. In a 3parties involved scenario, can 1 technical system be assigned to multiple business systems , if all business systems refer to the same 3 party..or does each 3rp party business system needs its own technical system..
    Also I need to move only 1 product and the SWCV assigned to the product to QA..I do not want to export entire SLD..By exporting this single product and importing into the SLD of QA, I hope it will not overwrite the SLD components of the QA box but add this new product as delta.
    -Teresa

    Hi Teresa,
    >>>Also I need to move only 1 product and the SWCV assigned to the product to QA..I do not want to export entire SLD..By exporting this single product and importing into the SLD of QA, I hope it will not overwrite the SLD components of the QA box but add this new product as delta
    I believe you can only do an incremental export/import
    sld does not allow importing/exporting one product...
    Remember to do a backup of your QA SLD
    (from the SLD - administration)
    then if you make a mistake nothing will happen
    about the second question:
    <i>"Business systems, which name the logical receiver independently of technical properties. For example, a business system might be a client of an SAP system.
    Technical systems with which the hardware of the system is specified in more detail (server data, and so on)."</i>
    this should be possible not only for SAP systems
    Regards,
    michal
    Message was edited by: Michal Krawczyk

  • Multiple business areas

    Hi All,
    In invoice multiple business areas are there . that time any business area is not updating in vendor line item. 
    Is there any way to solve this problem?
    Please tell me. It is uregent
    Thanks
    Krishna

    Hi Krishna,
    You have multiple business area and wants to update in Vendor line item, system is showing blank in busuiness area field.
    As this is very much logical as you have not defined any split ratio between the busienss areas. How the system will split the vendor line items.
    Ex:- You have vendor invoice of Rs 10000/-
    it consits of two business area  4000/-(Mumbai) and rest 6000/- for Kolkata.
    But you have not mentioned any split ratio.
    You can do this using document split concept.
    Regards
    Ashish Jain

  • Multiple Lotus Mail Servers

    Hi,
      In our landscape there are multiple Lotus Mail Servers.
      The requirement is to give a direct link to their Mailboxes.
      I understood that this can be realized by a URL iview to the Mailbox and using User Mapping through a HTTP System.
    Now I am trying to findout the best practice to give access to their mail boxes.I have identified the following...
            1. A page where we place multiple links directing to the different mail servers and the user has to pickup his mail server.
            2. Put the mail server details in the user profile and code a small application which will read the details and will redirect to the respective mail server.
        I would request you to suggest and share your experiences.
    Thanks & Regards
    Mrutyunjay

    Hi Mrutyunjay,
    I would suggest that you go for the second option. This saves the user a unecessary click.  Create a custom attribute that allows you to determine the user's mail server. Create as many system objects as you have Lotus mail servers and have a look into SAP Library to find out how to use the <a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/21/dfd241cb76c417e10000000a155106/frameset.htm">Dynamic System Resolution service</a>.
    <i>The Dynamic System Resolution feature enables you to create a service that selects at runtime the system to which an iView connects.
    Generally, an iView connects to a system that is defined at design time. With dynamic system resolution, an iView can select at runtime from among several systems, based on the location of the current user, network traffic or any other logic.
    For example, for a specific iView, you may want users in Europe to connect to a system in Germany while users in the United States connect to a similar system in New York.</i>
    Best regards,
    Martin

  • Separating presentation from business logic.

    I recently wrote an article on how to separate JSP presentation from the business logic without a complicated framework.
    http://labs.revision10.com/?p=16
    I haven't seen this exact approach taken before, but believe it works fairly well for most simple web applications. Applications which tend to attract many developers to PHP do to its simple architecture.
    What are your thoughts on this approach?
    Thanks!

    Here goes the answers to your question. (according to my knowledge)
    1. Deciding a server is depends on your design of the application. According to point 3, you are better to use JMS with publish and subscribe model. In this case you have to choose a JMS server that supports your needs
    2. Again it is depends on your Design, one way is to put a shared memory for data and write a thread that reads from the shared memory or use java.net package or use JMS etc.
    3. Create one JMS source and all other will be JMS destinations.
    4. You can use EJBs or Java classes based on your requirements and design to process the data.
    5. Using AWT or Swing as a presentatin layer is good. But you desperately want to display it using Win 32 objects, then why dont to go for Microsoft technologies??

  • Business logic beans & struts

    hello
    i am new with struts and am developing a application using it. i have some question:
    1) Can one business logic bean interact with another business logic bean with out any intermediate jsp in between them?
    2) How can we call methods of business logic beans using beans tags in jsps and then how to handle the values which these called methods return?
    Help please.

    1) Can one business logic bean interact with another
    business logic bean with out any intermediate jsp in
    between them?yes. just specify that int the strutsconfig.xml that the action forward for the action is to another action.. ie
    <action path="/AircraftLogFileInsert" type="avbase.winairweb.struts.action.AircraftLogFileUpdateAction" scope="session" name="AircraftLogFileForm" validate="true" input="/pages/AircraftLogFileSummary.jsp">
                <forward name="insertsuccess" path="/do/AircraftLogFileList"/>
                <forward name="updatesuccess" path="/do/AircraftLogFileSummary"/>       
                <forward name="startOfSection" path="/do/AircraftLogFile"/>
            </action>In this example all request to /do/* are to struts actions
    2) How can we call methods of business logic beans
    using beans tags in jsps and then how to handle the
    values which these called methods return?
    ok this is acutally multiple questions.
    To use the tags that come with struts you need to first declare them in your jsp file.
    ie...
    <%@taglib uri="winairweb" prefix="winair"%>
    <%@taglib uri="struts-bean" prefix="bean"%>
    <%@taglib uri="struts-html" prefix="html"%>Now you can use these tags. in your jsp.
    <html:form action='myaction'>
        <html:text property='myBeanProperty'/>
    </html:form>The only trick with struts is this. Your form objects are used to populate html form contents. hence the above example would use the form associated with current action to populate where i wrote <html:text property='myBeanProperty' /> with the contents of the form property myBeanProperty..
    I know that wordy.. sorry.
    if you like email me directly [email protected]

  • Business Logic across applications

    Is it possible to share business logic between multiple applications (different workspaces). If yes, what is the bext way to do it so that when the business logic (in a centralized location) changes all the applications will be updated with the new change. Is this even feasible and will that require re-deployment?
    Any thoughts on this is appreciated.
    Thanks.

    You didn't specify what type of business logic and what technologies you are looking at.
    But for example with ADF Business Components here is what you can do:
    http://download.oracle.com/docs/html/B25947_01/bcadvgen007.htm#CHEFECGD

  • BC4J - Big Project - Business Logic

    What is the suggested best practice on where to locate business logic in a big application?
    It would appear that entity objects are good for table/domain level validation.
    View objects are good to ensure that the data between multiple tables is copesthetic.
    But where would one place business process logic that could potentially span multiple views and even multiple application modules?
    Also what is the difference between retrieving an application module using the ApplicationModuleHome.create function and from the applicationpool?
    Thanks,
    Marty
    null

    re: "duplicate"
    You betchya. This is mimicing a SmallTalk implementation I worked with years back.
    In some cases, the checks are not duplicated because they share "objects" instantiated for those entities. And in the case of 3 frames all with the same field.. only one check fires ( the active frame where they entered the data ) and all the others don't fire.. they just clean up when the user corrects the data.
    In some cases putting validation in the EO appears to just add work at both ends, and adds another layer of confusion for programmers. ( I.E. A programmer is looking at the code.. it is NOT apparent without complete knowledge of the EO code what is and is not being checked. Is that maintainable? maybe, maybe not )
    Here's an example of an edit check... confirming that a part number is valid for a custom Find Panel.. and while we're at it, let's turn * to % for a LIKE statement so all our Access users don't get confused:
    String oldPart = ((ImmediateAccess)partNumber_tf.getDataItem()).getValueAsString().toUpperCase();
    String wildPart = new String();
    if (oldPart.indexOf("*") > 0)
    { wildPart = oldPart.substring(0,oldPart.indexOf("*"))+"%"+
    oldPart.substring(oldPart.indexOf("*")+1);
    oldPart = wildPart;
    try { ((ImmediateAccess)partNumber_tf.getDataItem()).setValue(oldPart); }
    catch ( Exception e0 ) { System.out.println(e0.toString()); }
    if (oldPart.indexOf("%") < 0)
    if (!isValidPartNumber(oldPart) )
    try { ((ImmediateAccess)partNumber_tf.getDataItem()).setValue(""); }
    catch (Exception e0) { System.out.println(e0.toString()); }
    boolean isValidPartNumber( String partNumber )
    boolean isValid = true;
    if (!partNumber.equals("") )
    try
    Statement call= OpenDBConnections.myJdbcConnection.createStatement();
    ResultSet rset=call.executeQuery("SELECT getPartDescription('"+
    partNumber+
    "') AS PART_DESC FROM DUAL");
    rset.next();
    if (rset.getString("PART_DESC").startsWith("ERROR") )
    statusLine_tf.setText("USER ERROR: Invalid Part Number!");
    Toolkit.getDefaultToolkit().beep();
    isValid = false;
    else
    { status_tf.setText(""); }
    rset.close();
    call.close();
    catch (SQLException esql)
    {System.out.println(esql.toString());}
    return isValid;
    Notes:
    1. I do a JDBC call cuz I don't want a lock on my target records. It's a bloody read only request. ( Or is there a way to set that up..as far as I can tell UPDATABLE seems to affect the UI when defined in the View Object.. it has nothing to do with locking? The EO may be updatable by the application... by read only for this particular purpose... )
    2. If I understand you right, you are saying to do the IsValidPartNumber code in the validateEntity() method. I want it NOW.. not at commit time.. or is validateEntity "run" on any change to the EO? Or should it be put on the impl setr so that the try catch around the setValue() of the DACF element will catch it? ( I like that )
    3. The status line and beeping is managed by the try catch around the dacf setValue(), as well as the clearning of the appropriate DACF control and refocus (if needed ).
    4. And that the validation should REALLY be applied to a DOMAIN of "PartNumberDomain".. since it really applies to many EOs with attributes that are of domain "PartNumberDomain".
    That last item is VERY interesting to me. I used such stuff in Rdb in the database. Catch is that domain and their power and implementation is scantily described in training and in the online Help.
    I'm guessing that when I do a DACF entry that the setr in the EO can be used to validate.. and that the DOMAIN edit gets automatically executed as well.. and that it shows up as a JBOException to the try/catch at the application source level for the programmer to deal with, right?
    Note that when Dec/Rdb started on this sorta course 10 years ago, it was clear to everyone that it was a house of ravioli code.. and that without a POWERFUL object repository it was very, very difficult for la rge projects to be built so that programmers would have clear visibility to all the conditions/issues.
    Want to bet that you can count on one hand (or less) the number of customers outside of Oracle who have implemented domain validation code and applied it to Entity Object attributes?
    Note that in all these cases, I still need to implement the same checks in my triggers to protect the database against ALL comers. So everything gets checked twice.
    re: BC4J, wrappers, and java stored procedures. All interesting ideas. I booted that option out during this implementation because the goal was to implement the application... I estimated we'd extend the project another 2-3 months by taking the approach you imply, due to learning curve, conceptual errors on our part during implementation, bugs in the Oracle code awaiting fixing, ad nauseam. That rough estimate has been born out by the fact that JDEV issues of implementation has caused my project to slide over 2 months. Simple, easy things I had alotted a short effort for based on experience with MS Access, Delphi, Forms and other tools turned out to wildly off base. ( Example: the imageControl that simply doesn't work, but is documented as being so easy and quick to put in ).
    Thanks again. BTW. If you don't know, I'll be at Oracle HQ on Friday the 16th. Hope to see you again, if just to say hi.
    null

Maybe you are looking for

  • Commitment Item in SD Billing document (Fund Managment) ECC6

    Hi, We are upgrading from 4.6C to ECC6 and have activated Fund Managment (EA-PS). At the time of carrying out the Billing in SD we are getting a error that no commitment item available for gl account but if I use the same revenue account and create a

  • ANOTHER Lenovo Y50 case defect issue and terrible customer service

    I don't normally do forums but have been so infuriated by Lenovo customer service I felt obliged to sign up and share my experience. I bought a Lenovo Y50-70 in November 2014. Within one month I noticed a small plastic part near the hinge was missing

  • Edit Column Width in Expanded View

    I'm not too thrilled about the new iTunes, mostly because of the loss of easy navigation. My library is full mostly of classical music, and the track names are often very long [eg. "Couperin: Pièces de Clavecin, Onziême Ordre - Les Jongleurs, Sauteur

  • Updated to the 7 version.  Under contacts there is no option for adding Notes.  How do you get it back?

    I updated to the 7 version.  When you add a contact now, you no longer have the option for adding notes.   Also all the apps I purchased are  no longer on my desktop. The apps are shown under settings but I do not see where you can add them to the de

  • How to burn valid video DVDs from VIDEO_TS folder

    Hello, Sorry if this topic is not in the proper location, but as the question is broad, I thought this was the best place to ask. I just want to burn files located in a VIDEO_TS folder, properly ripped on the hard drive, so as to make a valide Video