| | |
| | | |
| | | |
| | | |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.concurrent.CopyOnWriteArrayList; |
| | | import java.util.List; |
| | | import java.util.ArrayList; |
| | | import java.lang.reflect.Method; |
| | |
| | | |
| | | // The set of access loggers that have been registered with the server. It |
| | | // will initially be empty. |
| | | static ConcurrentHashMap<DN, AccessLogPublisher> accessPublishers = |
| | | new ConcurrentHashMap<DN, AccessLogPublisher>(); |
| | | static CopyOnWriteArrayList<AccessLogPublisher> accessPublishers = |
| | | new CopyOnWriteArrayList<AccessLogPublisher>(); |
| | | |
| | | // The singleton instance of this class for configuration purposes. |
| | | static final AccessLogger instance = new AccessLogger(); |
| | |
| | | /** |
| | | * Add an access log publisher to the access logger. |
| | | * |
| | | * @param dn The DN of the configuration entry for the publisher. |
| | | * @param publisher The access log publisher to add. |
| | | */ |
| | | public synchronized static void addAccessLogPublisher(DN dn, |
| | | AccessLogPublisher publisher) |
| | | public synchronized static void addAccessLogPublisher( |
| | | AccessLogPublisher publisher) |
| | | { |
| | | accessPublishers.put(dn, publisher); |
| | | accessPublishers.add(publisher); |
| | | } |
| | | |
| | | /** |
| | | * Remove an access log publisher from the access logger. |
| | | * |
| | | * @param dn The DN of the publisher to remove. |
| | | * @param publisher The access log publisher to remove. |
| | | * @return The publisher that was removed or null if it was not found. |
| | | */ |
| | | public synchronized static AccessLogPublisher removeAccessLogPublisher(DN dn) |
| | | public synchronized static boolean removeAccessLogPublisher( |
| | | AccessLogPublisher publisher) |
| | | { |
| | | AccessLogPublisher AccessLogPublisher = accessPublishers.get(dn); |
| | | if(AccessLogPublisher != null) |
| | | boolean removed = accessPublishers.remove(publisher); |
| | | |
| | | if(removed) |
| | | { |
| | | AccessLogPublisher.close(); |
| | | publisher.close(); |
| | | } |
| | | |
| | | return AccessLogPublisher; |
| | | return removed; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public synchronized static void removeAllAccessLogPublishers() |
| | | { |
| | | for(AccessLogPublisher publisher : accessPublishers.values()) |
| | | for(AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.close(); |
| | | } |
| | |
| | | { |
| | | AccessLogPublisher AccessLogPublisher = getAccessPublisher(config); |
| | | |
| | | addAccessLogPublisher(config.dn(), AccessLogPublisher); |
| | | addAccessLogPublisher(AccessLogPublisher); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | AccessLogPublisher AccessLogPublisher = getAccessPublisher(config); |
| | | |
| | | addAccessLogPublisher(config.dn(), AccessLogPublisher); |
| | | addAccessLogPublisher(AccessLogPublisher); |
| | | } |
| | | catch(ConfigException e) |
| | | { |
| | |
| | | ArrayList<String> messages = new ArrayList<String>(); |
| | | |
| | | DN dn = config.dn(); |
| | | AccessLogPublisher AccessLogPublisher = accessPublishers.get(dn); |
| | | |
| | | if(AccessLogPublisher == null) |
| | | AccessLogPublisher accessLogPublisher = null; |
| | | for(AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | if(publisher.getDN().equals(dn)) |
| | | { |
| | | accessLogPublisher = publisher; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if(accessLogPublisher == null) |
| | | { |
| | | if(config.isEnabled()) |
| | | { |
| | |
| | | // indicate that administrative action is required for that |
| | | // change to take effect. |
| | | String className = config.getJavaImplementationClass(); |
| | | if(!className.equals(AccessLogPublisher.getClass().getName())) |
| | | if(!className.equals(accessLogPublisher.getClass().getName())) |
| | | { |
| | | adminActionRequired = true; |
| | | } |
| | |
| | | else |
| | | { |
| | | // The publisher is being disabled so shut down and remove. |
| | | removeAccessLogPublisher(config.dn()); |
| | | removeAccessLogPublisher(accessLogPublisher); |
| | | } |
| | | } |
| | | |
| | |
| | | List<String> unacceptableReasons) |
| | | { |
| | | DN dn = config.dn(); |
| | | AccessLogPublisher AccessLogPublisher = accessPublishers.get(dn); |
| | | return AccessLogPublisher != null; |
| | | |
| | | AccessLogPublisher accessLogPublisher = null; |
| | | for(AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | if(publisher.getDN().equals(dn)) |
| | | { |
| | | accessLogPublisher = publisher; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return accessLogPublisher != null; |
| | | |
| | | } |
| | | |
| | |
| | | * {@inheritDoc} |
| | | */ |
| | | public ConfigChangeResult applyConfigurationDelete( |
| | | AccessLogPublisherCfg config) |
| | | { |
| | | // Default result code. |
| | | ResultCode resultCode = ResultCode.SUCCESS; |
| | | boolean adminActionRequired = false; |
| | | AccessLogPublisherCfg config) |
| | | { |
| | | // Default result code. |
| | | ResultCode resultCode = ResultCode.SUCCESS; |
| | | boolean adminActionRequired = false; |
| | | |
| | | removeAccessLogPublisher(config.dn()); |
| | | AccessLogPublisher accessLogPublisher = null; |
| | | for(AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | if(publisher.getDN().equals(config.dn())) |
| | | { |
| | | accessLogPublisher = publisher; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return new ConfigChangeResult(resultCode, adminActionRequired); |
| | | } |
| | | if(accessLogPublisher != null) |
| | | { |
| | | removeAccessLogPublisher(accessLogPublisher); |
| | | } |
| | | else |
| | | { |
| | | resultCode = ResultCode.NO_SUCH_OBJECT; |
| | | } |
| | | |
| | | return new ConfigChangeResult(resultCode, adminActionRequired); |
| | | } |
| | | |
| | | private boolean isJavaClassAcceptable(AccessLogPublisherCfg config, |
| | | List<String> unacceptableReasons) |
| | |
| | | */ |
| | | public static void logConnect(ClientConnection clientConnection) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logConnect(clientConnection); |
| | | } |
| | |
| | | DisconnectReason disconnectReason, |
| | | String message) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logDisconnect(clientConnection, disconnectReason, message); |
| | | } |
| | |
| | | */ |
| | | public static void logAbandonRequest(AbandonOperation abandonOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logAbandonRequest(abandonOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logAbandonResult(AbandonOperation abandonOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logAbandonResult(abandonOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logAddRequest(AddOperation addOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logAddRequest(addOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logAddResponse(AddOperation addOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logAddResponse(addOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logBindRequest(BindOperation bindOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logBindRequest(bindOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logBindResponse(BindOperation bindOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logBindResponse(bindOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logCompareRequest(CompareOperation compareOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logCompareRequest(compareOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logCompareResponse(CompareOperation compareOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logCompareResponse(compareOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logDeleteRequest(DeleteOperation deleteOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logDeleteRequest(deleteOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logDeleteResponse(DeleteOperation deleteOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logDeleteResponse(deleteOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logExtendedRequest(ExtendedOperation extendedOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logExtendedRequest(extendedOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logExtendedResponse(ExtendedOperation extendedOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logExtendedResponse(extendedOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logModifyRequest(ModifyOperation modifyOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logModifyRequest(modifyOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logModifyResponse(ModifyOperation modifyOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logModifyResponse(modifyOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logModifyDNRequest(ModifyDNOperation modifyDNOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logModifyDNRequest(modifyDNOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logModifyDNResponse(ModifyDNOperation modifyDNOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logModifyDNResponse(modifyDNOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logSearchRequest(SearchOperation searchOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logSearchRequest(searchOperation); |
| | | } |
| | |
| | | public static void logSearchResultEntry(SearchOperation searchOperation, |
| | | SearchResultEntry searchEntry) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logSearchResultEntry(searchOperation, searchEntry); |
| | | } |
| | |
| | | public static void logSearchResultReference(SearchOperation searchOperation, |
| | | SearchResultReference searchReference) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logSearchResultReference(searchOperation, searchReference); |
| | | } |
| | |
| | | */ |
| | | public static void logSearchResultDone(SearchOperation searchOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logSearchResultDone(searchOperation); |
| | | } |
| | |
| | | */ |
| | | public static void logUnbind(UnbindOperation unbindOperation) |
| | | { |
| | | for (AccessLogPublisher publisher : accessPublishers.values()) |
| | | for (AccessLogPublisher publisher : accessPublishers) |
| | | { |
| | | publisher.logUnbind(unbindOperation); |
| | | } |