001// Copyright 2004, 2005 The Apache Software Foundation 002// 003// Licensed under the Apache License, Version 2.0 (the "License"); 004// you may not use this file except in compliance with the License. 005// You may obtain a copy of the License at 006// 007// http://www.apache.org/licenses/LICENSE-2.0 008// 009// Unless required by applicable law or agreed to in writing, software 010// distributed under the License is distributed on an "AS IS" BASIS, 011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012// See the License for the specific language governing permissions and 013// limitations under the License. 014 015package org.apache.hivemind.internal; 016 017/** 018 * A service model is associated with a {@link org.apache.hivemind.internal.ServicePoint} to supply 019 * rules for the lifecycle of the service. This concerns when the service is first created and 020 * whether it is pooled, etc. Each service extension point will have a unique instance of 021 * ServiceModel. 022 * 023 * @author Howard Lewis Ship 024 */ 025public interface ServiceModel 026{ 027 /** 028 * Invoked by the service extension point to obtain the service implementation. The model may 029 * return the actual service implementation or some form of proxy. 030 * <p> 031 * This method is only invoked <em>once</em>; the returned value is used from that point on 032 * (in all threads, by all callers). Most models return a proxy that takes care of realizing the 033 * service (actually creating the service, configuring it, and wrapping it with interceptors) 034 * only when needed. 035 */ 036 037 public Object getService(); 038 039 /** 040 * Forces the core service implementation (and any interceptors) to be fully instantiated 041 * immediately, rather than waiting for the first service method invocation. This is used when a 042 * service needs to be "eagerly loaded" rather than "lazy loaded". 043 */ 044 public void instantiateService(); 045}