1 package org.jellyfish.implementation;
2
3 import java.util.Properties;
4
5 import javax.naming.Context;
6 import javax.naming.NamingException;
7 import javax.naming.directory.DirContext;
8 import javax.naming.directory.InitialDirContext;
9
10 import org.apache.avalon.framework.logger.LogEnabled;
11 import org.apache.avalon.framework.logger.Logger;
12 import org.apache.avalon.framework.service.ServiceException;
13 import org.apache.avalon.framework.service.ServiceManager;
14 import org.apache.avalon.framework.service.Serviceable;
15 import org.jellyfish.ConfigurationManager;
16 import org.jellyfish.ConnectionManager;
17
18 public class ConnectionManagerDefault
19 implements ConnectionManager, Serviceable, LogEnabled {
20 private static ConnectionManagerDefault instance;
21 private DirContext initialContext;
22 private ServiceManager serviceManager;
23 private Logger logger;
24 private ConfigurationManager configurationManager;
25
26 public ConnectionManagerDefault() {
27 }
28
29 public synchronized DirContext getContext() {
30 if (initialContext == null) {
31 try {
32 initialContext =
33 getContext(
34 configurationManager
35 .getConfiguration()
36 .getConnectionDn(),
37 configurationManager
38 .getConfiguration()
39 .getConnectionPassword());
40 logger.debug(
41 "Connected to "
42 + configurationManager
43 .getConfiguration()
44 .getConnectionUrl());
45 } catch (NamingException e) {
46 logger.fatalError(e.getMessage());
47 throw new RuntimeException("Could not connect.");
48 }
49 }
50 return initialContext;
51 }
52
53 public synchronized DirContext getContext(String userName, String password)
54 throws NamingException {
55 Properties properties = new Properties();
56 properties.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
57 properties.setProperty(
58 Context.PROVIDER_URL,
59 configurationManager.getConfiguration().getConnectionUrl());
60 properties.setProperty(
61 Context.INITIAL_CONTEXT_FACTORY,
62 configurationManager.getConfiguration().getContextFactory());
63 properties.setProperty(Context.SECURITY_PRINCIPAL, userName);
64 properties.setProperty(Context.SECURITY_CREDENTIALS, password);
65 return createInitialContext(properties);
66 }
67
68 protected DirContext createInitialContext(Properties properties)
69 throws NamingException {
70 return new InitialDirContext(properties);
71 }
72
73 public void service(ServiceManager serviceManager) {
74 this.serviceManager = serviceManager;
75 try {
76 configurationManager =
77 (ConfigurationManager) serviceManager.lookup(
78 ConfigurationManager.ROLE);
79 } catch (ServiceException e) {
80 logger.fatalError(e.getMessage(), e);
81 throw new RuntimeException(e);
82 }
83 }
84
85 public void enableLogging(Logger logger) {
86 this.logger = logger;
87 }
88
89 }
This page was automatically generated by Maven