EJBTHREE-2020: implement passivation
[jboss-ejb3:jboss-ejb3-context.git] / base / src / test / java / org / jboss / ejb3 / context / base / passivation / unit / StatefulUnitTestCase.java
1 /*
2  * JBoss, Home of Professional Open Source
3  * Copyright (c) 2010, JBoss Inc., and individual contributors as indicated
4  * by the @authors tag. See the copyright.txt in the distribution for a
5  * full listing of individual contributors.
6  *
7  * This is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU Lesser General Public License as
9  * published by the Free Software Foundation; either version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * This software is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this software; if not, write to the Free
19  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21  */
22 package org.jboss.ejb3.context.base.passivation.unit;
23
24 import org.jboss.ejb3.context.CurrentInvocationContext;
25 import org.jboss.ejb3.context.base.BaseSessionContext;
26 import org.jboss.ejb3.context.base.BaseSessionInvocationContext;
27 import org.jboss.ejb3.context.base.passivation.StatefulGreeterBean;
28 import org.jboss.ejb3.context.base.stateless.StatelessBeanManager;
29 import org.jboss.ejb3.context.spi.SessionBeanManager;
30 import org.junit.Test;
31
32 import javax.ejb.SessionBean;
33 import java.rmi.MarshalledObject;
34
35 import static org.junit.Assert.assertEquals;
36 import static org.junit.Assert.assertNotSame;
37
38 /**
39  * @author <a href="cdewolf@redhat.com">Carlo de Wolf</a>
40  */
41 public class StatefulUnitTestCase
42 {
43    @Test
44    public void testPassivation() throws Exception
45    {
46       final StatefulGreeterBean bean = new StatefulGreeterBean();
47       final SessionBeanManager manager = new StatelessBeanManager();
48       final BaseSessionContext context = new BaseSessionContext(manager, bean);
49       BaseSessionInvocationContext invocation = new BaseSessionInvocationContext(null, null, null) {
50          public Object proceed()
51          {
52             bean.setSessionContext(context);
53             return null;
54          }
55       };
56       CurrentInvocationContext.push(invocation);
57       try
58       {
59          invocation.proceed();
60       }
61       finally
62       {
63          CurrentInvocationContext.pop();
64       }
65       // should be a method invocation
66       bean.setName("testPassivation");
67
68       // should be a passivate invocation
69       final MarshalledObject<StatefulGreeterBean> mo = new MarshalledObject<StatefulGreeterBean>(bean);
70
71       StatefulGreeterBean bean2;
72       BaseSessionInvocationContext activateInvocation = new BaseSessionInvocationContext(null, null, null) {
73          @Override
74          public SessionBeanManager getManager()
75          {
76             return manager;
77          }
78
79          @Override
80          public Object proceed() throws Exception
81          {
82             SessionBean bean = mo.get();
83             bean.ejbActivate();
84             return bean;
85          }
86       };
87       CurrentInvocationContext.push(activateInvocation);
88       try
89       {
90          bean2 = (StatefulGreeterBean) activateInvocation.proceed();
91       }
92       finally
93       {
94          CurrentInvocationContext.pop();
95       }
96
97       assertNotSame(bean, bean2);
98       String result = bean2.sayHi();
99       assertEquals("Hi testPassivation", result);
100    }
101 }