01: /*
02: * $RCSfile: JAIServerConfigurationSpi.java,v $
03: *
04: * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
05: *
06: * Use is subject to license terms.
07: *
08: * $Revision: 1.1 $
09: * $Date: 2005/02/11 04:56:49 $
10: * $State: Exp $
11: */
12: package com.sun.media.jai.remote;
13:
14: import javax.media.jai.JAI;
15:
16: // This uses the ImageIO idea of "services" to look for
17: // concrete class that implement this interface. These concrete
18: // classes must have been registered/listed in the
19: // META-INF/services/com.sun.media.jai.remote.JAIServerConfigurationSpi file.
20:
21: /**
22: * <p> An interface definition to aid in the automatic loading of
23: * user-defined JAI based Remote Imaging server configuration logic.
24: *
25: * <p> All concrete classes that implement this
26: * interface can register by listing themselves in the
27: * "<code>META-INF/services/com.sun.media.jai.remote.JAIServerConfigurationSpi</code>"
28: * file that can be found in the classpath (this file is often contained
29: * in a jar file along with the class files). The file should contain
30: * a list of fully-qualified concrete provider-class names, one per
31: * line. Space and tab characters surrounding each name, as well as
32: * blank lines, are ignored. The comment character is <tt>'#'</tt>
33: * (<tt>0x23</tt>); on each line all characters following the first
34: * comment character are ignored. The file must be encoded in UTF-8.
35: *
36: * <p> If a particular concrete provider class is named in more than one
37: * configuration file, or is named in the same configuration file more
38: * than once, then the duplicates will be ignored. The configuration
39: * file naming a particular provider need not be in the same jar file or
40: * other distribution unit as the provider itself. The provider must be
41: * accessible from the same class loader that was initially queried to
42: * locate the configuration file; note that this is not necessarily the
43: * class loader that found the file.
44: *
45: * <p>All such concrete classes must have a zero-argument
46: * constructor so that they may be instantiated during lookup. The
47: * <code>updateServer()</code> method of all such registered
48: * classes will be called with the default instance of the <code>JAI</code>
49: * class. Note that this will take place after the JAI
50: * <code>OperationRegistry</code> has been initialized with the
51: * default JAI registry file (META-INF/javax.media.jai.registryFile.jai),
52: * once all "META-INF/registryFile.jai"s found in the
53: * classpath are loaded and the <code>updateRegistry</code> method of each
54: * <code>OperationRegistrySpi</code> instance has been executed. There is
55: * no guarantee of the order in which the <code>updateServer()</code> method
56: * of each <code>JAIServerConfigurationSpi</code> instance will be invoked.
57: *
58: * <p>It is possible to provide arguments to a class implementing this
59: * interface (or any other Service Provider Interface) using the standard
60: * <code>Java</code> <code> -D<propertyName>=<value></code> mechanism on
61: * the command line when starting an application.
62: *
63: * @see javax.media.jai.remote.JAIRMIDescriptor
64: * @see javax.media.jai.OperationRegistry
65: * @see javax.media.jai.OperationRegistry#writeExternal
66: * @see javax.media.jai.OperationRegistrySpi
67: *
68: * @since JAI 1.1
69: */
70: public interface JAIServerConfigurationSpi {
71:
72: /**
73: * This method will be called for all registered "service-providers"
74: * of this interface just after the default <code>JAI</code> instance
75: * has been constructed.
76: */
77: public void updateServer(JAI jaiInstance);
78: }
|