You are not using pure SQL somewhere in this part? Cause if you do, this code run in 
another transaction than the CMP-code and thus don't see the changes of the CMP before 
that transaction is commited.
For me this resulted in the junit test failing, and I had to commit the 
usertransaction inside the junit test method for the SQL to see the changes.

BTW: Is it possible to let CMP-code and SQL-code these run in the same transaction 
(connection)?

-- 
MVH
Marius Kotsbak
Boost communications AS

On Sat, Jan 04, 2003 at 11:09:17PM -0800, Kris wrote:
> Hi, any help with this one would be appreciated.
> 
> ** Environment:
>    - Plain out-of-the-box jboss-3.0.4_tomcat-4.1.12
>    - Window NT, 4.0, patch-level 5
> 
> ** Scenario:
>    - A stateless session bean method, i.e. updateShippedQuantities,  
> loops on an entity bean method call, i.e. updateShippedQuantity, which 
> updates one of the bean persistent attribute, i.e. OrderItem collection 
> element.
>    - The session bean method needs to be run under a transaction.
>    - A Junit test case exercises the session method 
> updateShippedQuantities,  then verifies that the entity bean has been 
> updated accordingly
>    - The unit test case fails if the session method is run under a 
> transaction, but succeed otherwise (e.g. run with transaction type being 
> Supports).
> 
> ** Log4j data
>    - Two Junit test case runs, one with transaction 
> (transaction=Required), one without (transaction=Supports).
>    - Log4j data were edited for readability, relevancy, comments
> 
> 
> 
> ** Where I need help/understanding (please refer to inline the EJB 
> method definitions,  Junit test case, and log4j output)
> 
>    - Why is there an SQL query at time 20:49:17,673 (the transaction 
> based test case), and none was made at time 20:52:48,547 (test case with 
> no transaction)? Both logs were generated following the 
> orderCtrl.getOrderValue(order1.getId()); test case call. The only 
> difference is the existence/non-existence of a transaction
> 
>    - I'm assuming that even though the bean ejbStore method is being 
> called (i.e. at time 20:49:04,224) this doesn't mean that the 
> Transaction manager will actually write the bean to the DB. Right? From 
> the Jboss documentation did I read that in an 'optimistic' transaction 
> scenario, the transaction manager will established if the bean state has 
> been modified between the transaction start/end, and write/don't-write 
> the data. But then how is this 'bean-state-has-changed' being 
> established? In my case, the bean persistent attribute being modified is 
> a specific attribute (shippedQuantity) of OrderItem instances contained 
> in a Collection that the bean manages. Is it possible that the 
> transaction manager may not have detected that the bean state has 
> changed, since the changes are 'buried' way down a collection element 
> class attribute?
> 
> Thanks for any input/info you may have, I've been staring at this one 
> for a couple days now, and I can only see 'stars' ;-)
> 
> Kris
> 
> 
> 
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> 
> 
> ++++++++++++++++++++++++++++++
> OrderController session method
> ++++++++++++++++++++++++++++++
>    /**
>     * Sets the collection order item shipped quantity. The method is 
> 'wrapped'
>     * inside a transaction, so that all the items in the <code>items</code>
>     * collection are updated successfully, or none is if an error occurs.
>     *
>     * @param orderId The order id to set
>     * @param items A collection of OrderItem instances, with an updated
>     *              shipped quantity field
>     *
>     * @ejb.interface-method
>     *    view-type="both"
>     *
>     * @ejb.transaction
>     *     type="Supports" <== This one was modified to Required
>     */
>    public void updateShippedQuantities(String orderId, Collection items){
>        logger.enter();
> 
>        try{
>            OrderLocal order = orderLocalHome.findByPrimaryKey(orderId);
> 
>            logger.info(">>>>>>> Running with Transaction.type=Supports 
> <<<<<<<<<");
>            Iterator iter = items.iterator();
>            while(iter != null && iter.hasNext()){
>                OrderItem item = (OrderItem)iter.next();
>                order.updateShippedQuantity(item);
>            }
>        } finally{
>            logger.exit();
>        }
>    }
> 
> 
> ++++++++++++++++++++++++++++++
> Order Entity bean method
> ++++++++++++++++++++++++++++++
> 
>    /**
>     * Sets an order item shipped quantity. The method is 'wrapped' inside
>     * a transaction, so that all the items in the <code>items</code> 
> collection
>     * are updated successfully, or not is if an error occurs.
>     *
>     * @param item An OrderItem instances, with an updated
>     *              shipped quantity field
>     *
>     * @ejb.interface-method
>     *    view-type="both"
>     *
>     * @ejb.transaction
>     *     type="Supports"
>     */
>    public void updateShippedQuantity(OrderItem item){
>        logger.enter();
>        try{
>            ArrayList items = (ArrayList)getItems();
>            int index = items.indexOf(item);
>                      if(index >= 0){
>                OrderItem currentItem = (OrderItem)items.get(index);
>                currentItem.setShippedQuantity(item.getShippedQuantity());
>                logger.info("Set shipped quantity " +
>                            currentItem.getShippedQuantity() +
>                            ", on item " + currentItem.getProductId());
>            } else{
>                logger.error("Order item not found " + item.getProductId());
>                throw new InvalidParameterException(
>                    "Order item not found " + item.getProductId());
>            }
>        } finally{
>            logger.exit();
>        }
>    }
> 
> 
> ++++++++++++++++++++++++++++++
> Junit test case
> ++++++++++++++++++++++++++++++
>    /**
>     * Test of updateShippedQuantities method,  of
>     * class com.newmancon.tos.ejb.order.interfaces.OrderCtrl
>     *
>     * Simple succes path
>     */
>    public void testUpdateShippedQuantities1() {
>             //
>             // ... intitialize the test case
>             //
> 
>            // Test the OrderController controller session method of 
> interest
>            orderCtrl.updateShippedQuantities(order1.getId(), orderItems1);
> 
>            // Get the order value, and verify that the shipped 
> quantities have been
>            // modify
>            OrderValue orderValue = orderCtrl.getOrderValue(order1.getId());
> 
>             //
>             // Verify the item shipped quantities using the above 
> orderValue.
>             //
>    }  
> 
> 
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +
> +  LOG4J output
> +
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>  >>>>>>>>>>>>>>>> START OF JUNIT TEST CASE, RUN #1       
> <<<<<<<<<<<<<<<<<<<<<<
>  >>>>>>>>>>>>>>>> TEST RUNNING WITH A TRANSACTION  <<<<<<<<<<<<<<<<<<<<<<
>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> // Junit setup initialization
> 20:49:03,793 DEBUG [OrderEJB:830] {Order ejbStore}Enter
>    20:49:03,813 INFO  [OrderEJB:831] {Order ejbStore}Storing Order 
> 8caad38242b7acda00ef1df6be3b8e59
>    20:49:03,813 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8caac3d242b7acda01f2a9daf112c5b5, shipped: 0.0
>    20:49:03,853 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8caac6cb42b7acda01ee69d33ad1fd70, shipped: 0.0
> 20:49:03,863 DEBUG [OrderEJB:839] {Order ejbStore}Exit
> 
> 20:49:03,974 DEBUG [OrderControllerEJB:427] {OrderController 
> setSessionContext}Enter
> 20:49:03,984 DEBUG [OrderControllerEJB:429] {OrderController 
> setSessionContext}Exit
> 
> 20:49:04,024 DEBUG [OrderControllerEJB:120] {OrderController 
> ejbCreate}Enter
>    20:49:04,024 INFO  [OrderControllerEJB:128] {OrderController 
> ejbCreate}Created 
> com.newmancon.tos.ejb.order.ejb.OrderControllerSession@b98a06
> 20:49:04,054 DEBUG [OrderControllerEJB:130] {OrderController ejbCreate}Exit
> 
> // Test case method call: updateShippedQuantities
> 20:49:04,084 DEBUG [OrderControllerEJB:228] {OrderController 
> updateShippedQuantities}Enter
>    20:49:04,104 DEBUG [findByPrimaryKey:117] {OrderController 
> updateShippedQuantities Order}Executing SQL: SELECT pk_key FROM 
> ORDER_TABLE WHERE pk_key=?
>    20:49:04,114 INFO  [OrderControllerEJB:238] {}>>>>>>> Running with 
> Transaction.type=Required <<<<<<<<<
> 
>    20:49:04,144 DEBUG [OrderEJB:651] {Order updateShippedQuantity}Enter
>        20:49:04,154 INFO  [OrderEJB:671] {Order 
> updateShippedQuantity}Set shipped quantity 1.0, on item 
> 8caac3d242b7acda01f2a9daf112c5b5
>    20:49:04,164 DEBUG [OrderEJB:683] {Order updateShippedQuantity}Exit
> 
>    20:49:04,174 DEBUG [OrderEJB:651] {Order updateShippedQuantity}Enter
>        20:49:04,184 INFO  [OrderEJB:671] {Order 
> updateShippedQuantity}Set shipped quantity 2.0, on item 
> 8caac6cb42b7acda01ee69d33ad1fd70
>    20:49:04,194 DEBUG [OrderEJB:683] {Order updateShippedQuantity}Exit
> 
> 20:49:04,204 DEBUG [OrderControllerEJB:248] {}Exit
> // End of updateShippedQuantities method call
> 
> // End of transaction, save changes
> 20:49:04,224 DEBUG [OrderEJB:830] {ejbStore}Enter
>    20:49:04,234 INFO  [OrderEJB:831] {ejbStore}Storing Order 
> 8caad38242b7acda00ef1df6be3b8e59
>    
> 
>//***************************************************************************************
> 
> 
>     // OK, even if this ejbStore method is called, does it really mean 
> the Transaction will actually write
>     // the data to the DB???? See the next ejbStore comment block down
>    //
>    20:49:04,244 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8caac3d242b7acda01f2a9daf112c5b5, shipped: 1.0
>    20:49:04,254 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8caac6cb42b7acda01ee69d33ad1fd70, shipped: 2.0
>    
> 
>//***************************************************************************************
> 
> 
> 20:49:04,264 DEBUG [OrderEJB:839] {ejbStore}Exit
> 
> // Test case orderCtrl.getOrderValue(order1.getId()); method call
> 20:49:17,673 DEBUG [Order:117] {Order}Executing SQL: SELECT account, 
> accountId, customer, customerId, items, provincialTaxRate, 
> federalTaxRate, shippingInfo, orderState, creationDate FROM ORDER_TABLE 
> WHERE (pk_key=?)
> 20:49:17,994 DEBUG [OrderEJB:830] {Order ejbStore}Enter
>    20:49:18,004 INFO  [OrderEJB:831] {Order ejbStore}Storing Order 
> 8caad38242b7acda00ef1df6be3b8e59
>    
> 
>//***************************************************************************************
> 
> 
>    // Sure doesn't look like the last ejbStore did actually write the 
> data to the DB (See: just last ejbStore log above).
>    // How come the shipped values are 0.0???
>    //
>    20:49:18,004 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8caac3d242b7acda01f2a9daf112c5b5, shipped: 0.0
>    20:49:18,014 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8caac6cb42b7acda01ee69d33ad1fd70, shipped: 0.0
>    
> 
>//***************************************************************************************
> 
> 
> 20:49:18,024 DEBUG [OrderEJB:839] {Order ejbStore}Exit
> 
> 20:49:18,064 DEBUG [OrderControllerEJB:385] {OrderController 
> getOrderValue}Enter
>    20:49:18,074 DEBUG [findByPrimaryKey:117] {OrderController 
> getOrderValue Order}Executing SQL: SELECT pk_key FROM ORDER_TABLE WHERE 
> pk_key=?
>    20:49:18,094 DEBUG [Account:117] {Order Account}Executing SQL: SELECT 
> type, description, creationDate FROM ACCOUNT WHERE (pk_key=?)
>    20:49:18,114 DEBUG [Customer:117] {Customer}Executing SQL: SELECT 
> creationDate, contactinfo_id_fk FROM CUSTOMER WHERE (pk_key=?)
>    20:49:18,154 DEBUG [ContactInfo:117] {Customer ContactInfo}Executing 
> SQL: SELECT familyName, givenName, telephone, email, creationDate, 
> address_id_fk FROM CONTACTINFO WHERE (pk_key=?)
>    20:49:18,184 DEBUG [Customer:117] {}Executing SQL: SELECT 
> account_id_fk FROM CUSTOMER_ACCOUNTS_ACCOUNT_CUSTOMERS WHERE 
> (customer_id_fk=?)
>    20:49:18,224 DEBUG [ContactInfo:117] {ContactInfo}Executing SQL: 
> SELECT familyName, givenName, telephone, email, creationDate, 
> address_id_fk FROM CONTACTINFO WHERE (pk_key=?)
>    20:49:18,294 DEBUG [Address:117] {ContactInfo Address}Executing SQL: 
> SELECT streetName, city, state, zip, country, creationDate FROM ADDRESS 
> WHERE (pk_key=?)
>    20:49:18,314 DEBUG [OrderEJB:830] {ejbStore}Enter
>        20:49:18,324 INFO  [OrderEJB:831] {ejbStore}Storing Order 
> 8caad38242b7acda00ef1df6be3b8e59
>        20:49:18,334 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8caac3d242b7acda01f2a9daf112c5b5, shipped: 0.0
>        20:49:18,344 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8caac6cb42b7acda01ee69d33ad1fd70, shipped: 0.0
>    20:49:18,364 DEBUG [OrderEJB:839] {ejbStore}Exit
> 20:49:18,384 DEBUG [OrderControllerEJB:400] {}Exit
> 
> 
> 
> 
> 
> 
> 
> 
>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>  >>>>>>>>>>>>>>>> START OF JUNIT TEST CASE RUN #2                 
> <<<<<<<<<<<<<<<<<<<<<<
>  >>>>>>>>>>>>>>>> TEST RUNNING WITHOUT TRANSACTION      
> <<<<<<<<<<<<<<<<<<<<<<
>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> // Junit setup initialization
>    20:52:03,812 INFO  [OrderEJB:831] {ejbStore}Storing Order 
> 8cae5da742b7acda01341183c7a62ea6
>    20:52:03,822 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8cae4e1542b7acda006d06b09ded6477, shipped: 0.0
>    20:52:03,832 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8cae50b442b7acda01346812e0b9cb88, shipped: 0.0
> 20:52:03,842 DEBUG [OrderEJB:839] {ejbStore}Exit
> 
> 20:52:27,276 DEBUG [OrderEJB:830] {Order ejbStore}Enter
>    20:52:27,286 INFO  [OrderEJB:831] {Order ejbStore}Storing Order 
> 8cae5da742b7acda01341183c7a62ea6
>    20:52:27,316 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae4e1542b7acda006d06b09ded6477, shipped: 0.0
>    20:52:27,326 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae50b442b7acda01346812e0b9cb88, shipped: 0.0
> 20:52:27,336 DEBUG [OrderEJB:839] {Order ejbStore}Exit
> 
> 20:52:27,396 DEBUG [OrderControllerEJB:427] {OrderController 
> setSessionContext}Enter
> 20:52:27,406 DEBUG [OrderControllerEJB:429] {OrderController 
> setSessionContext}Exit
> 
> 20:52:27,426 DEBUG [OrderControllerEJB:120] {OrderController 
> ejbCreate}Enter
>    20:52:27,436 INFO  [OrderControllerEJB:128] {OrderController 
> ejbCreate}Created 
> com.newmancon.tos.ejb.order.ejb.OrderControllerSession@1756db3
> 20:52:27,446 DEBUG [OrderControllerEJB:130] {OrderController ejbCreate}Exit
> 
> // Test case updateShippedQuantities method call
> // Begin of Transaction
> 20:52:27,466 DEBUG [OrderControllerEJB:228] {OrderController 
> updateShippedQuantities}Enter
>    20:52:27,476 DEBUG [findByPrimaryKey:117] {OrderController 
> updateShippedQuantities Order}Executing SQL: SELECT pk_key FROM 
> ORDER_TABLE WHERE pk_key=?
>    20:52:27,496 INFO  [OrderControllerEJB:238] {}>>>>>>> Running with 
> Transaction.type=Supports <<<<<<<<<
> 
>    20:52:27,526 DEBUG [OrderEJB:651] {Order updateShippedQuantity}Enter
>        20:52:27,536 INFO  [OrderEJB:671] {Order 
> updateShippedQuantity}Set shipped quantity 1.0, on item 
> 8cae4e1542b7acda006d06b09ded6477
>    20:52:27,546 DEBUG [OrderEJB:683] {Order updateShippedQuantity}Exit
> 
>    20:52:27,566 DEBUG [OrderEJB:830] {Order ejbStore}Enter
>        20:52:27,576 INFO  [OrderEJB:831] {Order ejbStore}Storing Order 
> 8cae5da742b7acda01341183c7a62ea6
>        20:52:27,596 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae4e1542b7acda006d06b09ded6477, shipped: 1.0
>        20:52:27,606 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae50b442b7acda01346812e0b9cb88, shipped: 0.0
>    20:52:27,636 DEBUG [OrderEJB:839] {Order ejbStore}Exit
> 
>    20:52:27,646 DEBUG [OrderEJB:651] {Order updateShippedQuantity}Enter
>        20:52:27,656 INFO  [OrderEJB:671] {Order 
> updateShippedQuantity}Set shipped quantity 2.0, on item 
> 8cae50b442b7acda01346812e0b9cb88
>    20:52:27,666 DEBUG [OrderEJB:683] {Order updateShippedQuantity}Exit
> 
>    20:52:27,687 DEBUG [OrderEJB:830] {Order ejbStore}Enter
>        20:52:27,687 INFO  [OrderEJB:831] {Order ejbStore}Storing Order 
> 8cae5da742b7acda01341183c7a62ea6
>        20:52:27,717 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae4e1542b7acda006d06b09ded6477, shipped: 1.0
>        20:52:27,727 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae50b442b7acda01346812e0b9cb88, shipped: 2.0
>    20:52:27,737 DEBUG [OrderEJB:839] {Order ejbStore}Exit
> 
> 20:52:27,747 DEBUG [OrderControllerEJB:248] {}Exit
> // End of updateShippedQuantities method call
> 
> 
> // Get orderCtrl.getOrderValue(order1.getId()); method call
>    
> 
>//***************************************************************************************
> 
> 
>    // Why is it that there's not SQL select call here. See previous test 
> case run log output at time 20:49:17,673.
>    // The only difference in code here, is that the former/previous was 
> run under a transaction, and here the test case
>    // is run without a transaction.
>    //
>    
> 
>//***************************************************************************************
> 
> 
> 
> 20:52:48,547 DEBUG [OrderEJB:830] {Order ejbStore}Enter
>    20:52:48,547 INFO  [OrderEJB:831] {Order ejbStore}Storing Order 
> 8cae5da742b7acda01341183c7a62ea6
>    20:52:48,557 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae4e1542b7acda006d06b09ded6477, shipped: 1.0
>    20:52:48,577 INFO  [OrderEJB:835] {Order ejbStore}Item id 
> 8cae50b442b7acda01346812e0b9cb88, shipped: 2.0
> 20:52:48,587 DEBUG [OrderEJB:839] {Order ejbStore}Exit
> 
> 20:52:48,627 DEBUG [OrderControllerEJB:385] {OrderController 
> getOrderValue}Enter
>    20:52:48,647 DEBUG [findByPrimaryKey:117] {OrderController 
> getOrderValue Order}Executing SQL: SELECT pk_key FROM ORDER_TABLE WHERE 
> pk_key=?
>    20:52:48,677 DEBUG [Account:117] {Order Account}Executing SQL: SELECT 
> type, description, creationDate FROM ACCOUNT WHERE (pk_key=?)
>    20:52:48,717 DEBUG [Customer:117] {Customer}Executing SQL: SELECT 
> creationDate, contactinfo_id_fk FROM CUSTOMER WHERE (pk_key=?)
>    20:52:48,747 DEBUG [ContactInfo:117] {Customer ContactInfo}Executing 
> SQL: SELECT familyName, givenName, telephone, email, creationDate, 
> address_id_fk FROM CONTACTINFO WHERE (pk_key=?)
>    20:52:48,787 DEBUG [Customer:117] {}Executing SQL: SELECT 
> account_id_fk FROM CUSTOMER_ACCOUNTS_ACCOUNT_CUSTOMERS WHERE 
> (customer_id_fk=?)
>    20:52:48,827 DEBUG [ContactInfo:117] {ContactInfo}Executing SQL: 
> SELECT familyName, givenName, telephone, email, creationDate, 
> address_id_fk FROM CONTACTINFO WHERE (pk_key=?)
>    20:52:48,847 DEBUG [Address:117] {ContactInfo Address}Executing SQL: 
> SELECT streetName, city, state, zip, country, creationDate FROM ADDRESS 
> WHERE (pk_key=?)
>    20:52:48,877 DEBUG [OrderEJB:830] {ejbStore}Enter
>        20:52:48,887 INFO  [OrderEJB:831] {ejbStore}Storing Order 
> 8cae5da742b7acda01341183c7a62ea6
>        20:52:48,897 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8cae4e1542b7acda006d06b09ded6477, shipped: 1.0
>        20:52:48,917 INFO  [OrderEJB:835] {ejbStore}Item id 
> 8cae50b442b7acda01346812e0b9cb88, shipped: 2.0
>    20:52:48,927 DEBUG [OrderEJB:839] {ejbStore}Exit
> 
> 20:52:48,967 DEBUG [OrderControllerEJB:400] {}Exit
> 


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to