1. /*
  2. * @(#)StubFactoryFactoryDynamicBase.java 1.11 04/05/25
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.impl.presentation.rmi;
  8. import java.rmi.Remote ;
  9. import javax.rmi.CORBA.Tie ;
  10. import javax.rmi.CORBA.Util;
  11. import org.omg.CORBA.CompletionStatus;
  12. import org.omg.CORBA.portable.IDLEntity ;
  13. import com.sun.corba.se.spi.presentation.rmi.PresentationManager;
  14. import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults;
  15. import com.sun.corba.se.spi.orb.ORB;
  16. import com.sun.corba.se.spi.logging.CORBALogDomains ;
  17. import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
  18. public abstract class StubFactoryFactoryDynamicBase extends
  19. StubFactoryFactoryBase
  20. {
  21. protected final ORBUtilSystemException wrapper ;
  22. public StubFactoryFactoryDynamicBase()
  23. {
  24. wrapper = ORBUtilSystemException.get(
  25. CORBALogDomains.RPC_PRESENTATION ) ;
  26. }
  27. public PresentationManager.StubFactory createStubFactory(
  28. String className, boolean isIDLStub, String remoteCodeBase,
  29. Class expectedClass, ClassLoader classLoader)
  30. {
  31. Class cls = null ;
  32. try {
  33. cls = Util.loadClass( className, remoteCodeBase, classLoader ) ;
  34. } catch (ClassNotFoundException exc) {
  35. throw wrapper.classNotFound3(
  36. CompletionStatus.COMPLETED_MAYBE, exc, className ) ;
  37. }
  38. PresentationManager pm = ORB.getPresentationManager() ;
  39. if (IDLEntity.class.isAssignableFrom( cls ) &&
  40. !Remote.class.isAssignableFrom( cls )) {
  41. // IDL stubs must always use static factories.
  42. PresentationManager.StubFactoryFactory sff =
  43. pm.getStubFactoryFactory( false ) ;
  44. PresentationManager.StubFactory sf =
  45. sff.createStubFactory( className, true, remoteCodeBase,
  46. expectedClass, classLoader ) ;
  47. return sf ;
  48. } else {
  49. PresentationManager.ClassData classData = pm.getClassData( cls ) ;
  50. return makeDynamicStubFactory( pm, classData, classLoader ) ;
  51. }
  52. }
  53. public abstract PresentationManager.StubFactory makeDynamicStubFactory(
  54. PresentationManager pm, PresentationManager.ClassData classData,
  55. ClassLoader classLoader ) ;
  56. public Tie getTie( Class cls )
  57. {
  58. PresentationManager pm = ORB.getPresentationManager() ;
  59. return new ReflectiveTie( pm, wrapper ) ;
  60. }
  61. public boolean createsDynamicStubs()
  62. {
  63. return true ;
  64. }
  65. }