001: /*
002: * <Add library description here>
003: * Copyright (C) 2006 Rift IT Contracting
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
018: *
019: * CodebaseIORInterceptor.java
020: *
021: * This interceptor is responsible for setting the code base within an IOR so
022: * that the stub code can be download when required.
023: *
024: * $Revision: 1.1.1.1.2.1 $
025: */
026:
027: // package path
028: package com.rift.coad.lib.interceptor.iiop;
029:
030: // java imports
031: import java.net.InetAddress;
032: import org.omg.CORBA.Any;
033: import org.omg.CORBA.LocalObject;
034: import org.omg.CORBA.ORB;
035: import org.omg.IOP.Codec;
036: import org.omg.IOP.TaggedComponent;
037: import org.omg.IOP.TAG_JAVA_CODEBASE;
038: import org.omg.PortableInterceptor.IORInterceptor;
039: import org.omg.PortableInterceptor.IORInfo;
040:
041: // logging import
042: import org.apache.log4j.Logger;
043:
044: // coadunation imports
045: import com.rift.coad.lib.configuration.Configuration;
046: import com.rift.coad.lib.configuration.ConfigurationFactory;
047: import com.rift.coad.lib.deployment.DeploymentLoader;
048: import com.rift.coad.lib.interceptor.InterceptorException;
049: import com.rift.coad.lib.httpd.RequestListenerThread;
050: import com.rift.coad.lib.httpd.HttpDaemon;
051:
052: /**
053: * This interceptor is responsible for setting the code base within an IOR so
054: * that the stub code can be download when required.
055: *
056: * @author Brett Chaldecott
057: */
058: public class CodebaseIORInterceptor extends LocalObject implements
059: IORInterceptor {
060:
061: // class constants
062: private final static String URL_FORMAT = "http://%s:%d/codebase/%s";
063:
064: // the class log variable
065: protected static Logger log = Logger
066: .getLogger(CodebaseIORInterceptor.class);
067:
068: // private member variables
069: private String hostname = null;
070: private int port = 0;
071: private Codec codec = null;
072:
073: /**
074: * Creates a new instance of CodebaseIORInterceptor.
075: *
076: * @exception InterceptorException
077: */
078: public CodebaseIORInterceptor(Codec codec)
079: throws InterceptorException {
080: this .codec = codec;
081: try {
082: Configuration config = ConfigurationFactory.getInstance()
083: .getConfig(RequestListenerThread.class);
084: // set the port
085: hostname = config.getString(
086: RequestListenerThread.HTTP_HOST, InetAddress
087: .getLocalHost().getCanonicalHostName());
088: port = (int) config.getLong(
089: RequestListenerThread.HTTP_PORT,
090: HttpDaemon.DEFAULT_PORT);
091:
092: } catch (Exception ex) {
093: throw new InterceptorException(
094: "Failed to init the code base "
095: + "IOR interceptor because : "
096: + ex.getMessage(), ex);
097: }
098: }
099:
100: /**
101: * This method returns the name of this interceptor
102: *
103: * @return the name of this interceptor.
104: */
105: public String name() {
106: return "CodebaseIORInterceptor";
107: }
108:
109: /**
110: * This method is called to destroy this interceptor
111: */
112: public void destroy() {
113: // do nothing
114: }
115:
116: /**
117: * A server side ORB calls the establish_components operation on all
118: * registered IORInterceptor instances when it is assembling the list of
119: * components that will be included in the profile or profiles of an object
120: * reference.
121: *
122: * @param info The information required to setup this ior.
123: */
124: public void establish_components(IORInfo info) {
125: try {
126: String stubcodeName = DeploymentLoader.ClassLoaderLookup
127: .getInstance().getStubCodeForLoader(
128: Thread.currentThread()
129: .getContextClassLoader());
130: if (stubcodeName != null) {
131: String url = String.format(URL_FORMAT, hostname, port,
132: stubcodeName);
133: Any any = ORB.init().create_any();
134: any.insert_string(url);
135: info.add_ior_component(new TaggedComponent(
136: TAG_JAVA_CODEBASE.value, codec
137: .encode_value(any)));
138: }
139: } catch (Exception ex) {
140: log.error("Failed to add the entry to the ior : "
141: + ex.getMessage(), ex);
142: }
143: }
144: }
|