01: // THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
02: // CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
03: // BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
04: // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
05: // OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
06: // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
07: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
08: // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
09: // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
10: // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
11: // EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
12: // POSSIBILITY OF SUCH DAMAGE.
13: //
14: // Copyright 2000-2005 © Softaris Pty.Ltd. All Rights Reserved.
15: package com.metaboss.enterprise.ps.impl;
16:
17: import javax.naming.Context;
18: import javax.naming.InitialContext;
19: import javax.naming.NamingException;
20:
21: import com.metaboss.enterprise.ps.PSNamingAndDirectoryServiceInvocationException;
22: import com.metaboss.enterprise.ps.PSObject;
23: import com.metaboss.enterprise.spi.JDBCConnectionProvider;
24:
25: /** Interface to the implementation of the persistance layer service */
26: public abstract class PSObjectImpl implements PSObject {
27: private static Object cJDBCConnectionProviderCreationSemaphore = new Object();
28: private static JDBCConnectionProvider cJDBCConnectionProvider = null;
29:
30: // Helper. Ensures that static memebrs are properly initialised
31: private static void initStaticMembersIfNecessary()
32: throws PSNamingAndDirectoryServiceInvocationException {
33: if (cJDBCConnectionProvider == null) {
34: synchronized (cJDBCConnectionProviderCreationSemaphore) {
35: if (cJDBCConnectionProvider == null) {
36: try {
37: // Hook up to the JDBCConnectionProvider
38: Context ctx = new InitialContext();
39: cJDBCConnectionProvider = (JDBCConnectionProvider) ctx
40: .lookup(JDBCConnectionProvider.COMPONENT_URL);
41: } catch (NamingException e) {
42: throw new PSNamingAndDirectoryServiceInvocationException(
43: "Unable to locate/instantiate JDBCConnectionProvider",
44: e);
45: }
46: }
47: }
48: }
49: }
50: }
|