You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/09/03 07:19:08 UTC
svn commit: r267422 -
/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java
Author: djencks
Date: Fri Sep 2 22:19:05 2005
New Revision: 267422
URL: http://svn.apache.org/viewcvs?rev=267422&view=rev
Log:
Reference collections need listeners to register the members that join later
Modified:
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java?rev=267422&r1=267421&r2=267422&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java Fri Sep 2 22:19:05 2005
@@ -31,27 +31,29 @@
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.gbean.ReferenceCollection;
+import org.apache.geronimo.gbean.ReferenceCollectionListener;
+import org.apache.geronimo.gbean.ReferenceCollectionEvent;
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
/**
* @version $Rev$ $Date$
*/
public class EngineGBean extends BaseGBean implements GBeanLifecycle, ObjectRetriever {
-
+
private static final Log log = LogFactory.getLog(EngineGBean.class);
private static final String NAME = "name";
private static final String DEFAULTHOST = "defaultHost";
-
+
private final Engine engine;
- public EngineGBean(String className,
- Map initParams,
+ public EngineGBean(String className,
+ Map initParams,
Collection hosts,
- ObjectRetriever realmGBean,
+ ObjectRetriever realmGBean,
ValveGBean tomcatValveChain) throws Exception {
super(); // TODO: make it an attribute
-
+
if (className == null){
className = "org.apache.geronimo.tomcat.TomcatEngine";
}
@@ -59,7 +61,7 @@
if (initParams == null){
throw new IllegalArgumentException("Must have 'name' and 'defaultHost' values in initParams.");
}
-
+
//Be sure the name has been declared.
if (!initParams.containsKey(NAME)){
throw new IllegalArgumentException("Must have a 'name' value initParams.");
@@ -69,16 +71,16 @@
if (!initParams.containsKey(DEFAULTHOST)){
throw new IllegalArgumentException("Must have a 'defaultHost' value initParams.");
}
-
+
engine = (Engine)Class.forName(className).newInstance();
//Set the parameters
setParameters(engine, initParams);
-
+
if (realmGBean != null){
engine.setRealm((Realm)realmGBean.getInternalObject());
}
-
+
//Add the valve list
if (engine instanceof StandardEngine){
if (tomcatValveChain != null){
@@ -89,20 +91,44 @@
}
}
}
-
+
//Add the hosts
ReferenceCollection refs = (ReferenceCollection)hosts;
+ refs.addReferenceCollectionListener(new ReferenceCollectionListener() {
+
+ public void memberAdded(ReferenceCollectionEvent event) {
+ Object o = event.getMember();
+ ObjectRetriever objectRetriever = (ObjectRetriever) o;
+ addHost(objectRetriever);
+ }
+
+ public void memberRemoved(ReferenceCollectionEvent event) {
+ Object o = event.getMember();
+ ObjectRetriever objectRetriever = (ObjectRetriever) o;
+ removeHost(objectRetriever);
+ }
+ });
Iterator iterator = refs.iterator();
while (iterator.hasNext()){
ObjectRetriever objRetriever = (ObjectRetriever)iterator.next();
- Host host = (Host)objRetriever.getInternalObject();
-
- //If we didn't set a realm, then use the default
- if (host.getRealm() == null)
- host.setRealm(engine.getRealm());
+ addHost(objRetriever);
+
+ }
+ }
+
+ private void removeHost(ObjectRetriever objRetriever) {
+ Host host = (Host)objRetriever.getInternalObject();
+ engine.removeChild(host);
+ }
+
+ private void addHost(ObjectRetriever objRetriever) {
+ Host host = (Host)objRetriever.getInternalObject();
- engine.addChild(host);
+ //If we didn't set a realm, then use the default
+ if (host.getRealm() == null) {
+ host.setRealm(engine.getRealm());
}
+ engine.addChild(host);
}
public Object getInternalObject() {