blob: 94514cf7c571fdc1fac05d7f8217ba8537c8cf76 [file] [log] [blame]
/*
* Copyright (c) 2006, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.enterprise.naming.impl;
import com.sun.enterprise.naming.util.NamingUtilsImpl;
import org.glassfish.logging.annotation.LogMessageInfo;
import org.omg.CORBA.ORB;
import javax.naming.CompositeName;
import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.RemoteException;
import java.util.Hashtable;
import java.util.logging.Level;
import static com.sun.enterprise.naming.util.LogFacade.logger;
/**
* This class is the implementation of the local SerialContextProvider
*
* @author Sheetal Vartak
*/
public class LocalSerialContextProviderImpl extends SerialContextProviderImpl {
@LogMessageInfo(message = "Exception occurred when instantiating LocalSerialContextProviderImpl: {0}",
cause = "java.rmi.RemoteException",
action = "Check server.log for details")
public static final String LOCAL_PROVIDER_NULL = "AS-NAMING-00003";
private NamingUtilsImpl namingUtils = new NamingUtilsImpl();
private LocalSerialContextProviderImpl(TransientContext rootContext) throws RemoteException {
super(rootContext);
}
static LocalSerialContextProviderImpl initProvider(TransientContext rootContext) {
try {
return new LocalSerialContextProviderImpl(rootContext);
} catch (RemoteException re) {
logger.log(Level.SEVERE, LOCAL_PROVIDER_NULL, re);
return null;
}
}
/**
* overriding the super.bind() since we need to make a copy of the object
* before it gets put into the rootContext
* Remote Provider already does that since when a method is called
* on a remote object (in our case the remote provider),
* the copies of the method arguments get passed and not the real objects.
*/
public void bind(String name, Object obj)
throws NamingException, RemoteException {
Object copyOfObj = namingUtils.makeCopyOfObject(obj);
super.bind(name, copyOfObj);
}
/**
* overriding the super.rebind() since we need to make a copy of the object
* before it gets put into the rootContext.
* Remote Provider already does that since when a method is called
* on a remote object (in our case the remote provider),
* the copies of the method arguments get passed and not the real objects.
*/
public void rebind(String name, Object obj)
throws NamingException, RemoteException {
Object copyOfObj = namingUtils.makeCopyOfObject(obj);
super.rebind(name, copyOfObj);
}
public Object lookup(String name)
throws NamingException, RemoteException {
Object obj = super.lookup(name);
try {
if (obj instanceof Reference) {
Reference ref = (Reference) obj;
if (ref.getFactoryClassName().equals
(GlassfishNamingManagerImpl.IIOPOBJECT_FACTORY)) {
ORB orb = ProviderManager.getProviderManager().getORB();
Hashtable env = new Hashtable();
if( orb != null ) {
env.put("java.naming.corba.orb", orb);
}
obj = javax.naming.spi.NamingManager.getObjectInstance
(obj, new CompositeName(name), null, env);
// NOTE : No copy object performed in this case
return obj;
}
}
} catch (Exception e) {
RemoteException re = new RemoteException("", e);
throw re;
}
return namingUtils.makeCopyOfObject(obj);
}
}