001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.test.cts.ejb;
023:
024: import java.lang.reflect.InvocationTargetException;
025: import java.rmi.RemoteException;
026:
027: import javax.ejb.CreateException;
028: import javax.ejb.EJBException;
029: import javax.ejb.EJBObject;
030: import javax.ejb.Handle;
031: import javax.ejb.NoSuchObjectLocalException;
032: import javax.naming.Context;
033: import javax.naming.InitialContext;
034: import javax.naming.NamingException;
035:
036: import org.apache.log4j.Logger;
037:
038: import org.jboss.test.cts.interfaces.StatefulSessionLocalHome;
039: import org.jboss.test.cts.interfaces.StatefulSessionLocal;
040: import org.jboss.test.cts.interfaces.StatelessSessionHome;
041: import org.jboss.test.cts.interfaces.StatelessSession;
042: import org.jboss.test.cts.interfaces.ClientCallback;
043: import org.jboss.test.cts.interfaces.StatelessSessionLocalHome;
044: import org.jboss.test.cts.interfaces.StatelessSessionLocal;
045: import org.jboss.test.util.ejb.SessionSupport;
046:
047: /** The stateless session bean implementation
048: *
049: * @author Scott.Stark@jboss.org
050: * @version $Revision: 57211 $
051: */
052: public class StatelessSessionBean extends SessionSupport {
053: /** The serialVersionUID */
054: private static final long serialVersionUID = 1L;
055:
056: private static Logger log = Logger
057: .getLogger(StatelessSessionBean.class);
058:
059: private static boolean breakCreate = false;
060:
061: public void ejbCreate() throws CreateException {
062: if (breakCreate)
063: throw new CreateException("broken create");
064: }
065:
066: public String method1(String msg) {
067: return msg;
068: }
069:
070: /**
071: * This method is actually invalid (a hack)
072: * because it lets the client change the state of the SLSB
073: *
074: * @param action the action
075: */
076: public void breakCreate() {
077: breakCreate = true;
078: }
079:
080: public void loopbackTest() throws java.rmi.RemoteException {
081: try {
082: InitialContext ctx = new InitialContext();
083: StatelessSessionHome home = (StatelessSessionHome) ctx
084: .lookup("ejbcts/StatelessSessionBean");
085: StatelessSession sessionBean;
086: try {
087: sessionBean = home.create();
088: } catch (CreateException ex) {
089: log.debug("Loopback CreateException: " + ex);
090: throw new EJBException(ex);
091: }
092: sessionBean.loopbackTest(sessionCtx.getEJBObject());
093: } catch (javax.naming.NamingException nex) {
094: log.debug("Could not locate bean instance");
095: }
096: }
097:
098: public void loopbackTest(EJBObject obj)
099: throws java.rmi.RemoteException {
100: // This should throw an exception.
101: StatelessSession bean = (StatelessSession) obj;
102: bean.method1("Hello");
103: }
104:
105: public void callbackTest(ClientCallback callback, String data)
106: throws java.rmi.RemoteException {
107: callback.callback(data);
108: }
109:
110: public void npeError() {
111: Object obj = null;
112: obj.toString();
113: }
114:
115: public void testLocalHome() throws InvocationTargetException {
116: StatelessSessionLocalHome home = (StatelessSessionLocalHome) sessionCtx
117: .getEJBLocalHome();
118: log.debug("Obtained StatelessSessionLocalHome from ctx");
119: try {
120: StatelessSessionLocal local = home.create();
121: log.debug("Created StatelessSessionLocal#1");
122: StatelessSessionLocalHome home2 = (StatelessSessionLocalHome) local
123: .getEJBLocalHome();
124: log
125: .debug("Obtained StatelessSessionLocalHome from StatelessSessionLocal");
126: local = home2.create();
127: log.debug("Created StatelessSessionLocal#2");
128: local.remove();
129: } catch (Exception e) {
130: log.debug("testLocalHome failed", e);
131: throw new InvocationTargetException(e,
132: "testLocalHome failed");
133: }
134: }
135:
136: public void testPassivationByTimeLocal() {
137: StatefulSessionLocal sessionBean1 = null;
138: Handle handle = null;
139: try {
140: Context ctx = new InitialContext();
141: log.debug("+++ testPassivationByTime");
142: StatefulSessionLocalHome sessionHome = (StatefulSessionLocalHome) ctx
143: .lookup("ejbcts/StatefulSessionLocalBean");
144: sessionBean1 = sessionHome
145: .create("testPassivationByTimeLocal");
146: sessionBean1.ping();
147:
148: handle = sessionBean1.getHandle();
149:
150: log.debug("Waiting 41 seconds for passivation...");
151: Thread.sleep(41 * 1000);
152:
153: // Validate that sessionBean1 was passivated and activated
154: boolean passivated = sessionBean1.getWasPassivated();
155: if (passivated == false)
156: throw new EJBException("sessionBean1 WasPassivated");
157: boolean activated = sessionBean1.getWasActivated();
158: if (activated == false)
159: throw new EJBException("sessionBean1 WasActivated");
160:
161: log.debug("Waiting 90 seconds for removal due to age...");
162: Thread.sleep(90 * 1000);
163: } catch (CreateException e) {
164: throw new EJBException(e.toString());
165: } catch (NamingException e) {
166: throw new EJBException(e.toString());
167: } catch (InterruptedException e) {
168: throw new EJBException(e.toString());
169: }
170:
171: try {
172: sessionBean1.ping();
173: throw new EJBException(
174: "Was able to ping for a removed session");
175: } catch (NoSuchObjectLocalException expected) {
176: log.debug("Session access failed as expected", expected);
177: }
178:
179: try {
180: handle.getEJBObject();
181: throw new EJBException(
182: "Was able to getEJBObject for a removed session");
183: } catch (RemoteException expected) {
184: log.debug("Session access failed as expected", expected);
185: }
186: }
187: }
|