/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.log4j.receivers.db; import org.apache.log4j.component.plugins.Pauseable; import org.apache.log4j.component.plugins.Receiver; import org.apache.log4j.component.scheduler.Scheduler; import org.apache.log4j.component.spi.LoggerRepositoryEx; import org.apache.log4j.xml.DOMConfigurator; import org.apache.log4j.xml.UnrecognizedElementHandler; import org.w3c.dom.Element; import java.util.Properties; /** * * @author Scott Deboy <sdeboy@apache.org> * @author Ceki Gülcü * */ public class DBReceiver extends Receiver implements Pauseable, UnrecognizedElementHandler { /** * By default we refresh data every 1000 milliseconds. * @see #setRefreshMillis */ static int DEFAULT_REFRESH_MILLIS = 1000; ConnectionSource connectionSource; int refreshMillis = DEFAULT_REFRESH_MILLIS; DBReceiverJob receiverJob; boolean paused = false; public void activateOptions() { if(connectionSource == null) { throw new IllegalStateException( "DBAppender cannot function without a connection source"); } receiverJob = new DBReceiverJob(this); receiverJob.setLoggerRepository(repository); if(this.repository == null) { throw new IllegalStateException( "DBAppender cannot function without a reference to its owning repository"); } if (repository instanceof LoggerRepositoryEx) { Scheduler scheduler = ((LoggerRepositoryEx) repository).getScheduler(); scheduler.schedule( receiverJob, System.currentTimeMillis() + 500, refreshMillis); } } public void setRefreshMillis(int refreshMillis) { this.refreshMillis = refreshMillis; } public int getRefreshMillis() { return refreshMillis; } /** * @return Returns the connectionSource. */ public ConnectionSource getConnectionSource() { return connectionSource; } /** * @param connectionSource The connectionSource to set. */ public void setConnectionSource(ConnectionSource connectionSource) { this.connectionSource = connectionSource; } /* (non-Javadoc) * @see org.apache.log4j.plugins.Plugin#shutdown() */ public void shutdown() { getLogger().info("removing receiverJob from the Scheduler."); if(this.repository instanceof LoggerRepositoryEx) { Scheduler scheduler = ((LoggerRepositoryEx) repository).getScheduler(); scheduler.delete(receiverJob); } } /* (non-Javadoc) * @see org.apache.log4j.plugins.Pauseable#setPaused(boolean) */ public void setPaused(boolean paused) { this.paused = paused; } /* (non-Javadoc) * @see org.apache.log4j.plugins.Pauseable#isPaused() */ public boolean isPaused() { return paused; } /** * {@inheritDoc} */ public boolean parseUnrecognizedElement(Element element, Properties props) throws Exception { if ("connectionSource".equals(element.getNodeName())) { Object instance = DOMConfigurator.parseElement(element, props, ConnectionSource.class); if (instance instanceof ConnectionSource) { ConnectionSource source = (ConnectionSource) instance; source.activateOptions(); setConnectionSource(source); } return true; } return false; } }