- /*
- * @(#)ServantManagerImpl.java 1.12 03/12/19
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
- /*
- * @(#)ServantManagerImpl.java 1.12 03/12/19
- *
- * Copyright 1993-1997 Sun Microsystems, Inc. 901 San Antonio Road,
- * Palo Alto, California, 94303, U.S.A. All Rights Reserved.
- *
- * This software is the confidential and proprietary information of Sun
- * Microsystems, Inc. ("Confidential Information"). You shall not
- * disclose such Confidential Information and shall use it only in
- * accordance with the terms of the license agreement you entered into
- * with Sun.
- *
- * CopyrightVersion 1.2
- *
- */
-
- package com.sun.corba.se.impl.naming.pcosnaming;
-
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.util.Hashtable;
-
- import org.omg.CORBA.Policy;
- import org.omg.CORBA.LocalObject;
-
- import org.omg.PortableServer.POA;
- import org.omg.PortableServer.Servant;
- import org.omg.PortableServer.ForwardRequest;
- import org.omg.PortableServer.ServantLocator;
- import org.omg.PortableServer.LifespanPolicyValue;
- import org.omg.PortableServer.RequestProcessingPolicyValue;
- import org.omg.PortableServer.IdAssignmentPolicyValue;
- import org.omg.PortableServer.ServantRetentionPolicyValue;
- import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
-
- import com.sun.corba.se.spi.orb.ORB;
-
- /**
- * @version 1.6, 99/10/07
- * @author Rohit Garg
- * @since JDK1.2
- */
-
- public class ServantManagerImpl extends org.omg.CORBA.LocalObject implements ServantLocator
- {
-
- // computed using serialver tool
-
- private static final long serialVersionUID = 4028710359865748280L;
- private ORB orb;
-
- private NameService theNameService;
-
- private File logDir;
-
- private Hashtable contexts;
-
- private CounterDB counterDb;
-
- private int counter;
-
- private final static String objKeyPrefix = "NC";
-
- ServantManagerImpl(ORB orb, File logDir, NameService aNameService)
- {
- this.logDir = logDir;
- this.orb = orb;
- // initialize the counter database
- counterDb = new CounterDB(logDir);
- contexts = new Hashtable();
- theNameService = aNameService;
- }
-
-
- public Servant preinvoke(byte[] oid, POA adapter, String operation,
- CookieHolder cookie) throws ForwardRequest
- {
-
- String objKey = new String(oid);
-
- Servant servant = (Servant) contexts.get(objKey);
-
- if (servant == null)
- {
- servant = readInContext(objKey);
- }
-
- return servant;
- }
-
- public void postinvoke(byte[] oid, POA adapter, String operation,
- java.lang.Object cookie, Servant servant)
- {
- // nada
- }
-
- public NamingContextImpl readInContext(String objKey)
- {
- NamingContextImpl context = (NamingContextImpl) contexts.get(objKey);
- if( context != null )
- {
- // Returning Context from Cache
- return context;
- }
-
- File contextFile = new File(logDir, objKey);
- if (contextFile.exists()) {
- try {
- FileInputStream fis = new FileInputStream(contextFile);
- ObjectInputStream ois = new ObjectInputStream(fis);
- context = (NamingContextImpl) ois.readObject();
- context.setORB( orb );
- context.setServantManagerImpl( this );
- context.setRootNameService( theNameService );
- ois.close();
- } catch (Exception ex) {
- }
- }
-
- if (context != null)
- {
- contexts.put(objKey, context);
- }
- return context;
- }
-
- public NamingContextImpl addContext(String objKey,
- NamingContextImpl context)
- {
- File contextFile = new File(logDir, objKey);
-
- if (contextFile.exists())
- {
- context = readInContext(objKey);
- }
- else {
- try {
- FileOutputStream fos = new FileOutputStream(contextFile);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(context);
- oos.close();
- } catch (Exception ex) {
- }
- }
- try
- {
- contexts.remove( objKey );
- }
- catch( Exception e)
- {
- }
- contexts.put(objKey, context);
-
- return context;
- }
-
- public void updateContext( String objKey,
- NamingContextImpl context )
- {
- File contextFile = new File(logDir, objKey);
- if (contextFile.exists())
- {
- contextFile.delete( );
- contextFile = new File(logDir, objKey);
- }
-
- try {
- FileOutputStream fos = new FileOutputStream(contextFile);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(context);
- oos.close();
- } catch (Exception ex) {
- ex.printStackTrace( );
- }
- }
-
- public static String getRootObjectKey()
- {
- return objKeyPrefix + CounterDB.rootCounter;
- }
-
- public String getNewObjectKey()
- {
- return objKeyPrefix + counterDb.getNextCounter();
- }
-
-
-
- }
-
- class CounterDB implements Serializable
- {
-
- CounterDB (File logDir)
- {
- counterFileName = "counter";
- counterFile = new File(logDir, counterFileName);
- if (!counterFile.exists()) {
- counter = new Integer(rootCounter);
- writeCounter();
- } else {
- readCounter();
- }
- }
-
- private void readCounter()
- {
- try {
- FileInputStream fis = new FileInputStream(counterFile);
- ObjectInputStream ois = new ObjectInputStream(fis);
- counter = (Integer) ois.readObject();
- ois.close();
- } catch (Exception ex) {
- }
- }
-
- private void writeCounter()
- {
- try {
- counterFile.delete();
- FileOutputStream fos = new FileOutputStream(counterFile);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(counter);
- oos.flush();
- oos.close();
-
- } catch (Exception ex) {
- }
- }
-
- public synchronized int getNextCounter()
- {
- int counterVal = counter.intValue();
- counter = new Integer(++counterVal);
- writeCounter();
-
- return counterVal;
- }
-
-
-
- private Integer counter;
-
- private static String counterFileName = "counter";
-
- private transient File counterFile;
-
- public final static int rootCounter = 0;
- }