1 | // SECTION-START[License Header] |
2 | // <editor-fold defaultstate="collapsed" desc=" Generated License "> |
3 | /* |
4 | * Java Object Management and Configuration |
5 | * Copyright (C) Christian Schulte, 2005-206 |
6 | * All rights reserved. |
7 | * |
8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions |
10 | * are met: |
11 | * |
12 | * o Redistributions of source code must retain the above copyright |
13 | * notice, this list of conditions and the following disclaimer. |
14 | * |
15 | * o Redistributions in binary form must reproduce the above copyright |
16 | * notice, this list of conditions and the following disclaimer in |
17 | * the documentation and/or other materials provided with the |
18 | * distribution. |
19 | * |
20 | * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
21 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
22 | * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL |
23 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, |
24 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
25 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
29 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 | * |
31 | * $JOMC: ObjectManagerFactory.java 4795 2013-04-21 09:09:02Z schulte $ |
32 | * |
33 | */ |
34 | // </editor-fold> |
35 | // SECTION-END |
36 | package org.jomc; |
37 | |
38 | // SECTION-START[Documentation] |
39 | // <editor-fold defaultstate="collapsed" desc=" Generated Documentation "> |
40 | /** |
41 | * Factory for the {@code ObjectManager} singleton. |
42 | * |
43 | * <dl> |
44 | * <dt><b>Identifier:</b></dt><dd>org.jomc.ObjectManagerFactory</dd> |
45 | * <dt><b>Name:</b></dt><dd>JOMC ⁑ API</dd> |
46 | * <dt><b>Abstract:</b></dt><dd>Yes</dd> |
47 | * <dt><b>Final:</b></dt><dd>Yes</dd> |
48 | * <dt><b>Stateless:</b></dt><dd>No</dd> |
49 | * </dl> |
50 | * |
51 | * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0 |
52 | * @version 1.0 |
53 | */ |
54 | // </editor-fold> |
55 | // SECTION-END |
56 | // SECTION-START[Annotations] |
57 | // <editor-fold defaultstate="collapsed" desc=" Generated Annotations "> |
58 | @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) |
59 | // </editor-fold> |
60 | // SECTION-END |
61 | public abstract class ObjectManagerFactory |
62 | { |
63 | // SECTION-START[ObjectManagerFactory] |
64 | |
65 | /** Constant for the name of the class providing the default {@code getObjectManager()} method. */ |
66 | private static final String DEFAULT_FACTORY_CLASSNAME = "org.jomc.ri.DefaultObjectManager"; |
67 | |
68 | /** Constant for the name of the class providing the default {@code ObjectManager} implementation. */ |
69 | private static final String DEFAULT_IMPLEMENTATION_CLASSNAME = "org.jomc.ri.DefaultObjectManager"; |
70 | |
71 | /** Constant for the name of the system property holding the {@code getObjectManager()} method's class name. */ |
72 | private static final String SYS_FACTORY_CLASSNAME = "org.jomc.ObjectManagerFactory"; |
73 | |
74 | /** Constant for the name of the system property holding the {@code ObjectManager} implementation class name. */ |
75 | private static final String SYS_IMPLEMENTATION_CLASSNAME = "org.jomc.ObjectManager"; |
76 | |
77 | /** |
78 | * Gets the {@code ObjectManager} singleton instance. |
79 | * <p>This method is controlled by system property {@code org.jomc.ObjectManagerFactory} providing the name of a |
80 | * class declaring a <blockquote>{@code public static ObjectManager getObjectManager( ClassLoader )}</blockquote> |
81 | * method called by this method to get the instance to return.</p> |
82 | * <p><b>Note</b><br/> |
83 | * The {@code newObjectManager} method should be used by {@code getObjectManager} implementors to retrieve a new |
84 | * {@code ObjectManager} implementation.</p> |
85 | * |
86 | * @param classLoader The class loader to use for getting the singleton instance; {@code null} to use the platform's |
87 | * bootstrap class loader. |
88 | * |
89 | * @return The {@code ObjectManager} singleton instance. |
90 | * |
91 | * @see #newObjectManager(java.lang.ClassLoader) |
92 | * |
93 | * @throws ObjectManagementException if getting the singleton instance fails. |
94 | */ |
95 | public static ObjectManager getObjectManager( final ClassLoader classLoader ) |
96 | { |
97 | try |
98 | { |
99 | return (ObjectManager) Class.forName( System.getProperty( |
100 | SYS_FACTORY_CLASSNAME, DEFAULT_FACTORY_CLASSNAME ), false, classLoader ). |
101 | getMethod( "getObjectManager", ClassLoader.class ).invoke( null, classLoader ); |
102 | |
103 | } |
104 | catch ( final Exception e ) |
105 | { |
106 | throw new ObjectManagementException( getMessage( e ), e ); |
107 | } |
108 | } |
109 | |
110 | /** |
111 | * Creates a new {@code ObjectManager} instance. |
112 | * <p>The object manager implementation returned by this method is controlled by system property |
113 | * {@code org.jomc.ObjectManager} providing the name of the {@code ObjectManager} implementation class to return |
114 | * a new instance of.</p> |
115 | * |
116 | * @param classLoader The class loader to use for creating the instance; {@code null} to use the platform's |
117 | * bootstrap class loader. |
118 | * |
119 | * @return A new {@code ObjectManager} instance. |
120 | * |
121 | * @throws ObjectManagementException if creating a new {@code ObjectManager} instance fails. |
122 | */ |
123 | public static ObjectManager newObjectManager( final ClassLoader classLoader ) |
124 | { |
125 | try |
126 | { |
127 | return Class.forName( System.getProperty( |
128 | SYS_IMPLEMENTATION_CLASSNAME, DEFAULT_IMPLEMENTATION_CLASSNAME ), false, classLoader ). |
129 | asSubclass( ObjectManager.class ).newInstance(); |
130 | |
131 | } |
132 | catch ( final Exception e ) |
133 | { |
134 | throw new ObjectManagementException( getMessage( e ), e ); |
135 | } |
136 | } |
137 | |
138 | private static String getMessage( final Throwable t ) |
139 | { |
140 | return t != null |
141 | ? t.getMessage() != null && t.getMessage().trim().length() > 0 |
142 | ? t.getMessage() |
143 | : getMessage( t.getCause() ) |
144 | : null; |
145 | |
146 | } |
147 | |
148 | // SECTION-END |
149 | // SECTION-START[Constructors] |
150 | // <editor-fold defaultstate="collapsed" desc=" Generated Constructors "> |
151 | /** Creates a new {@code ObjectManagerFactory} instance. */ |
152 | @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) |
153 | public ObjectManagerFactory() |
154 | { |
155 | // SECTION-START[Default Constructor] |
156 | super(); |
157 | // SECTION-END |
158 | } |
159 | // </editor-fold> |
160 | // SECTION-END |
161 | // SECTION-START[Dependencies] |
162 | // SECTION-END |
163 | // SECTION-START[Properties] |
164 | // SECTION-END |
165 | // SECTION-START[Messages] |
166 | // SECTION-END |
167 | } |