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.rmi.RemoteException;
025: import java.rmi.ServerException;
026: import java.util.Properties;
027: import javax.ejb.CreateException;
028: import javax.ejb.EJBException;
029: import javax.naming.Context;
030: import javax.naming.InitialContext;
031: import javax.naming.NamingException;
032:
033: import org.apache.log4j.Logger;
034: import org.jboss.test.cts.interfaces.CallerSession;
035: import org.jboss.test.cts.interfaces.CallerSessionHome;
036: import org.jboss.test.cts.interfaces.ReferenceTest;
037: import org.jboss.test.cts.interfaces.CalleeData;
038: import org.jboss.test.cts.interfaces.CalleeException;
039: import org.jboss.test.util.ejb.SessionSupport;
040: import org.jboss.mx.loading.ClassLoaderUtils;
041:
042: /** The stateless session bean implementation
043: *
044: * @author Scott.Stark@jboss.org
045: * @version $Revision: 57211 $
046: */
047: public class CallerSessionBean extends SessionSupport {
048: private static Logger log = Logger
049: .getLogger(CallerSessionBean.class);
050:
051: private CallerSessionHome cachedHome;
052:
053: public void ejbCreate() throws CreateException {
054: }
055:
056: public CalleeData simpleCall2(boolean isCaller)
057: throws RemoteException {
058: StringBuffer info = new StringBuffer("simpleCall2, isCaller: "
059: + isCaller);
060: info.append(" CalleeData, ");
061: try {
062: ClassLoaderUtils.displayClassInfo(CalleeData.class, info);
063: log.info(info.toString());
064: } catch (Exception e) {
065: // Can happen due to no permissions to get TCL
066: e.printStackTrace();
067: }
068:
069: // If this is the callee just return
070: if (isCaller == false)
071: return new CalleeData();
072:
073: // Call the second deployment instance
074: CallerSessionHome home = null;
075: CallerSession callee = null;
076:
077: try {
078: home = lookupHome("ejbcts2/CalleeSessionHome");
079: callee = home.create();
080: } catch (NamingException e) {
081: throw new ServerException("Failed to lookup CalleeHome", e);
082: } catch (CreateException e) {
083: throw new ServerException("Failed to create Callee", e);
084: }
085:
086: CalleeData data = callee.simpleCall(false);
087: return data;
088: }
089:
090: public CalleeData simpleCall(boolean isCaller)
091: throws RemoteException {
092: StringBuffer info = new StringBuffer("simpleCall, isCaller: "
093: + isCaller);
094: info.append(" CalleeData, ");
095: try {
096: ClassLoaderUtils.displayClassInfo(CalleeData.class, info);
097: log.info(info.toString());
098: } catch (Exception e) {
099: // Can happen due to no permissions to get TCL
100: log.debug("displayClassInfo failure", e);
101: }
102: // If this is the callee just return
103: if (isCaller == false)
104: return new CalleeData();
105:
106: // Call the second deployment instance
107: CallerSession callee = null;
108: try {
109: cachedHome = lookupHome("ejbcts2/CalleeSessionHome");
110: callee = cachedHome.create();
111: } catch (NamingException e) {
112: throw new ServerException("Failed to lookup CalleeHome", e);
113: } catch (CreateException e) {
114: throw new ServerException("Failed to create Callee", e);
115: } catch (Throwable e) {
116: log.error("Unexpected error", e);
117: throw new ServerException("Unexpected error"
118: + e.getMessage());
119: }
120:
121: CalleeData data = callee.simpleCall2(false);
122: return data;
123: }
124:
125: /** Lookup the cts.jar/CalleeHome binding and invoke
126: *
127: * @throws RemoteException
128: */
129: public void callByValueInSameJar() throws RemoteException {
130: // Call the second deployment instance
131: CallerSession callee = null;
132: try {
133: cachedHome = lookupHome("ejbcts/CalleeSessionHome");
134: callee = cachedHome.create();
135: } catch (NamingException e) {
136: throw new ServerException("Failed to lookup CalleeHome", e);
137: } catch (CreateException e) {
138: throw new ServerException("Failed to create Callee", e);
139: } catch (Throwable e) {
140: log.error("Unexpected error", e);
141: throw new ServerException("Unexpected error"
142: + e.getMessage());
143: }
144:
145: ReferenceTest test = new ReferenceTest();
146: callee.validateValueMarshalling(test);
147: }
148:
149: public void callAppEx() throws CalleeException, RemoteException {
150: StringBuffer info = new StringBuffer("appEx, CalleeException, ");
151: try {
152: ClassLoaderUtils.displayClassInfo(CalleeException.class,
153: info);
154: log.info(info.toString());
155: } catch (Exception e) {
156: // Can happen due to no permissions to get TCL
157: log.debug("displayClassInfo failure", e);
158: }
159: // Call the second deployment instance
160: CallerSessionHome home = null;
161: CallerSession callee = null;
162:
163: try {
164: home = lookupHome("ejbcts2/CalleeSessionHome");
165: callee = home.create();
166: callee.appEx();
167: } catch (NamingException e) {
168: throw new ServerException("Failed to lookup CalleeHome", e);
169: } catch (CreateException e) {
170: throw new ServerException("Failed to create Callee", e);
171: } catch (CalleeException e) {
172: throw e;
173: }
174: }
175:
176: public void appEx() throws CalleeException {
177: StringBuffer info = new StringBuffer("appEx, CalleeException, ");
178: try {
179: ClassLoaderUtils.displayClassInfo(CalleeException.class,
180: info);
181: log.info(info.toString());
182: } catch (Exception e) {
183: // Can happen due to no permissions to get TCL
184: log.debug("displayClassInfo failure", e);
185: }
186: throw new CalleeException();
187: }
188:
189: public void validateValueMarshalling(ReferenceTest test) {
190: boolean wasSerialized = test.getWasSerialized();
191: log.info("validateValueMarshalling, testWasSerialized: "
192: + wasSerialized);
193: if (wasSerialized == false)
194: throw new EJBException("ReferenceTest was not serialized");
195: }
196:
197: private CallerSessionHome lookupHome(String ejbName)
198: throws NamingException {
199: CallerSessionHome home = null;
200: Properties env = new Properties();
201: env.setProperty(Context.INITIAL_CONTEXT_FACTORY,
202: "org.jnp.interfaces.NamingContextFactory");
203: env.setProperty(Context.OBJECT_FACTORIES,
204: "org.jboss.naming:org.jnp.interfaces");
205: env.setProperty(Context.PROVIDER_URL, System.getProperty(
206: "jboss.bind.address", "localhost")
207: + ":1099");
208:
209: InitialContext ctx = new InitialContext(env);
210: log.info("looking up: " + ejbName);
211: Object ref = ctx.lookup(ejbName);
212: StringBuffer buffer = new StringBuffer(
213: "JNDI CallerSessionHome.class: ");
214: try {
215: ClassLoaderUtils.displayClassInfo(ref.getClass(), buffer);
216: log.info(buffer.toString());
217: } catch (Exception e) {
218: // Can happen due to no permissions to get TCL
219: log.debug("displayClassInfo failure", e);
220: }
221: buffer.setLength(0);
222: buffer.append("Session CallerSessionHome.class: ");
223: try {
224: ClassLoaderUtils.displayClassInfo(CallerSessionHome.class,
225: buffer);
226: log.info(buffer.toString());
227: } catch (Exception e) {
228: // Can happen due to no permissions to get TCL
229: log.debug("displayClassInfo failure", e);
230: }
231:
232: home = (CallerSessionHome) ref;
233: return home;
234: }
235: }
|