Suitable EJB for operations on two tables

Hi All,
I would like to create a stateless session bean that removes a record from one table and inserts into another table. The method I will be using must be transactional integrity giving me "all or nothing proposition". How can I make sure the failure of the second database operation automatically results in the rollback of the first one.
Thank you.

Greetings,
Hi All,
I would like to create a stateless session bean that
removes a record from one table and inserts into
another table. The method I will be using must be
transactional integrity giving me "all or nothing
proposition". How can I make sure the failure of the
second database operation automatically results in the
rollback of the first one.The distributed transaction management of EJBs will take of this for you on the database side of things. What remains is that you code your bean appropriately for the transaction management model (BMT or CMT) of your bean...
First, remember that a Stateless SB cannot carry transaction contexts across multiple client->bean method calls, so your resource operations must occur within the same client method call:
* CMT *
...updateTables()
    try {
        /* Perform database operations... */
    catch( SQLException sqle ) {
        try {
            context.setRollbackOnly();  // Tell Trans. Mgr. operation failed
        catch( IllegalStateException ise ) {
            throw new EJBException( "Deployment error!" );
}* BMT *
...updateTables()
UserTransaction ut = null;
try {
ut = context.getUserTransaction();
catch( IllegalStateException ise ) {
throw new EJBException( "Deployment error!" );
try {
ut.begin();
/* Perform database operations... */
ut.commit();
catch( SQLException sqle ) {
try {
ut.rollback();
catch( IllegalStateException ise ) {
throw new EJBException( "Deployment error!" );
catch( <Exception+> e ) { ... }
The last <Exception+> in the above code can be one of:
* NotSupportedException - a consequence of calling ut.begin() and a transaction is already in effect
* RollbackException - if the transaction cannot be commited (another participant called a ROLLBACK)
* IllegalStateException - if a transaction is not in effect when ut.commit() is called
Note: All transaction method calls may also throw a SystemException in case of (um, well...), system errors.
In EJB 2.0 you can also get a HeuristicMixedException from ut.commit() if the trans. mgr. decided a ROLLBACK was necessary.
I hope this helps.
Thank you.Regards,
Tony "Vee Schade" Cook

Similar Messages

  • Can we implement the custom sql query in CR for joining the two tables

    Hi All,
    Is there anyway to implement the custom sql query in CR for joining the two tables?
    My requirement here is I need to write sql logics for joining the two tables...
    Thanks,
    Gana

    In the Database Expert, expand the Create New Connection folder and browse the subfolders to locate your data source.
    Log on to your data source if necessary.
    Under your data source, double-click the Add Command node.
    In the Add Command to Report dialog box, enter an appropriate query/command for the data source you have opened.
    For example:
    SELECT
        Customer.`Customer ID`,
        Customer.`Customer Name`,
        Customer.`Last Year's Sales`,
        Customer.`Region`,
        Customer.`Country`,
        Orders.`Order Amount`,
        Orders.`Customer ID`,
        Orders.`Order Date`
    FROM
        Customer Customer INNER JOIN Orders Orders ON
            Customer.`Customer ID` = Orders.`Customer ID`
    WHERE
        (Customer.`Country` = 'USA' OR
        Customer.`Country` = 'Canada') AND
        Customer.`Last Year's Sales` < 10000.
    ORDER BY
        Customer.`Country` ASC,
        Customer.`Region` ASC
    Note: The use of double or single quotes (and other SQL syntax) is determined by the database driver used by your report. You must, however, manually add the quotes and other elements of the syntax as you create the command.
    Optionally, you can create a parameter for your command by clicking Create and entering information in the Command Parameter dialog box.
    For more information about creating parameters, see To create a parameter for a command object.
    Click OK.
    You are returned to the Report Designer. In the Field Explorer, under Database Fields, a Command table appears listing the database fields you specified.
    Note:
    To construct the virtual table from your Command, the command must be executed once. If the command has parameters, you will be prompted to enter values for each one.
    By default, your command is called Command. You can change its alias by selecting it and pressing F2.

  • Suitable BTEs for REGUP and VBPA tables?

    Hi Gurus,
    What are the suitable BTEs for the REGUP and VBPA?
    can we create a new BTE for custom table?
    points will be rewarded for the quick responses.
    Thanks,
    KG

    Hi,
    Yes we cn create Buisness transaction events for custom table as shown below..
    To assign function module to the event, we need to create a product, say ZPRODUCT. Click as shown below:
    ·        Click on New entries.
    ·        Ensure that the Active check box is checked, otherwise BTE wouldnu2019t trigger.
    ·        Now we need to assign the function module created earlier to the event
    ·        Click as per the following screenshot:
    ·        Click on new entries and create the following entry for 00001120:
    ·        Test the BTE by creating a document through FB01 transaction.
    ·        To check whether the assignment field is filled with u201CDemo BTEu201D, display the created accounting document from FB03 and check for the Assignment value.
    Double click on the item.
    Triggering business object events:
    Update the Z function module that is created earlier by calling the function module SWE_EVENT_CREATE to trigger a business object event. Link this event to the workflow.
    For more info..follow this link
    ****************/Tutorials/Workflow/BTE/Demo2.htm

  • Inserting into two tables using JDBC Receiver Adapter

    I've defined following type for Receiver JDBC to save data in two different tables
    Name          Category     Type          Occurrence
    ReceiverDB_DT     Complex Type          
    STATEMENT     Element                    1..unbounded
    TABLE_NAME     Element                    1
    ACTION          Attribute     xsd:string     required
    TABLE          Element          xsd:string     1
    ACCESS          Element          Table1_DT     1
    STATEMENT2     Element                    1..unbounded
    TABLE_NAME     Element                    1
    ACTION          Attribute     xsd:string     required
    TABLE          Element          xsd:string     1
    ACCESS          Element          Table2_DT     1
    When I send data of two tables, it is showing data for both the two tables in MONI of PI System, but ultimately it shows only one table's data in message monitoring payload.
    what could be the problem?
    Thanks,
    -Haresh

    It solved!!!
    by just changing Occurrence only as rightly pointed by Ankesh
    Name          Category     Type          Occurrence
    ReceiverDB_DT     Complex Type          
    STATEMENT     Element                    1..unbounded
    TABLE_NAME     Element                    1
    ACTION          Attribute     xsd:string     required
    TABLE          Element          xsd:string     1
    ACCESS          Element          Table1_DT     1
    STATEMENT2     Element                    1..unbounded
    TABLE_NAME     Element                    1
    ACTION          Attribute     xsd:string     required
    TABLE          Element          xsd:string     1
    ACCESS          Element          Table2_DT     1
    Name          Category     Type          Occurrence
    ReceiverDB_DT     Complex Type          
    STATEMENT     Element                    1
    TABLE_NAME     Element                    1
    ACTION          Attribute     xsd:string     required
    TABLE          Element          xsd:string     1
    ACCESS          Element          Table1_DT     1..unbounded
    STATEMENT2     Element                    1
    TABLE_NAME     Element                    1
    ACTION          Attribute     xsd:string     required
    TABLE          Element          xsd:string     1
    ACCESS          Element          Table2_DT     1..unbounded
    Thanks a lot ankesh

  • Testing if two tables have the same structure

    Hi,
    I am looking for a tool that provides support for verifying whether two tables or databases schemas are same or not.
    I want to input two sql script files:
    1. one containing the create table for creating a table with name, id and email
    2. other containing the create table for creating a table with name, id and an alter table statement for adding the email.
    Now i have to test whether above two sql scripts will have the same impact on database.
    This is just the simpler form of veru complex sql script file that i am working on.
    Can DBunit do this and how.
    Its very urgent. I will appreciate any help.

    Repeated thread at: more clarification about previous problem

  • Strange problem when joining two tables

    Hi,
    I have recently encountered a strange problem on an Oracle 11gR2 database which is optimized for Datawarehouse usage.
    I am using two tables that have a relationship enforced by two fields of type NUMBER(10).
    The problem is that when I am joining these two tables very often I get strange results and when I re-execute the query I get a different result. I saw in the explain plan that the Hash Join is used for joining these two tables.
    select count(*)
    from recharge_history rh, recharge_history_balance rhb
    where rh.recharge_id = rhb.recharge_id
    and rh.recharge_id2 = rhb.recharge_id2
    and trunc(rh.recharge_date_time) between '30-Dec-2012' and '31-Dec-2012'
    If I explicitly set the Join method to some other type through SQL Hints, or if I use to_number function when joining (even though the two fields used for join in both tables are of NUMBER(10) type), I get the correct result, like for example below:
    select /*+ USE_MERGE (rh rhb) */
    count(*)
    from recharge_history rh, recharge_history_balance rhb
    where rh.recharge_id = rhb.recharge_id
    and rh.recharge_id2 = rhb.recharge_id2
    and trunc(rh.recharge_date_time) between '30-Dec-2012' and '31-Dec-2012'
    select
    count(*)
    from recharge_history rh, recharge_history_balance rhb
    where to_number(rh.recharge_id) = t_number(rhb.recharge_id)
    and to_number(rh.recharge_id2) = (to_number)rhb.recharge_id2)
    and trunc(rh.recharge_date_time) between '30-Dec-2012' and '31-Dec-2012'
    Thank you for your time.
    Edrin

    Hi, Edrin,
    961841 wrote:
    Hi,
    I have recently encountered a strange problem on an Oracle 11gR2 database which is optimized for Datawarehouse usage.
    I am using two tables that have a relationship enforced by two fields of type NUMBER(10).
    The problem is that when I am joining these two tables very often I get strange results and when I re-execute the query I get a different result. I saw in the explain plan that the Hash Join is used for joining these two tables.
    select count(*)
    from recharge_history rh, recharge_history_balance rhb
    where rh.recharge_id = rhb.recharge_id
    and rh.recharge_id2 = rhb.recharge_id2
    and trunc(rh.recharge_date_time) between '30-Dec-2012' and '31-Dec-2012'
    Don't try to compare DATEs with VARCHAR2s, such as '30-Dec-2012'. The VARCHAR2 '31-Aug-2012' is between '30-Dec-2012' and '31-Dec-2012'; so are '31-Aug-2013' and '30-Mar-1999'.
    That may not be your only problem, but it's still a problem.
    If you're getting incosistent results, then it sounds like a bug. Start a service request with Oracle support.

  • For All Entries with two tables

    Hi All,
             Can we use FOR ALL ENTRIES with two tables. for example
    SELECT * FROM MKPF INTO TABLE T_MKPF
             WHERE BUDAT IN S_BUDAT.
    SELECT * FROM MARA INTO TABLE T_MARA
             WHERE MTART IN S_MTART AND
                            MAKTL IN S_MAKTL.
    SELECT * FROM MSEG INTO TABLE T_MSEG
           FOR ALL ENTRIES IN  "T_MKPF AND T_MARA"
                  WHERE MBLNR EQ T_MKPF-MBLNR AND
                                 MATNR EQ T_MARA-MATNR.
    can we do it like this or any other way to do this plz tell. I waitting for your responce.
    Thanks
    Jitendra

    Hi,
    u cannot do like this....chek some documentation on it..
    1. duplicate rows are automatically removed
    2. if the itab used in the clause is empty , all the rows in the source table will be selected .
    3. performance degradation when using the clause on big tables.
    Say for example you have the following abap code:
    Select * from mara
    For all entries in itab
    Where matnr = itab-matnr.
    If the actual source of the material list (represented here by itab) is actually another database table, like:
    select matnr from mseg
    into corresponding fields of table itab
    where ….
    Then you could have used one sql statement that joins both tables.
    Select t1.*
    From mara t1, mseg t2
    Where t1.matnr = t2.matnr
    And T2…..
    So what are the drawbacks of using the "for all entires" instead of a join ?
    At run time , in order to fulfill the "for all entries " request, the abap engine will generate several sql statements (for detailed information on this refer to note 48230). Regardless of which method the engine uses (union all, "or" or "in" predicates) If the itab is bigger then a few records, the abap engine will break the itab into parts, and rerun an sql statement several times in a loop. This rerun of the same sql statement , each time with different host values, is a source of resource waste because it may lead to re-reading of data pages.
    returing to the above example , lets say that our itab contains 500 records and that the abap engine will be forced to run the following sql statement 50 times with a list of 10 values each time.
    Select * from mara
    Where matnr in ( ...)
    Db2 will be able to perform this sql statement cheaply all 50 times, using one of sap standard indexes that contain the matnr column. But in actuality, if you consider the wider picture (all 50 executions of the statement), you will see that some of the data pages, especially the root and middle-tire index pages have been re-read each execution.
    Even though db2 has mechanisms like buffer pools and sequential detection to try to minimize the i/o cost of such cases, those mechanisms can only minimize the actual i/o operations , not the cpu cost of re-reading them once they are in memory. Had you coded the join, db2 would have known that you actually need 500 rows from mara, it would have been able to use other access methods, and potentially consume less getpages i/o and cpu.
    In other words , when you use the "for all entries " clause instead of coding a join , you are depriving the database of important information needed to select the best access path for your application. Moreover, you are depriving your DBA of the same vital information. When the DBA monitors & tunes the system, he (or she) is less likely to recognize this kind of resource waste. The DBA will see a simple statement that uses an index , he is less likely to realize that this statement is executed in a loop unnecessarily.
    Beore using the "for all entries" clause and to evaluate the use of database views as a means to:
    a. simplify sql
    b. simplify abap code
    c. get around open sql limitations.
    check the links
    http://www.thespot4sap.com/articles/SAPABAPPerformanceTuning_ForAllEntries.asp
    The specified item was not found.
    Regards,
    Nagaraj

  • Table for Operation details.

    Dear all,
    scenario is like this.
    Production order -> 100 Qty. total 5 operation.
    10 -> 100Qty
    20 -> 100Qty
    30 -> 100Qty
    40 -> 100Qty
    50 -> 100Qty
    now i split the order at operation 30 split quantity 25qty.
    now order situation is like..
    10 -> 100Qty
    20 -> 100Qty
    30 -> 75Qty
    40 -> 75Qty
    50 -> 75Qty
    I am in need of report to pull this planned operation qty 75 Qty. order is created and released.
    any table where it reflects this split qty?
    Points will be rewarded.
    Thank you
    Manoj

    Hi All,
    I got it.. AFKO & AFVV using this two table i can get the info i am looking for.
    Thank you.

  • Unable to generate spool for two tables in report output

    Hi,
    I created report with two custom containers displaying two tables in output. When I execute the report in background spool is created only for one table in top custom container.
    What should be done to generate spool for both the tables in two different custom containers.
    Thanks,
    Abhiram.

    Hi,
    Check the bellow link for your requirement.
    <<link removed>>
    Regards,
    Goutam Kolluru.
    Edited by: kishan P on Feb 2, 2012 1:50 PM

  • How to use the TableSorter for two tables at the same view?

    Hello,
    I am using the TableSorter object in order to sort Dynpro tables.
    Suppose I have two tables at the same view, is it possible to use it seperatly for both of them?
    I assume that at the wdModifyView method I will need to catch the table that the user clicked on, yet I don't have an idea of how to do it...

    Hi Roy,
    Constructor of TableSorter
    public TableSorter(IWDTable table, IWDAction sortAction, Comparator[] comparators)
    So, you have to create instance of TableSorter class for each table on the view.
    best regards, Maksim Rashchynski.

  • Creating a external content type for Read and Update data from two tables in sqlserver using sharepoint designer

    Hi
    how to create a external content type for  Read and Update data from two tables in  sqlserver using sharepoint designer 2010
    i created a bcs service using centraladministration site
    i have two tables in sqlserver
    1)Employee
    -empno
    -firstname
    -lastname
    2)EmpDepartment
    -empno
    -deptno
    -location
    i want to just create a list to display employee details from two tables
    empid firstname deptno location
    and same time update  in two tables
    adil

    When I try to create an external content type based on a view (AdventureWorks2012.vSalesPerson) - I can display the data in an external list.  When I attempt to edit it, I get an error:
    External List fails when attached to a SQL view        
    Sorry, something went wrong
    Failed to update a list item for this external list based on the Entity (External Content Type) 'SalesForce' in EntityNamespace 'http://xxxxxxxx'. Details: The query against the database caused an error.
    I can edit the view in SQL Manager, so it seems strange that it fails.
    Any advice would be greatly GREATLY appreciated. 
    Thanks,
    Randy

  • ODBC driver hangs for two table joining

    Hi,
    I was trying to access two tables with the following statements. I used Oracle 8 ODBC driver to access Oracle 9 database. Statement 1 and 2 are working fine but executing Statement 3 will hangs the program.
    Statement1: SELECT (fields from two table) from (table1 and table 2) where table1.key=123
    Statement2: SELECT (fields from two table) from (table1 and table 2) where table2.key=345
    Statement3: SELECT (fields from two table) from (table1 and table 2) where table1.key=table2.key
    In the tables 1 and 2 there was no match key, but it should return NULL or nothing.. instead it hangs...
    Anyone encounter this problem before? Thanks a lot for replying me...
    Keith

    Hi,
    I have updated driver to the latest 8.1.7.8.10 which is availiable at the oracle-> download... but the problem still exit... execute sql statment 3 still hangs... :(...
    Thanks for your advice..

  • FOR ALL ENTRIES IN with two tables

    Hi Guy's,
    I have two int. tables, gt_likp, gt_lips.
    I need to use "FOR ALL ENTRIES IN" with this two tables.
      SELECT matnr
             vkorg
             vtweg
             ypcogsl
        FROM mvke
        INTO TABLE gt_mvke
    <b>    "FOR ALL ENTRIES IN gt_likp gt_lips"</b>
        WHERE matnr = gwa_liefpos_tab-matnr
        AND vkorg = gt_likp-vkorg
        AND vtweg = gt_lips-vtweg.
    How to do this?
    Please Help.
    Thanks in Advance.

    Hi,
    Fill gt_likp-vkorg values in a range(r_vkorg). Use gt_lips in FOR ALL ENTRIES.
    Basically you can use only 1 internal table with FOR ALL ENTRIES statement.
    SELECT matnr
    vkorg
    vtweg
    ypcogsl
    FROM mvke
    INTO TABLE gt_mvke
    FOR ALL ENTRIES IN gt_lips
    WHERE matnr = gwa_liefpos_tab-matnr
    AND       vkorg in r_vkorg
    AND       vtweg = gt_lips-vtweg.
    - SRao

  • Recursive query for finding parents and children against two tables

    Hi I have two tables where the data is stored hierarchially.
    I have found using connect_by, level and other oracle functions doing its job when the data is in one table.
    Can I traverse against two tables by using the same oracle functions.
    My Table A can go 2 levels deep in my hierarchy and level 3 and so forth has to be done against a different table.
    Appreciate your insight..
    Thanks in advance

    The number of levels that I can traverse in the first table is dynamic (sometimes 2 levels and sometimes 3 levels and actually no level limit) and then has to dynamically start looking at second table for finding any more levels in the other table.
    I was able to implement them seperately and union them.
    I was more looking for a comprehensive solution to reduce the number of lines that I have to maintain...
    Thanks in advance
    Edited by: user566193 on Jan 15, 2010 1:58 PM

  • What is needed for sorting on two fields in a table control

    Hi Everybody
    I am going to certification in a couple of days. I need some help and was hopeing that you  guys could help.
    What is needed for sorting on two fields in a table control?
         One sorted table and two processing blocks
         Two standard tables and one processing blocks
         Two standard tables and two processing
    Which one is corret??
    //Script

    Hi Kimallan
    I am not sure what is meant by a "processing block". However, it seems the question wants the original table order to be preserved. If so; as far as I understood the problem we need:
    itab_proxy[] = itab_main[] .
    "two standard tables"
    SORT itab_proxy BY field1 field2 .
    If we have a sorted table, then it is always sorted by its keys. So, the question seems to become obsolete for that option.
    Hope I've understood correct...
    Regards
    *--Serdar
    [email protected]

Maybe you are looking for