Package org.jboss.seam.test.integration

Source Code of org.jboss.seam.test.integration.EntityTest$EntityExceptionObserver

package org.jboss.seam.test.integration;

import org.jboss.seam.mock.SeamTest;
import java.util.HashMap;
import java.util.Map;

import javax.persistence.EntityManager;

import org.hibernate.StaleStateException;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Observer;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.core.Manager;
import org.testng.Assert;
import org.testng.annotations.Test;

public class EntityTest
    extends SeamTest
{

    @Test
    public void entityUpdatedInNestedConversation() throws Exception {
        String parentConversation = new FacesRequest("/page.xhtml") {
            @Override
            protected void invokeApplication() throws Exception {
                Thing thing = new Thing();
                thing.setName("thing");
                EntityManager entityManager = (EntityManager) getValue("#{entityManager}");
                entityManager.persist(thing);
                Contexts.getConversationContext().set("thing", thing);
                Manager.instance().beginConversation();
            }
        }.run();


        new FacesRequest("/page.xhtml", parentConversation) {
        }.run();

        // nested conversation
        String nestedId = new FacesRequest("/page.xhtml", parentConversation) {
            @Override
            protected void invokeApplication() throws Exception {
                Manager.instance().beginNestedConversation();
            }
        }.run();

        // update entity in nested conversation
        new FacesRequest("/page.xhtml", nestedId) {
            @Override
            protected void invokeApplication() throws Exception {
                Thing thing = (Thing) Contexts.getConversationContext().get("thing");
                thing.setName("foo");
                EntityManager entityManager = (EntityManager) getValue("#{entityManager}");
                entityManager.flush();
            }
        }.run();

        // end nested conversation
        assert new FacesRequest("/page.xhtml", nestedId) {
            @Override
            protected void invokeApplication() throws Exception {
                Manager.instance().endConversation(false);
            }
        }.run().equals(parentConversation);

 
        // This tests that the activation in the parent conversation
        // doesn't fail
        new FacesRequest("/page.xhtml",parentConversation) {
            @Override
            protected void renderResponse() throws Exception {        
                Thing thing = (Thing) Contexts.getConversationContext().get("thing");
                assert thing.getName().equals("foo");
            }
        }.run();
    }

    @Test
    public void testStale() throws Exception {

        final Map<String, Long> holder = new HashMap<String, Long>();

        final String conversation1 = new FacesRequest("/page.xhtml") {
            @Override
            protected void invokeApplication() throws Exception {
                Thing thing = new Thing();
                thing.setName("thing");
                EntityManager entityManager = (EntityManager) getValue("#{entityManager}");
                entityManager.persist(thing);
                holder.put("id", thing.getId());
                Contexts.getConversationContext().set("thing", thing);
                Manager.instance().beginConversation();
            }
        }.run();

        new FacesRequest("/page.xhtml", conversation1) {
        }.run();

        // update in second conversation
        new FacesRequest("/page.xhtml") {
            @Override
            @SuppressWarnings("cast")
            protected void invokeApplication() throws Exception {
                EntityManager entityManager = (EntityManager) getValue("#{entityManager}");
                Thing thing = (Thing) entityManager.find(Thing.class, holder.get("id"));
                thing.setName("foo");
                entityManager.flush();
            }
        }.run();

        try {
            new FacesRequest("/page.xhtml", conversation1) {
                EntityExceptionObserver observer;
               
                @Override
                protected void invokeApplication() throws Exception {
                    Thing thing = (Thing) Contexts.getConversationContext().get("thing");
                    thing.setName("bar");
                  
                    observer = (EntityExceptionObserver) getValue("#{entityExceptionObserver}");
                    assert observer != null;
                }
               
                @Override
                protected void renderResponse() throws Exception {
                    Assert.fail("page rendered without redirect, expected StaleStateException!");
                }
               
                @Override
                protected void afterRequest() {
                   assert observer.getOptimisticLockExceptionSeen();
                }       
            }.run();

        } catch (StaleStateException e) {
        }
    }
   
    @Name("entityExceptionObserver")
    public static class EntityExceptionObserver {
       
        private boolean exceptionSeen;

        @Observer(value="org.jboss.seam.exceptionHandled.javax.persistence.OptimisticLockException")
        public void handleException(Exception e) {
            exceptionSeen=true;
        }
       
        public boolean getOptimisticLockExceptionSeen() {
            return exceptionSeen;
        }
       
        @Override
        public String toString() {
            return "EntityExceptionObserver[" + exceptionSeen + "]";
        }
    }
}
TOP

Related Classes of org.jboss.seam.test.integration.EntityTest$EntityExceptionObserver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.