Have to bother you again ... (see: [CMT Transactions](https://stackoverflow.com/questions/14462342/cmt-transactions)) Presumed the following:

![enter image description here](https://i.stack.imgur.com/cWJTK.png)

All TransactionAttributes set per default to REQUIRED

Question: Why is the find method able to retrieve foo even if the previous commit should not have been happened? It happened indeed that on invocation of find() Foo is inserted and selected, but why? The transaction has not come to an end at this point as Bar still is to be stored.

Now the following had happened (Bang = DuplicateKeyException):

![enter image description here](https://i.stack.imgur.com/ZHaAr.png)

Question: **Why Foo is saved?** I thought the method invocation of save(Foo foo) will become a part of the GlobalService transaction as annotated to REQUIRED

OK, maybe the GlobalClient is of interest:

```
public void createFooBar(Foo foo, Bar bar) throws WrappedThingsGoneBadException
{
    try
    {
        fooService.create(foo); 
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }       

    fooService.doSomethingSilly();

    try
    {
        foo = fooService.findByName(foo.getName());
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    try
    {
        barService.create(bar);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

```

The save methods of Foo- and BarService:

```
public Foo create(Foo foo)
{
    em.persist(foo);

    return foo;
}

```

Clarifications highly welcomed!