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.ejb;
023:
024: import javax.transaction.Transaction;
025:
026: import org.jboss.invocation.Invocation;
027:
028: /**
029: * BeanLock interface
030: *
031: * @author <a href="bill@burkecentral.com">Bill Burke</a>
032: * @author <a href="marc.fleury@jboss.org">Marc Fleury</a>
033: *
034: * @version $Revision: 57209 $
035: *
036: * <p><b>Revisions:</b><br>
037: * <p><b>2001/07/29: marcf</b>
038: * <ol>
039: * <li>Initial revision
040: * </ol>
041: * <p><b>20010802: marcf</b>
042: * <ol>
043: * <li>Moved to a pluggable framework for the locking policies
044: * <li>you specify in jboss.xml what locking-policy you want, eg. pessimistic/optimistic
045: * <li>The BeanLock is now an interface and implementations can be found under ejb/plugins/lock
046: * </ol>
047: */
048: public interface BeanLock {
049: /**
050: * Get the bean instance cache id for the bean we are locking for.
051: *
052: * @return The cache key for the bean instance we are locking for.
053: */
054: public Object getId();
055:
056: /**
057: * Set the bean instance cache id for the bean we are locking for.
058: *
059: * @param id The cache key for the bean instance we are locking for.
060: */
061: public void setId(Object id);
062:
063: /**
064: * Change long we should wait for a lock.
065: */
066: public void setTimeout(int timeout);
067:
068: /**
069: * set the ejb container of this lock.
070: */
071: public void setContainer(Container container);
072:
073: /**
074: * Obtain exclusive access to this lock instance.
075: */
076: public void sync();
077:
078: /**
079: * Release exclusive access to this lock instance.
080: */
081: public void releaseSync();
082:
083: /**
084: * This method implements the actual logic of the lock.
085: * In the case of an EJB lock it must at least implement
086: * the serialization of calls
087: *
088: * @param mi The method invocation that needs a lock.
089: */
090: public void schedule(Invocation mi) throws Exception;
091:
092: /**
093: * Set the transaction currently associated with this lock.
094: * The current transaction is associated by the schedule call.
095: *
096: * @param tx The transaction to associate with this lock.
097: */
098: public void setTransaction(Transaction tx);
099:
100: /**
101: * Get the transaction currently associated with this lock.
102: *
103: * @return The transaction currently associated with this lock,
104: * or <code>null</code> if no transaction is currently
105: * associated with this lock.
106: */
107: public Transaction getTransaction();
108:
109: /**
110: * Informs the lock that the given transaction has ended.
111: *
112: * @param tx The transaction that has ended.
113: */
114: public void endTransaction(Transaction tx);
115:
116: /**
117: * Signifies to the lock that the transaction will not Synchronize
118: * (Tx demarcation not seen).
119: * <p>
120: * OSH: This method does not seem to be called from anywhere.
121: * What is it meant for? To be called on a timeout before the
122: * transaction has terminated?
123: */
124: public void wontSynchronize(Transaction tx);
125:
126: /**
127: * Callback to the BeanLock to inform it that a method invocation has ended.
128: * A common use of this method is to release a method lock.
129: */
130: public void endInvocation(Invocation mi);
131:
132: /**
133: * Increment the reference count of this lock.
134: */
135: public void addRef();
136:
137: /**
138: * Decrement the reference count of this lock.
139: */
140: public void removeRef();
141:
142: /**
143: * Get the current reference count of this lock.
144: *
145: * @return The current reference count.
146: */
147: public int getRefs();
148: }
|