KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > tigris > scarab > services > TorqueService


1 package org.tigris.scarab.services;
2
3 /* ================================================================
4  * Copyright (c) 2000-2002 CollabNet. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16  *
17  * 3. The end-user documentation included with the redistribution, if
18  * any, must include the following acknowlegement: "This product includes
19  * software developed by Collab.Net <http://www.Collab.Net/>."
20  * Alternately, this acknowlegement may appear in the software itself, if
21  * and wherever such third-party acknowlegements normally appear.
22  *
23  * 4. The hosted project names must not be used to endorse or promote
24  * products derived from this software without prior written
25  * permission. For written permission, please contact info@collab.net.
26  *
27  * 5. Products derived from this software may not use the "Tigris" or
28  * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
29  * prior written permission of Collab.Net.
30  *
31  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
32  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
33  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
34  * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
35  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
37  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
38  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
39  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
40  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
41  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  *
43  * ====================================================================
44  *
45  * This software consists of voluntary contributions made by many
46  * individuals on behalf of Collab.Net.
47  */

48
49 import org.apache.turbine.Turbine;
50 import org.apache.fulcrum.BaseService;
51 import org.apache.fulcrum.InitializationException;
52 import org.apache.torque.Torque;
53 import org.tigris.scarab.om.*;
54 import org.tigris.scarab.util.Log;
55
56 /**
57  * Turbine does not yet have a way to initialize components directly, and
58  * use of fulcrum's DatabaseService causes fulcrum to try to treat all the
59  * Managers as services. So this service is used to initialize Torque.
60  * It also creates an instance of each scarab om object to avoid deadlock.
61  *
62  * @author <a HREF="mailto:jmcnally@collab.net">John McNally</a>
63  * @version $Id: TorqueService.java 9104 2004-05-10 21:04:51Z dabbous $
64  */

65 public class TorqueService
66     extends BaseService
67 {
68     /**
69      * Initializes the service by setting up Torque.
70      */

71     public void init()
72         throws InitializationException
73     {
74         try
75         {
76             Torque.init(Turbine.getConfiguration());
77             Log.get("org.apache.fulcrum").info(" Loading om instances via managers...");
78             loadOM();
79             Log.get("org.apache.fulcrum").info(" Done loading om instances.");
80         }
81         catch (Exception JavaDoc e)
82         {
83             throw new InitializationException("Can't initialize Torque!", e); //EXCEPTION
84
}
85
86         // indicate that the service initialized correctly
87
setInit(true);
88     }
89
90     /**
91      * This method loads all the classes in the org.tigris.scarab.om
92      * package. The torque classes of Foo and FooPeer contain a circular
93      * relationship so loading the class of Foo requires a FooPeer instance
94      * and creating a FooPeer instance requires the Foo class to be loaded.
95      * It is possible to deadlock if multiple threads attempt to load Foo
96      * simultaneously. A full analysis of possible deadlock scenarios has not
97      * been done, so to be as safe as possible we create one instance of each
98      * om object via the Manager.getInstance() method; this makes sure the
99      * Managers are initialized as well. It may be possible to
100      * reduce this to only calling Class.forName on each class.
101      */

102     protected void loadOM()
103         throws Exception JavaDoc
104     {
105         ActivityManager.getInstance();
106         ActivitySetManager.getInstance();
107         ActivitySetTypeManager.getInstance();
108         AttachmentManager.getInstance();
109         AttachmentTypeManager.getInstance();
110         AttributeClassManager.getInstance();
111         AttributeGroupManager.getInstance();
112         AttributeManager.getInstance();
113         AttributeOptionManager.getInstance();
114         AttributeTypeManager.getInstance();
115         // AttributeValue class is abstract
116
AttributeValueManager.getManager();
117         Class.forName("org.tigris.scarab.om.AttributeValue");
118         DependManager.getInstance();
119         DependTypeManager.getInstance();
120         FrequencyManager.getInstance();
121         GlobalParameterManager.getInstance();
122         // Issue class does not have public no-arg ctor
123
IssueManager.getManager();
124         Class.forName("org.tigris.scarab.om.Issue");
125         IssueTemplateInfoManager.getInstance();
126         IssueTypeManager.getInstance();
127         IssueVoteManager.getInstance();
128         MITListItemManager.getInstance();
129         MITListManager.getInstance();
130         ModificationManager.getInstance();
131         ModuleManager.getInstance();
132         OptionRelationshipManager.getInstance();
133         PendingGroupUserRoleManager.getInstance();
134         QueryManager.getInstance();
135         RAttributeAttributeGroupManager.getInstance();
136         ReportManager.getInstance();
137         RIssueTypeAttributeManager.getInstance();
138         RIssueTypeOptionManager.getInstance();
139         RModuleAttributeManager.getInstance();
140         RModuleIssueTypeManager.getInstance();
141         RModuleOptionManager.getInstance();
142         RModuleUserAttributeManager.getInstance();
143         // ROptionOption class does not have public no-arg ctor
144
ROptionOptionManager.getManager();
145         Class.forName("org.tigris.scarab.om.ROptionOption");
146         RQueryUserManager.getInstance();
147         ScarabUserManager.getInstance();
148         ScopeManager.getInstance();
149         UserPreferenceManager.getInstance();
150         UserVoteManager.getInstance();
151     }
152
153     /**
154      * Shuts down the service.
155      *
156      * This method halts the IDBroker's daemon thread in all of
157      * the DatabaseMap's.
158      */

159     public void shutdown()
160     {
161         Torque.shutdown();
162     }
163 }
164
Popular Tags