I wish this is the correct forum and I am sorry for the obscure title. However, i am dealing with a weird problem that i could not find any suitable words to define.Here is my situation;

I am developing an enterprise application with Glassfish V3 using EclipseLink as persistence provider. In some point in my project, i have two entity (Item and ItemImage) and I have a stateful session bean (ItemServiceBean) operating on these entities with a extended persistence context. Here is the related code;

/***** Item Entity **/

public class Item  {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;

    @OneToMany(mappedBy = "item")
    private List<ItemImage> images;

    public Long getId() {
        return id;

    public List<ItemImage> getImages() {
        return images;


/***** ~Item Entity **/


/***** ItemImage Entity **/

public class ItemImage{
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @JoinColumn(name="item_id", nullable=false)
    private Item item;

    public Long getId() {
        return id;

    public void setItem(Item item) {
        this.item = item;



/***** ~ItemImage Entity **/

public class ItemServiceBean extends ServiceBean implements ItemService {
    @PersistenceContext(unitName = "myProject-ejbPU", type=PersistenceContextType.EXTENDED)
    private EntityManager em;

    public Item getItem(long id) {
        return em.find(Item.class, id);

    public ItemImage addItemImage(long itemId, File image) {
        Item item = em.find(Item.class, itemId);
        ItemImage itemImage = null;
        // check image and item
        if (item != null && image != null) {
            // create an image entity
            itemImage = new ItemImage();
            // we need the id of image entity, so call flush

            // create related image files on disk
            if (! ImageUtil.createItemImages(itemImage, image)) {
                // if fails, remove the created image entity
            else {
                // when success, first check if any image added before
                if (item.getImages().size() == 0) {
                    // if this image is first one, set the default image
                // add image to item's image list
                // log image creation
                logImageCreation(itemId, itemImage.getId());


        // return image if success, null otherwise
        return itemImage;


/***** ItemServiceBean **/


So, at some point i upload an image for an item with addItemImage business method. It create, process and adds the image to the related item's image list. After the method call i access the item's image list without any problem.

However, when i destroy this session bean and create a new one with a new persistence context things get weird. If I call the getItem method for the previous item, the returned item entity gives me an image list which has a null value instead of last added ItemImage entity. If i restart Glassfish, i can get the list without any problem. That is, the newly created ItemImage entity was succesfully persisted.

So, i think there is a problem with the caching structure.

Any ideas?