1 | /** |
2 | * Copyright 2009 ATG DUST Project Licensed under the Apache License, Version |
3 | * 2.0 (the "License"); you may not use this file except in compliance with the |
4 | * License. You may obtain a copy of the License at |
5 | * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law |
6 | * or agreed to in writing, software distributed under the License is |
7 | * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
8 | * KIND, either express or implied. See the License for the specific language |
9 | * governing permissions and limitations under the License. |
10 | */ |
11 | |
12 | package atg.service.jdbc; |
13 | |
14 | import java.sql.Connection; |
15 | import java.sql.SQLException; |
16 | import java.sql.Statement; |
17 | import java.util.Properties; |
18 | |
19 | import atg.nucleus.ServiceException; |
20 | import atg.test.util.DBUtils; |
21 | |
22 | /** |
23 | * This datasource is used for testing. It starts up an HSQLDB in memory |
24 | * instance on localhost automatically. The database will be named "testdb" by |
25 | * default. If you need to name it something else set the "databaseName" |
26 | * property on this component. You may want to change the name if your test |
27 | * requires running two databases at the same time. |
28 | * |
29 | * @author adamb |
30 | * @version $Id:n HSQLDB |
31 | * //test/UnitTests/base/main/src/Java/atg/service/jdbc/HSQLDBDataSource |
32 | * .java#2 $ |
33 | */ |
34 | public class HSQLDBDataSource extends InitializingDataSourceBase { |
35 | |
36 | // Don't shutdown HSQLDB by default. It might stop before other components |
37 | // that require it. |
38 | public boolean mShutdownHSQLDB = false; |
39 | |
40 | /** |
41 | * Returns true if the "SHUTDOWN" sql statment should be sent to HSQLDB |
42 | * when doStopService is called on this component. |
43 | * @return |
44 | */ |
45 | public boolean isShutdownHSQLDB() { |
46 | return mShutdownHSQLDB; |
47 | } |
48 | |
49 | /** |
50 | * Sets the boolean which controls if HSQLDB should be shutdown when doStopService |
51 | * is called on this component. |
52 | * @param shouldShutdownHSQLDB |
53 | */ |
54 | public void setShutdownHSQLDB(boolean shouldShutdownHSQLDB) { |
55 | mShutdownHSQLDB = shouldShutdownHSQLDB; |
56 | } |
57 | |
58 | // -------------------------- |
59 | /** |
60 | * Starts this DataSource. Since the datasource uses an in memory HSQL |
61 | * database, the database actually is started on the first call to |
62 | * getConnection(). |
63 | */ |
64 | @Override |
65 | public void doStartService() throws ServiceException { |
66 | Properties props = DBUtils.getHSQLDBInMemoryDBConnection(getName()); |
67 | // set our properties from this object |
68 | this.setDriver(props.getProperty("driver")); |
69 | this.setURL(props.getProperty("URL")); |
70 | this.setUser(props.getProperty("user")); |
71 | this.setPassword(props.getProperty("password")); |
72 | if (isLoggingInfo()) |
73 | logInfo("HSQLDB DataSource starting with properties " + props.toString()); |
74 | super.doStartService(); |
75 | } |
76 | |
77 | // -------------------------- |
78 | /** |
79 | * Called when Nucleus is shutdown. Issues the "SHUTDOWN" command to the |
80 | * HSQLDB database. |
81 | */ |
82 | @Override |
83 | public void doStopService() { |
84 | if (mShutdownHSQLDB) { |
85 | if (isLoggingInfo()) |
86 | logInfo("HSQLDB DataSource shutting down."); |
87 | Connection connection = null; |
88 | try { |
89 | connection = this.getDriverManagerConnection(); |
90 | Statement st = connection.createStatement(); |
91 | st.execute("SHUTDOWN"); |
92 | } catch (SQLException e) { |
93 | if (isLoggingError()) |
94 | logError(e.getMessage()); |
95 | } finally { |
96 | if (connection != null) { |
97 | try { |
98 | connection.close(); |
99 | } catch (SQLException e) { |
100 | ; // eat it |
101 | } |
102 | } |
103 | } |
104 | } |
105 | |
106 | } |
107 | } |