001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: JEntityLocal.java 7900 2006-01-18 16:04:21Z durieuxp $
023: * --------------------------------------------------------------------------
024: */package org.objectweb.jonas_ejb.container;
025:
026: import javax.ejb.EJBException;
027: import javax.ejb.EJBLocalHome;
028: import javax.ejb.EJBLocalObject;
029: import javax.ejb.RemoveException;
030:
031: import org.objectweb.jonas_ejb.lib.EJBInvocation;
032:
033: import org.objectweb.util.monolog.api.BasicLevel;
034:
035: /**
036: * Generic part of the EJBLocalObject implementation
037: * @author Philippe Durieux
038: */
039: public abstract class JEntityLocal extends JLocal {
040:
041: protected JEntityFactory bf;
042:
043: protected JEntitySwitch bs;
044:
045: /**
046: * constructor
047: * @param bf The Entity Factory
048: */
049: public JEntityLocal(JEntityFactory bf) {
050: super (bf);
051: if (TraceEjb.isDebugIc()) {
052: TraceEjb.interp.log(BasicLevel.DEBUG, "");
053: }
054: this .bf = bf;
055: }
056:
057: /**
058: * finish initialization
059: * @param bs The Entity Bean Switch
060: */
061: public void setEntitySwitch(JEntitySwitch bs) {
062: if (TraceEjb.isDebugIc()) {
063: TraceEjb.interp.log(BasicLevel.DEBUG, "");
064: }
065: this .bs = bs;
066: }
067:
068: // --------------------------------------------------------------------------
069: // EJBLocalObject implementation
070: // remove() is implemented in the generated part.
071: // --------------------------------------------------------------------------
072:
073: /**
074: * Remove this instance.
075: * @throws RemoveException Instance could not be removed.
076: */
077: public abstract void remove() throws RemoveException;
078:
079: /**
080: * @return the enterprise Bean's local home interface.
081: */
082: public EJBLocalHome getEJBLocalHome() {
083: if (TraceEjb.isDebugIc()) {
084: TraceEjb.interp.log(BasicLevel.DEBUG, "");
085: }
086: return bf.getLocalHome();
087: }
088:
089: /**
090: * @return the Primary Key for this EJBLocalObject
091: */
092: public Object getPrimaryKey() {
093: if (TraceEjb.isDebugIc()) {
094: TraceEjb.interp.log(BasicLevel.DEBUG, "");
095: }
096: if (bs == null) {
097: throw new EJBException("No Primary Key yet");
098: }
099: return bs.getPrimaryKey();
100: }
101:
102: /**
103: * Tests if a given EJB is identical to the invoked EJB object.
104: * @param obj - An object to test for identity with the invoked object.
105: * @return True if the given EJB object is identical to the invoked object.
106: * @throws EJBException: Thrown when the method failed due to a system-level
107: * failure.
108: */
109: public boolean isIdentical(EJBLocalObject obj) {
110: if (TraceEjb.isDebugIc()) {
111: TraceEjb.interp.log(BasicLevel.DEBUG, "");
112: }
113: boolean ret = false;
114: if (obj != null) {
115: // Get the home class name
116: String homeClassName = getEJBLocalHome().getClass()
117: .getName();
118: String objHomeClassName = obj.getEJBLocalHome().getClass()
119: .getName();
120:
121: // Tests the home equality and the primary key equality
122: ret = ((objHomeClassName.equals(homeClassName)) && (obj
123: .getPrimaryKey().equals(getPrimaryKey())));
124: }
125: return ret;
126: }
127:
128: /**
129: * preInvoke is called before any request.
130: * @param txa Transaction Attribute (Supports, Required, ...)
131: * @return A RequestCtx object
132: * @throws EJBException
133: */
134: public RequestCtx preInvoke(int txa) {
135: if (TraceEjb.isDebugIc()) {
136: TraceEjb.interp.log(BasicLevel.DEBUG, "");
137: }
138: return bf.preInvoke(txa);
139: }
140:
141: /**
142: * Check if the access to the bean is authorized
143: * @param ejbInv object containing security signature of the method, args of
144: * method, etc
145: */
146: public void checkSecurity(EJBInvocation ejbInv) {
147: if (TraceEjb.isDebugIc()) {
148: TraceEjb.interp.log(BasicLevel.DEBUG, "");
149: }
150: bf.checkSecurity(ejbInv);
151: }
152:
153: /**
154: * postInvoke is called after any request.
155: * @param rctx The RequestCtx that was returned at preInvoke()
156: * @throws EJBException
157: */
158: public void postInvoke(RequestCtx rctx) {
159: if (TraceEjb.isDebugIc()) {
160: TraceEjb.interp.log(BasicLevel.DEBUG, "");
161: }
162: try {
163: bf.postInvoke(rctx);
164: } finally {
165: bs.releaseICtx(rctx.currTx, rctx.sysExc != null);
166: }
167: }
168: }
|