001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 2004 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer(s): Florent BENOIT
022: * --------------------------------------------------------------------------
023: * $Id: AbsDBServiceImpl.java 9618 2006-09-21 11:27:49Z benoitf $
024: * --------------------------------------------------------------------------
025: */package org.objectweb.jonas.db;
026:
027: import java.util.ArrayList;
028: import java.util.List;
029: import java.util.StringTokenizer;
030:
031: import javax.naming.Context;
032: import javax.naming.NamingException;
033:
034: import org.objectweb.jonas.common.Log;
035: import org.objectweb.jonas.service.AbsServiceImpl;
036: import org.objectweb.jonas.service.ServiceException;
037: import org.objectweb.util.monolog.api.BasicLevel;
038: import org.objectweb.util.monolog.api.Logger;
039:
040: /**
041: * Abstract database service to be implemented by implementation of Java
042: * databases
043: * @author Florent Benoit
044: */
045: public abstract class AbsDBServiceImpl extends AbsServiceImpl {
046:
047: /**
048: * Property for the port number
049: */
050: private static final String PORT_NUMBER = "port";
051:
052: /**
053: * Property for the name of the database
054: */
055: private static final String DATABASE_NAME = "dbname";
056:
057: /**
058: * Property for the default database name
059: */
060: private static final String DEFAULT_DATABASE_NAME = "db_jonas";
061:
062: /**
063: * Property for looking up users (suffix by 1..n)
064: */
065: private static final String USERS = "user";
066:
067: /**
068: * Logger used by this service
069: */
070: private static Logger logger = null;
071:
072: /**
073: * Initialize the service.
074: * @param ctx the configuration context of the service.
075: * @throws ServiceException if the initialization failed.
076: */
077:
078: protected void doInit(Context ctx) throws ServiceException {
079: logger = Log.getLogger(Log.JONAS_DB_PREFIX);
080:
081: // Lookup port number
082: String port = null;
083: try {
084: port = (String) ctx.lookup(PORT_NUMBER);
085: } catch (NamingException ne) {
086: logger
087: .log(BasicLevel.INFO,
088: "Use the default port as the property is missing in jonas.properties file");
089: }
090:
091: // Database name
092: String databaseName = null;
093: try {
094: databaseName = (String) ctx.lookup(DATABASE_NAME);
095: } catch (NamingException ne) {
096: logger
097: .log(
098: BasicLevel.INFO,
099: "Use the default databsename '"
100: + DEFAULT_DATABASE_NAME
101: + "' as the property is missing in jonas.properties file.");
102: databaseName = DEFAULT_DATABASE_NAME;
103: }
104:
105: // Users
106: List users = new ArrayList();
107: boolean hasUsers = true;
108: int i = 1;
109: while (hasUsers) {
110: try {
111: String usernameAndPass = (String) ctx.lookup(USERS + i);
112: if (logger.isLoggable(BasicLevel.DEBUG)) {
113: logger.log(BasicLevel.DEBUG,
114: "Adding user/password '" + usernameAndPass
115: + "'.");
116: }
117:
118: StringTokenizer st = new StringTokenizer(
119: usernameAndPass, ":");
120: String name = st.nextToken();
121: String pass = "";
122: if (st.hasMoreTokens()) {
123: pass = st.nextToken();
124: }
125: users.add(new User(name, pass));
126: } catch (NamingException ne) {
127: if (logger.isLoggable(BasicLevel.DEBUG)) {
128: logger.log(BasicLevel.DEBUG,
129: "No more users (length =" + i + ").");
130: }
131: hasUsers = false;
132: }
133: i++;
134: }
135:
136: initServer(users, databaseName, port);
137: }
138:
139: /**
140: * Create a database with the specified arguments. Need to be implemented by
141: * classes extending this one.
142: * @param users user/password (separated by a ":")
143: * @param databaseName name of the database
144: * @param portNumber port number of the database
145: */
146: protected abstract void initServer(List users, String databaseName,
147: String portNumber);
148:
149: /**
150: * Start the service.
151: * @throws ServiceException if the startup failed.
152: */
153: protected void doStart() throws ServiceException {
154: if (logger.isLoggable(BasicLevel.DEBUG)) {
155: logger.log(BasicLevel.DEBUG, "");
156: }
157: }
158:
159: /**
160: * Stop the service.
161: * @throws ServiceException if the stop failed.
162: */
163: protected void doStop() throws ServiceException {
164: if (logger.isLoggable(BasicLevel.DEBUG)) {
165: logger.log(BasicLevel.DEBUG, "");
166: }
167: }
168:
169: /**
170: * @return the logger.
171: */
172: public static Logger getLogger() {
173: return logger;
174: }
175: }
|