Package org.apache.tapestry5.ioc.internal.services

## Class JustInTimeObjectCreator<T>

- java.lang.Object
- - org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator<T>

- All Implemented Interfaces:
    `Runnable`, `ObjectCreator<T>`, `EagerLoadServiceProxy`

      public class JustInTimeObjectCreator<T>
      extends Object
      implements ObjectCreator<T>, EagerLoadServiceProxy, Runnable

  Invoked from a fabricated service delegate to get or realize (instantiate and configure) the service implementation. This includes synchronization logic, to prevent multiple threads from attempting to realize the same service at the same time (a service should be realized only once). The additional interfaces implemented by this class support eager loading of services (at application startup), and orderly shutdown of proxies.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `JustInTimeObjectCreator​(ServiceActivityTracker tracker, ObjectCreator<T> creator, String serviceId)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `T` | `createObject()` | Checks to see if the proxy has been shutdown, then invokes `ObjectCreator.createObject()` if it has not already done so.
    `void` | `eagerLoadService()` | Invokes `createObject()` to force the creation of the underlying service.
    `void` | `run()` | Invoked when the Registry is shutdown; deletes the instantiated object (if it exists) and replaces the ObjectCreator with one that throws an IllegalStateException.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JustInTimeObjectCreator

          public JustInTimeObjectCreator​(ServiceActivityTracker tracker,
                                         ObjectCreator<T> creator,
                                         String serviceId)

  - ### Method Detail

    - #### createObject

          public T createObject()

      Checks to see if the proxy has been shutdown, then invokes `ObjectCreator.createObject()` if it has not already done so.
      Specified by:
        `createObject` in interface `ObjectCreator<T>`
      Throws:
        `IllegalStateException` - if the registry has been shutdown

    - #### eagerLoadService

          public void eagerLoadService()

      Invokes `createObject()` to force the creation of the underlying service.
      Specified by:
        `eagerLoadService` in interface `EagerLoadServiceProxy`

    - #### run

          public void run()

      Invoked when the Registry is shutdown; deletes the instantiated object (if it exists) and replaces the ObjectCreator with one that throws an IllegalStateException.
      Specified by:
        `run` in interface `Runnable`