4 new revisions:
Revision: 276fcbe27f93
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 12:39:46 2014 UTC
Log: - Supports DCDT-252....
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=276fcbe27f93
Revision: f3e50a82fdae
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 18:16:57 2014 UTC
Log: - Supports DCDT-254....
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=f3e50a82fdae
Revision: 76097ccd395a
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 20:06:37 2014 UTC
Log: - Supports DCDT-255....
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=76097ccd395a
Revision: 444696c668ed
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 20:17:57 2014 UTC
Log: - Further supports DCDT-255....
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=444696c668ed
==============================================================================
Revision: 276fcbe27f93
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 12:39:46 2014 UTC
Log: - Supports DCDT-252.
- Fixed/improved handling of system property overrides for Spring property
placeholders.
- Refactored socket adapter/listener implementation to allow for
protocol-specific socket adapter options.
- Improved DNS service concurrent request processing by switching to a
synchronous blocking queue in the associated task executor.
- Deactivated LDAP service (Ehcache-based) caching (particularly for
Distinguished Name[s]).
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=276fcbe27f93
Added:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/RejectedFutureHandler.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/ToolListenableFutureCallback.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/ToolListenableFutureTask.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractCancelRejectedFutureHandler.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractRejectedFutureHandler.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractToolListenableFutureCallback.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractToolListenableFutureTask.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpServerSocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpSocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractUdpSocketAdapter.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpServerSocketAdapter.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpSocketAdapter.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerUdpSocketAdapter.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpServerSocketAdapterImpl.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpSocketAdapterImpl.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerUdpSocketAdapterImpl.java
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/impl/ToolCacheService.java
/dcdt-service-ldap/src/main/resources/META-INF/ehcache/ehcache-service-ldap.xml
Deleted:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/TcpServerSocketAdapterImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/TcpSocketAdapterImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/UdpSocketAdapterImpl.java
Modified:
/dcdt-core/pom.xml
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/context/impl/ToolPropertySourcesPlaceholderConfigurer.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/ClientSocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/SocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/SocketAdapterOptions.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/TcpServerSocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/TcpSocketListener.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/ToolSocketOption.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/UdpSocketListener.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractClientSocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractSocketAdapter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractSocketListener.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpSocketListener.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractUdpSocketListener.java
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-net.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core.xml
/dcdt-parent/pom.xml
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpSocketListener.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerUdpSocketListener.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpSocketListenerImpl.java
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerUdpSocketListenerImpl.java
/dcdt-service-dns/src/main/resources/META-INF/spring/spring-service-dns.xml
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/config/impl/LdapServiceConfiguration.java
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/config/impl/ToolDirectoryServiceBean.java
/dcdt-service-ldap/src/main/resources/META-INF/spring/spring-service-ldap.xml
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/RejectedFutureHandler.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,7 @@
+package gov.hhs.onc.dcdt.concurrent;
+
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.RunnableFuture;
+
+public interface RejectedFutureHandler<T, U extends RunnableFuture<T>>
extends RejectedExecutionHandler {
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/ToolListenableFutureCallback.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,14 @@
+package gov.hhs.onc.dcdt.concurrent;
+
+import gov.hhs.onc.dcdt.beans.OverrideablePriorityOrdered;
+import javax.annotation.Nullable;
+import org.springframework.util.concurrent.ListenableFutureCallback;
+
+public interface ToolListenableFutureCallback<T, U extends
ToolListenableFutureTask<T>> extends ListenableFutureCallback<T>,
OverrideablePriorityOrdered {
+ public boolean hasTask();
+
+ @Nullable
+ public U getTask();
+
+ public void setTask(@Nullable U task);
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/ToolListenableFutureTask.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,15 @@
+package gov.hhs.onc.dcdt.concurrent;
+
+import java.util.Queue;
+import java.util.concurrent.RunnableFuture;
+import javax.annotation.Nullable;
+import org.springframework.util.concurrent.ListenableFuture;
+import org.springframework.util.concurrent.ListenableFutureCallback;
+
+public interface ToolListenableFutureTask<T> extends ListenableFuture<T>,
RunnableFuture<T> {
+ public boolean hasCallbacks();
+
+ public Queue<ListenableFutureCallback<? super T>> getCallbacks();
+
+ public void setCallbacks(@Nullable Queue<ListenableFutureCallback<?
super T>> callbacks);
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractCancelRejectedFutureHandler.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,15 @@
+package gov.hhs.onc.dcdt.concurrent.impl;
+
+import java.util.concurrent.RunnableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+
+public abstract class AbstractCancelRejectedFutureHandler<T, U extends
RunnableFuture<T>> extends AbstractRejectedFutureHandler<T, U> {
+ protected AbstractCancelRejectedFutureHandler(Class<T> resultClass,
Class<U> futureClass) {
+ super(resultClass, futureClass);
+ }
+
+ @Override
+ protected void rejectedExecutionInternal(U future, ThreadPoolExecutor
executor) {
+ future.cancel(true);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractRejectedFutureHandler.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,27 @@
+package gov.hhs.onc.dcdt.concurrent.impl;
+
+import gov.hhs.onc.dcdt.concurrent.RejectedFutureHandler;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import java.util.concurrent.RunnableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+
+public abstract class AbstractRejectedFutureHandler<T, U extends
RunnableFuture<T>> implements RejectedFutureHandler<T, U> {
+ protected Class<T> resultClass;
+ protected Class<U> futureClass;
+
+ protected AbstractRejectedFutureHandler(Class<T> resultClass, Class<U>
futureClass) {
+ this.resultClass = resultClass;
+ this.futureClass = futureClass;
+ }
+
+ @Override
+ public void rejectedExecution(Runnable exec, ThreadPoolExecutor
executor) {
+ Class<? extends Runnable> execClass = exec.getClass();
+
+ if (ToolClassUtils.isAssignable(execClass, this.futureClass)) {
+ this.rejectedExecutionInternal(this.futureClass.cast(exec),
executor);
+ }
+ }
+
+ protected abstract void rejectedExecutionInternal(U future,
ThreadPoolExecutor executor);
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractToolListenableFutureCallback.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,72 @@
+package gov.hhs.onc.dcdt.concurrent.impl;
+
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureCallback;
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureTask;
+import gov.hhs.onc.dcdt.utils.ToolOrderUtils;
+import javax.annotation.Nullable;
+import org.springframework.core.Ordered;
+
+public abstract class AbstractToolListenableFutureCallback<T, U extends
ToolListenableFutureTask<T>> implements ToolListenableFutureCallback<T, U> {
+ protected int order = Ordered.LOWEST_PRECEDENCE;
+ protected U task;
+
+ protected AbstractToolListenableFutureCallback() {
+ this(null);
+ }
+
+ protected AbstractToolListenableFutureCallback(@Nullable U task) {
+ this.task = task;
+ }
+
+ @Override
+ public void onSuccess(@Nullable T result) {
+ this.onPreDone(true, result, null);
+ this.onSuccessInternal(result);
+ this.onPostDone(true, result, null);
+ }
+
+ @Override
+ public void onFailure(Throwable th) {
+ this.onPreDone(false, null, th);
+ this.onFailureInternal(th);
+ this.onPostDone(false, null, th);
+ }
+
+ protected void onSuccessInternal(@Nullable T result) {
+ }
+
+ protected void onFailureInternal(Throwable th) {
+ }
+
+ protected void onPostDone(boolean status, @Nullable T result,
@Nullable Throwable th) {
+ }
+
+ protected void onPreDone(boolean status, @Nullable T result, @Nullable
Throwable th) {
+ }
+
+ @Override
+ public int getOrder() {
+ return ToolOrderUtils.getOrder(this, this.order);
+ }
+
+ @Override
+ public void setOrder(int order) {
+ this.order = order;
+ }
+
+ @Override
+ public boolean hasTask() {
+ return (this.task != null);
+ }
+
+ @Nullable
+ @Override
+ public U getTask() {
+ return this.task;
+ }
+
+ @Override
+ public void setTask(@Nullable U task) {
+ this.task = task;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/concurrent/impl/AbstractToolListenableFutureTask.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,52 @@
+package gov.hhs.onc.dcdt.concurrent.impl;
+
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureTask;
+import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
+import gov.hhs.onc.dcdt.utils.ToolOrderUtils.PriorityOrderedQueue;
+import java.util.Queue;
+import java.util.concurrent.Callable;
+import javax.annotation.Nullable;
+import org.springframework.util.concurrent.ListenableFutureCallback;
+import org.springframework.util.concurrent.ListenableFutureTask;
+
+public abstract class AbstractToolListenableFutureTask<T> extends
ListenableFutureTask<T> implements ToolListenableFutureTask<T> {
+ protected Queue<ListenableFutureCallback<? super T>> callbacks = new
PriorityOrderedQueue<>();
+
+ protected AbstractToolListenableFutureTask(Callable<T> callable) {
+ super(callable);
+ }
+
+ protected AbstractToolListenableFutureTask(Runnable runnable, T
result) {
+ super(runnable, result);
+ }
+
+ @Override
+ public void run() {
+ for (ListenableFutureCallback<? super T> callback :
this.callbacks) {
+ super.addCallback(callback);
+ }
+
+ super.run();
+ }
+
+ @Override
+ public boolean hasCallbacks() {
+ return !this.callbacks.isEmpty();
+ }
+
+ @Override
+ public void addCallback(ListenableFutureCallback<? super T> callback) {
+ this.callbacks.add(callback);
+ }
+
+ @Override
+ public Queue<ListenableFutureCallback<? super T>> getCallbacks() {
+ return this.callbacks;
+ }
+
+ @Override
+ public void setCallbacks(@Nullable Queue<ListenableFutureCallback<?
super T>> callbacks) {
+ this.callbacks.clear();
+ ToolCollectionUtils.addAll(this.callbacks, callbacks);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpServerSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,120 @@
+package gov.hhs.onc.dcdt.net.sockets.impl;
+
+import gov.hhs.onc.dcdt.net.InetProtocol;
+import gov.hhs.onc.dcdt.net.sockets.SocketAdapterOptions;
+import gov.hhs.onc.dcdt.net.sockets.TcpServerSocketAdapter;
+import gov.hhs.onc.dcdt.utils.ToolNumberUtils;
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketOption;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
+
+public abstract class AbstractTcpServerSocketAdapter extends
AbstractSocketAdapter<ServerSocket> implements TcpServerSocketAdapter {
+ protected int backlog;
+
+ protected AbstractTcpServerSocketAdapter(ServerSocket socket) {
+ super(socket);
+ }
+
+ @Override
+ public Socket accept() throws IOException {
+ return this.socket.accept();
+ }
+
+ @Override
+ public void bind(SocketAddress bindSocketAddr) throws IOException {
+ if (this.hasBacklog()) {
+ this.socket.bind(bindSocketAddr, this.backlog);
+ } else {
+ this.socket.bind(bindSocketAddr);
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ this.socket.close();
+ }
+
+ @Override
+ protected <U> void setOptionInternal(SocketOption<U> optKey, U
optValue) throws IOException {
+ if (optKey == SocketAdapterOptions.BACKLOG) {
+ this.setBacklog(((Integer) optValue));
+ } else {
+ super.setOptionInternal(optKey, optValue);
+ }
+ }
+
+ @Override
+ public boolean hasBacklog() {
+ return ToolNumberUtils.isPositive(this.backlog);
+ }
+
+ @Override
+ public int getBacklog() {
+ return this.backlog;
+ }
+
+ @Override
+ public void setBacklog(int backlog) {
+ this.backlog = backlog;
+ }
+
+ @Override
+ public boolean isBound() {
+ return this.socket.isBound();
+ }
+
+ @Override
+ public boolean isClosed() {
+ return this.socket.isClosed();
+ }
+
+ @Nullable
+ @Override
+ public SocketAddress getLocalSocketAddress() {
+ return this.socket.getLocalSocketAddress();
+ }
+
+ @Override
+ public InetProtocol getProtocol() {
+ return InetProtocol.TCP;
+ }
+
+ @Override
+ public int getReceiveBufferSize() throws IOException {
+ return this.socket.getReceiveBufferSize();
+ }
+
+ @Override
+ public void setReceiveBufferSize(@Nonnegative int receiveBufferSize)
throws IOException {
+ this.socket.setReceiveBufferSize(receiveBufferSize);
+ }
+
+ @Override
+ public boolean getReuseAddress() throws IOException {
+ return this.socket.getReuseAddress();
+ }
+
+ @Override
+ public void setReuseAddress(boolean reuseAddr) throws IOException {
+ this.socket.setReuseAddress(reuseAddr);
+ }
+
+ @Override
+ public ServerSocket getSocket() {
+ return this.socket;
+ }
+
+ @Override
+ public int getTimeout() throws IOException {
+ return this.socket.getSoTimeout();
+ }
+
+ @Override
+ public void setTimeout(@Nonnegative int timeout) throws IOException {
+ this.socket.setSoTimeout(timeout);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,133 @@
+package gov.hhs.onc.dcdt.net.sockets.impl;
+
+import gov.hhs.onc.dcdt.net.InetProtocol;
+import gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.SocketAddress;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.tuple.MutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+
+public abstract class AbstractTcpSocketAdapter extends
AbstractClientSocketAdapter<Socket> implements TcpSocketAdapter {
+ protected AbstractTcpSocketAdapter(Socket socket) {
+ super(socket);
+ }
+
+ @Override
+ public void write(byte[] data) throws IOException {
+ this.write(data, this.socket.getRemoteSocketAddress());
+ }
+
+ @Override
+ public void write(byte[] data, SocketAddress remoteAddr) throws
IOException {
+ OutputStream outStream = this.socket.getOutputStream();
+
+ IOUtils.write(data, outStream);
+
+ outStream.flush();
+ }
+
+ @Override
+ public Pair<SocketAddress, byte[]> read() throws IOException {
+ return this.read(this.getProtocol().getDataSizeMax());
+ }
+
+ @Override
+ public Pair<SocketAddress, byte[]> read(@Nonnegative int bufferLen)
throws IOException {
+ return this.read(new byte[bufferLen]);
+ }
+
+ @Override
+ public Pair<SocketAddress, byte[]> read(byte[] buffer) throws
IOException {
+ int dataLen = IOUtils.read(this.socket.getInputStream(), buffer);
+
+ return new MutablePair<>(this.socket.getRemoteSocketAddress(),
ArrayUtils.subarray(buffer, 0, dataLen));
+ }
+
+ @Override
+ public void bind(SocketAddress bindSocketAddr) throws IOException {
+ this.socket.bind(bindSocketAddr);
+ }
+
+ @Override
+ public void close() throws IOException {
+ this.socket.close();
+ }
+
+ @Override
+ public boolean isBound() {
+ return this.socket.isBound();
+ }
+
+ @Override
+ public boolean isClosed() {
+ return this.socket.isClosed();
+ }
+
+ @Nullable
+ @Override
+ public SocketAddress getLocalSocketAddress() {
+ return this.socket.getLocalSocketAddress();
+ }
+
+ @Override
+ public InetProtocol getProtocol() {
+ return InetProtocol.TCP;
+ }
+
+ @Override
+ public int getReceiveBufferSize() throws IOException {
+ return this.socket.getReceiveBufferSize();
+ }
+
+ @Override
+ public void setReceiveBufferSize(@Nonnegative int receiveBufferSize)
throws IOException {
+ this.socket.setReceiveBufferSize(receiveBufferSize);
+ }
+
+ @Nullable
+ @Override
+ public SocketAddress getRemoteSocketAddress() {
+ return this.socket.getRemoteSocketAddress();
+ }
+
+ @Override
+ public boolean getReuseAddress() throws IOException {
+ return this.socket.getReuseAddress();
+ }
+
+ @Override
+ public void setReuseAddress(boolean reuseAddr) throws IOException {
+ this.socket.setReuseAddress(reuseAddr);
+ }
+
+ @Override
+ public int getSendBufferSize() throws IOException {
+ return this.socket.getSendBufferSize();
+ }
+
+ @Override
+ public void setSendBufferSize(@Nonnegative int sendBufferSize) throws
IOException {
+ this.socket.setSendBufferSize(sendBufferSize);
+ }
+
+ @Override
+ public Socket getSocket() {
+ return this.socket;
+ }
+
+ @Override
+ public int getTimeout() throws IOException {
+ return this.socket.getSoTimeout();
+ }
+
+ @Override
+ public void setTimeout(@Nonnegative int timeout) throws IOException {
+ this.socket.setSoTimeout(timeout);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractUdpSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,125 @@
+package gov.hhs.onc.dcdt.net.sockets.impl;
+
+import gov.hhs.onc.dcdt.net.InetProtocol;
+import gov.hhs.onc.dcdt.net.sockets.UdpSocketAdapter;
+import gov.hhs.onc.dcdt.net.sockets.utils.ToolSocketUtils;
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.SocketAddress;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
+import org.apache.commons.lang3.tuple.MutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+
+public abstract class AbstractUdpSocketAdapter extends
AbstractClientSocketAdapter<DatagramSocket> implements UdpSocketAdapter {
+ protected AbstractUdpSocketAdapter(DatagramSocket socket) {
+ super(socket);
+ }
+
+ @Override
+ public void write(byte[] data, SocketAddress remoteAddr) throws
IOException {
+ this.socket.send(ToolSocketUtils.createPacket(data, remoteAddr));
+ }
+
+ @Override
+ public Pair<SocketAddress, byte[]> read() throws IOException {
+ return this.read(this.getProtocol().getDataSizeMax());
+ }
+
+ @Override
+ public Pair<SocketAddress, byte[]> read(@Nonnegative int bufferLen)
throws IOException {
+ return this.read(new byte[bufferLen]);
+ }
+
+ @Override
+ public Pair<SocketAddress, byte[]> read(byte[] buffer) throws
IOException {
+ DatagramPacket packet = ToolSocketUtils.createPacket(buffer);
+
+ this.socket.receive(packet);
+
+ return new MutablePair<>(packet.getSocketAddress(),
packet.getData());
+ }
+
+ @Override
+ public void bind(SocketAddress bindSocketAddr) throws IOException {
+ this.socket.bind(bindSocketAddr);
+ }
+
+ @Override
+ public void close() throws IOException {
+ this.socket.close();
+ }
+
+ @Override
+ public boolean isBound() {
+ return this.socket.isBound();
+ }
+
+ @Override
+ public boolean isClosed() {
+ return this.socket.isClosed();
+ }
+
+ @Nullable
+ @Override
+ public SocketAddress getLocalSocketAddress() {
+ return this.socket.getLocalSocketAddress();
+ }
+
+ @Override
+ public InetProtocol getProtocol() {
+ return InetProtocol.UDP;
+ }
+
+ @Override
+ public int getReceiveBufferSize() throws IOException {
+ return this.socket.getReceiveBufferSize();
+ }
+
+ @Override
+ public void setReceiveBufferSize(@Nonnegative int receiveBufferSize)
throws IOException {
+ this.socket.setReceiveBufferSize(receiveBufferSize);
+ }
+
+ @Nullable
+ @Override
+ public SocketAddress getRemoteSocketAddress() {
+ return this.socket.getRemoteSocketAddress();
+ }
+
+ @Override
+ public boolean getReuseAddress() throws IOException {
+ return this.socket.getReuseAddress();
+ }
+
+ @Override
+ public void setReuseAddress(boolean reuseAddr) throws IOException {
+ this.socket.setReuseAddress(reuseAddr);
+ }
+
+ @Override
+ public int getSendBufferSize() throws IOException {
+ return this.socket.getSendBufferSize();
+ }
+
+ @Override
+ public void setSendBufferSize(@Nonnegative int sendBufferSize) throws
IOException {
+ this.socket.setSendBufferSize(sendBufferSize);
+ }
+
+ @Override
+ public DatagramSocket getSocket() {
+ return this.socket;
+ }
+
+ @Override
+ public int getTimeout() throws IOException {
+ return this.socket.getSoTimeout();
+ }
+
+ @Override
+ public void setTimeout(@Nonnegative int timeout) throws IOException {
+ this.socket.setSoTimeout(timeout);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpServerSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,6 @@
+package gov.hhs.onc.dcdt.service.dns.server;
+
+import gov.hhs.onc.dcdt.net.sockets.TcpServerSocketAdapter;
+
+public interface DnsServerTcpServerSocketAdapter extends
TcpServerSocketAdapter {
+}
=======================================
--- /dev/null
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,6 @@
+package gov.hhs.onc.dcdt.service.dns.server;
+
+import gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter;
+
+public interface DnsServerTcpSocketAdapter extends TcpSocketAdapter {
+}
=======================================
--- /dev/null
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerUdpSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,6 @@
+package gov.hhs.onc.dcdt.service.dns.server;
+
+import gov.hhs.onc.dcdt.net.sockets.UdpSocketAdapter;
+
+public interface DnsServerUdpSocketAdapter extends UdpSocketAdapter {
+}
=======================================
--- /dev/null
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpServerSocketAdapterImpl.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.dcdt.service.dns.server.impl;
+
+import gov.hhs.onc.dcdt.net.sockets.impl.AbstractTcpServerSocketAdapter;
+import gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpServerSocketAdapter;
+import java.net.ServerSocket;
+
+public class DnsServerTcpServerSocketAdapterImpl extends
AbstractTcpServerSocketAdapter implements DnsServerTcpServerSocketAdapter {
+ public DnsServerTcpServerSocketAdapterImpl(ServerSocket socket) {
+ super(socket);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpSocketAdapterImpl.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.dcdt.service.dns.server.impl;
+
+import gov.hhs.onc.dcdt.net.sockets.impl.AbstractTcpSocketAdapter;
+import gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpSocketAdapter;
+import java.net.Socket;
+
+public class DnsServerTcpSocketAdapterImpl extends
AbstractTcpSocketAdapter implements DnsServerTcpSocketAdapter {
+ public DnsServerTcpSocketAdapterImpl(Socket socket) {
+ super(socket);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerUdpSocketAdapterImpl.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.dcdt.service.dns.server.impl;
+
+import gov.hhs.onc.dcdt.net.sockets.impl.AbstractUdpSocketAdapter;
+import gov.hhs.onc.dcdt.service.dns.server.DnsServerUdpSocketAdapter;
+import java.net.DatagramSocket;
+
+public class DnsServerUdpSocketAdapterImpl extends
AbstractUdpSocketAdapter implements DnsServerUdpSocketAdapter {
+ public DnsServerUdpSocketAdapterImpl(DatagramSocket socket) {
+ super(socket);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/impl/ToolCacheService.java
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,27 @@
+package gov.hhs.onc.dcdt.service.ldap.impl;
+
+import java.util.Set;
+import javax.annotation.Nullable;
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.CacheManager;
+import org.apache.directory.server.core.api.CacheService;
+
+public class ToolCacheService extends CacheService {
+ private Set<String> disabledCacheNames;
+
+ public ToolCacheService(CacheManager cacheManager, Set<String>
disabledCacheNames) {
+ super(cacheManager);
+
+ this.disabledCacheNames = disabledCacheNames;
+ }
+
+ @Nullable
+ @Override
+ public Cache getCache(String cacheName) {
+ return (!this.disabledCacheNames.contains(cacheName) ?
super.getCache(cacheName) : null);
+ }
+
+ public Set<String> getDisabledCacheNames() {
+ return this.disabledCacheNames;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-service-ldap/src/main/resources/META-INF/ehcache/ehcache-service-ldap.xml
Wed Jun 11 12:39:46 2014 UTC
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ehcache
+ dynamicConfig="true"
+ monitoring="off"
+ name="cacheServiceLdap"
+ updateCheck="false"
+ xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="
http://ehcache.org/ehcache.xsd">
+
+
<!--====================================================================================================
+ = CACHE: DEFAULT
+
=====================================================================================================-->
+ <defaultCache
+ diskPersistent="false"
+ eternal="false"
+ maxElementsInMemory="1"
+ overflowToDisk="false"
+ timeToIdleSeconds="1"
+ timeToLiveSeconds="1"/>
+</ehcache>
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/TcpServerSocketAdapterImpl.java
Thu May 22 06:39:17 2014 UTC
+++ /dev/null
@@ -1,80 +0,0 @@
-package gov.hhs.onc.dcdt.net.sockets.impl;
-
-import gov.hhs.onc.dcdt.net.InetProtocol;
-import gov.hhs.onc.dcdt.net.sockets.TcpServerSocketAdapter;
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketAddress;
-import javax.annotation.Nonnegative;
-
-public class TcpServerSocketAdapterImpl extends
AbstractSocketAdapter<ServerSocket> implements TcpServerSocketAdapter {
- public TcpServerSocketAdapterImpl(ServerSocket socket) {
- super(socket);
- }
-
- @Override
- public Socket accept() throws IOException {
- return this.socket.accept();
- }
-
- @Override
- public void bind(SocketAddress bindSocketAddr) throws IOException {
- this.socket.bind(bindSocketAddr);
- }
-
- @Override
- public void close() throws IOException {
- this.socket.close();
- }
-
- @Override
- public boolean isBound() {
- return this.socket.isBound();
- }
-
- @Override
- public boolean isClosed() {
- return this.socket.isClosed();
- }
-
- @Override
- public InetProtocol getProtocol() {
- return InetProtocol.TCP;
- }
-
- @Override
- public int getReceiveBufferSize() throws IOException {
- return this.socket.getReceiveBufferSize();
- }
-
- @Override
- public void setReceiveBufferSize(@Nonnegative int receiveBufferSize)
throws IOException {
- this.socket.setReceiveBufferSize(receiveBufferSize);
- }
-
- @Override
- public boolean getReuseAddress() throws IOException {
- return this.socket.getReuseAddress();
- }
-
- @Override
- public void setReuseAddress(boolean reuseAddr) throws IOException {
- this.socket.setReuseAddress(reuseAddr);
- }
-
- @Override
- public ServerSocket getSocket() {
- return this.socket;
- }
-
- @Override
- public int getTimeout() throws IOException {
- return this.socket.getSoTimeout();
- }
-
- @Override
- public void setTimeout(@Nonnegative int timeout) throws IOException {
- this.socket.setSoTimeout(timeout);
- }
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/TcpSocketAdapterImpl.java
Thu May 22 06:39:17 2014 UTC
+++ /dev/null
@@ -1,120 +0,0 @@
-package gov.hhs.onc.dcdt.net.sockets.impl;
-
-import gov.hhs.onc.dcdt.net.InetProtocol;
-import gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.net.SocketAddress;
-import javax.annotation.Nonnegative;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.tuple.MutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-
-public class TcpSocketAdapterImpl extends
AbstractClientSocketAdapter<Socket> implements TcpSocketAdapter {
- public TcpSocketAdapterImpl(Socket socket) {
- super(socket);
- }
-
- @Override
- public void write(byte[] data) throws IOException {
- this.write(data, this.socket.getRemoteSocketAddress());
- }
-
- @Override
- public void write(byte[] data, SocketAddress remoteAddr) throws
IOException {
- OutputStream outStream = this.socket.getOutputStream();
-
- IOUtils.write(data, outStream);
-
- outStream.flush();
- }
-
- @Override
- public Pair<SocketAddress, byte[]> read() throws IOException {
- return this.read(this.getProtocol().getDataSizeMax());
- }
-
- @Override
- public Pair<SocketAddress, byte[]> read(@Nonnegative int bufferLen)
throws IOException {
- return this.read(new byte[bufferLen]);
- }
-
- @Override
- public Pair<SocketAddress, byte[]> read(byte[] buffer) throws
IOException {
- int dataLen = IOUtils.read(this.socket.getInputStream(), buffer);
-
- return new MutablePair<>(this.socket.getRemoteSocketAddress(),
ArrayUtils.subarray(buffer, 0, dataLen));
- }
-
- @Override
- public void bind(SocketAddress bindSocketAddr) throws IOException {
- this.socket.bind(bindSocketAddr);
- }
-
- @Override
- public void close() throws IOException {
- this.socket.close();
- }
-
- @Override
- public boolean isBound() {
- return this.socket.isBound();
- }
-
- @Override
- public boolean isClosed() {
- return this.socket.isClosed();
- }
-
- @Override
- public InetProtocol getProtocol() {
- return InetProtocol.TCP;
- }
-
- @Override
- public int getReceiveBufferSize() throws IOException {
- return this.socket.getReceiveBufferSize();
- }
-
- @Override
- public void setReceiveBufferSize(@Nonnegative int receiveBufferSize)
throws IOException {
- this.socket.setReceiveBufferSize(receiveBufferSize);
- }
-
- @Override
- public boolean getReuseAddress() throws IOException {
- return this.socket.getReuseAddress();
- }
-
- @Override
- public void setReuseAddress(boolean reuseAddr) throws IOException {
- this.socket.setReuseAddress(reuseAddr);
- }
-
- @Override
- public int getSendBufferSize() throws IOException {
- return this.socket.getSendBufferSize();
- }
-
- @Override
- public void setSendBufferSize(@Nonnegative int sendBufferSize) throws
IOException {
- this.socket.setSendBufferSize(sendBufferSize);
- }
-
- @Override
- public Socket getSocket() {
- return this.socket;
- }
-
- @Override
- public int getTimeout() throws IOException {
- return this.socket.getSoTimeout();
- }
-
- @Override
- public void setTimeout(@Nonnegative int timeout) throws IOException {
- this.socket.setSoTimeout(timeout);
- }
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/UdpSocketAdapterImpl.java
Thu May 22 06:39:17 2014 UTC
+++ /dev/null
@@ -1,112 +0,0 @@
-package gov.hhs.onc.dcdt.net.sockets.impl;
-
-import gov.hhs.onc.dcdt.net.InetProtocol;
-import gov.hhs.onc.dcdt.net.sockets.UdpSocketAdapter;
-import gov.hhs.onc.dcdt.net.sockets.utils.ToolSocketUtils;
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.SocketAddress;
-import javax.annotation.Nonnegative;
-import org.apache.commons.lang3.tuple.MutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-
-public class UdpSocketAdapterImpl extends
AbstractClientSocketAdapter<DatagramSocket> implements UdpSocketAdapter {
- public UdpSocketAdapterImpl(DatagramSocket socket) {
- super(socket);
- }
-
- @Override
- public void write(byte[] data, SocketAddress remoteAddr) throws
IOException {
- this.socket.send(ToolSocketUtils.createPacket(data, remoteAddr));
- }
-
- @Override
- public Pair<SocketAddress, byte[]> read() throws IOException {
- return this.read(this.getProtocol().getDataSizeMax());
- }
-
- @Override
- public Pair<SocketAddress, byte[]> read(@Nonnegative int bufferLen)
throws IOException {
- return this.read(new byte[bufferLen]);
- }
-
- @Override
- public Pair<SocketAddress, byte[]> read(byte[] buffer) throws
IOException {
- DatagramPacket packet = ToolSocketUtils.createPacket(buffer);
-
- this.socket.receive(packet);
-
- return new MutablePair<>(packet.getSocketAddress(),
packet.getData());
- }
-
- @Override
- public void bind(SocketAddress bindSocketAddr) throws IOException {
- this.socket.bind(bindSocketAddr);
- }
-
- @Override
- public void close() throws IOException {
- this.socket.close();
- }
-
- @Override
- public boolean isBound() {
- return this.socket.isBound();
- }
-
- @Override
- public boolean isClosed() {
- return this.socket.isClosed();
- }
-
- @Override
- public InetProtocol getProtocol() {
- return InetProtocol.UDP;
- }
-
- @Override
- public int getReceiveBufferSize() throws IOException {
- return this.socket.getReceiveBufferSize();
- }
-
- @Override
- public void setReceiveBufferSize(@Nonnegative int receiveBufferSize)
throws IOException {
- this.socket.setReceiveBufferSize(receiveBufferSize);
- }
-
- @Override
- public boolean getReuseAddress() throws IOException {
- return this.socket.getReuseAddress();
- }
-
- @Override
- public void setReuseAddress(boolean reuseAddr) throws IOException {
- this.socket.setReuseAddress(reuseAddr);
- }
-
- @Override
- public int getSendBufferSize() throws IOException {
- return this.socket.getSendBufferSize();
- }
-
- @Override
- public void setSendBufferSize(@Nonnegative int sendBufferSize) throws
IOException {
- this.socket.setSendBufferSize(sendBufferSize);
- }
-
- @Override
- public DatagramSocket getSocket() {
- return this.socket;
- }
-
- @Override
- public int getTimeout() throws IOException {
- return this.socket.getSoTimeout();
- }
-
- @Override
- public void setTimeout(@Nonnegative int timeout) throws IOException {
- this.socket.setSoTimeout(timeout);
- }
-}
=======================================
--- /dcdt-core/pom.xml Thu May 22 19:43:42 2014 UTC
+++ /dcdt-core/pom.xml Wed Jun 11 12:39:46 2014 UTC
@@ -104,6 +104,10 @@
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
+ <groupId>net.sf.ehcache</groupId>
+ <artifactId>ehcache-core</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
</dependency>
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/context/impl/ToolPropertySourcesPlaceholderConfigurer.java
Fri May 2 03:12:01 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/context/impl/ToolPropertySourcesPlaceholderConfigurer.java
Wed Jun 11 12:39:46 2014 UTC
@@ -1,11 +1,14 @@
package gov.hhs.onc.dcdt.context.impl;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import java.io.IOException;
-import java.util.LinkedHashMap;
+import java.util.Collection;
import java.util.Map;
import java.util.Properties;
import javax.annotation.Nullable;
+import org.apache.commons.collections4.map.CompositeMap;
+import org.apache.commons.collections4.map.CompositeMap.MapMutator;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
@@ -20,6 +23,29 @@
import org.springframework.util.Assert;
public class ToolPropertySourcesPlaceholderConfigurer extends
PropertySourcesPlaceholderConfigurer {
+ private static class CompositePropertySourceMutator implements
MapMutator<String, Object> {
+ public final static CompositePropertySourceMutator INSTANCE = new
CompositePropertySourceMutator();
+
+ private final static long serialVersionUID = 0L;
+
+ @Override
+ public void resolveCollision(CompositeMap<String, Object>
sourceComp, Map<String, Object> source, Map<String, Object> sourceAdd,
+ Collection<String> intersect) {
+ }
+
+ @Nullable
+ @Override
+ public Object put(CompositeMap<String, Object> sourceComp,
Map<String, Object>[] sourceMaps, String propName, @Nullable Object
propValue) {
+ throw new UnsupportedOperationException(String.format("Unable
to put property (name=%s, valueClass=%s) into composite property source
map.",
+ propName, ToolClassUtils.getName(propValue)));
+ }
+
+ @Override
+ public void putAll(CompositeMap<String, Object> sourceComp,
Map<String, Object>[] sourceMaps, Map<? extends String, ?> sourceMapAdd) {
+ throw new UnsupportedOperationException(String.format("Unable
to put all properties (num=%d) into composite property source.",
sourceMapAdd.size()));
+ }
+ }
+
private class CompositePropertySource extends
EnumerablePropertySource<Map<String, Object>> {
@SuppressWarnings({ "rawtypes", "unchecked" })
public CompositePropertySource(String name, Properties source) {
@@ -39,22 +65,25 @@
@Override
public Map<String, Object> getSource() {
- Map<String, Object> source;
+ Map<String, Object> source = super.getSource();
if (ToolPropertySourcesPlaceholderConfigurer.this.env != null)
{
- source = new LinkedHashMap<>();
+ Map<String, Object> sysProps =
ToolPropertySourcesPlaceholderConfigurer.this.env.getSystemProperties();
+
+ CompositeMap<String, Object> sourceComp = new
CompositeMap<>();
+
sourceComp.setMutator(CompositePropertySourceMutator.INSTANCE);
if
(!ToolPropertySourcesPlaceholderConfigurer.this.envOverride) {
-
source.putAll(ToolPropertySourcesPlaceholderConfigurer.this.env.getSystemProperties());
+ sourceComp.addComposited(sysProps);
}
- source.putAll(super.getSource());
+ sourceComp.addComposited(source);
if
(ToolPropertySourcesPlaceholderConfigurer.this.envOverride) {
-
source.putAll(ToolPropertySourcesPlaceholderConfigurer.this.env.getSystemProperties());
+ sourceComp.addComposited(sysProps);
}
- } else {
- source = super.getSource();
+
+ source = sourceComp;
}
return source;
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/ClientSocketAdapter.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/ClientSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -4,6 +4,7 @@
import java.io.IOException;
import java.net.SocketAddress;
import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.Pair;
public interface ClientSocketAdapter<T extends Closeable> extends
SocketAdapter<T> {
@@ -15,6 +16,11 @@
public Pair<SocketAddress, byte[]> read(byte[] buffer) throws
IOException;
+ public boolean hasRemoteSocketAddress();
+
+ @Nullable
+ public SocketAddress getRemoteSocketAddress();
+
@Nonnegative
public int getSendBufferSize() throws IOException;
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/SocketAdapter.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/SocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -8,6 +8,7 @@
import java.net.SocketOption;
import java.util.Map;
import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
public interface SocketAdapter<T extends Closeable> extends Closeable,
ToolBean {
public void bind(SocketAddress bindSocketAddr) throws IOException;
@@ -20,6 +21,11 @@
public boolean isClosed();
+ public boolean hasLocalSocketAddress();
+
+ @Nullable
+ public SocketAddress getLocalSocketAddress();
+
public InetProtocol getProtocol();
@Nonnegative
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/SocketAdapterOptions.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/SocketAdapterOptions.java
Wed Jun 11 12:39:46 2014 UTC
@@ -3,6 +3,8 @@
import java.net.SocketOption;
public final class SocketAdapterOptions {
+ public final static SocketOption<Integer> BACKLOG = new
ToolSocketOption<>(Integer.class);
+
public final static SocketOption<Integer> TIMEOUT = new
ToolSocketOption<>("SO_TIMEOUT", Integer.class);
private SocketAdapterOptions() {
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/TcpServerSocketAdapter.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/TcpServerSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -6,4 +6,10 @@
public interface TcpServerSocketAdapter extends
SocketAdapter<ServerSocket> {
public Socket accept() throws IOException;
+
+ public boolean hasBacklog();
+
+ public int getBacklog();
+
+ public void setBacklog(int backlog);
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/TcpSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/TcpSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -3,6 +3,6 @@
import java.net.ServerSocket;
import java.net.Socket;
-public interface TcpSocketListener<T extends SocketRequest, U extends
SocketRequestProcessor<T>> extends
- SocketListener<ServerSocket, TcpServerSocketAdapter, Socket,
TcpSocketAdapter, T, U> {
+public interface TcpSocketListener<T extends TcpServerSocketAdapter, U
extends TcpSocketAdapter, V extends SocketRequest, W extends
SocketRequestProcessor<V>>
+ extends SocketListener<ServerSocket, T, Socket, U, V, W> {
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/ToolSocketOption.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/ToolSocketOption.java
Wed Jun 11 12:39:46 2014 UTC
@@ -1,16 +1,22 @@
package gov.hhs.onc.dcdt.net.sockets;
import java.net.SocketOption;
+import javax.annotation.Nullable;
public class ToolSocketOption<T> implements SocketOption<T> {
private String name;
private Class<T> type;
- public ToolSocketOption(String name, Class<T> type) {
+ public ToolSocketOption(Class<T> type) {
+ this(null, type);
+ }
+
+ public ToolSocketOption(@Nullable String name, Class<T> type) {
this.name = name;
this.type = type;
}
+ @Nullable
@Override
public String name() {
return
this.name;
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/UdpSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/UdpSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -2,6 +2,6 @@
import java.net.DatagramSocket;
-public interface UdpSocketListener<T extends SocketRequest, U extends
SocketRequestProcessor<T>> extends
- SocketListener<DatagramSocket, UdpSocketAdapter, DatagramSocket,
UdpSocketAdapter, T, U> {
+public interface UdpSocketListener<T extends UdpSocketAdapter, U extends
SocketRequest, V extends SocketRequestProcessor<U>> extends
+ SocketListener<DatagramSocket, T, DatagramSocket, T, U, V> {
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractClientSocketAdapter.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractClientSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -19,4 +19,9 @@
super.setOptionInternal(optKey, optValue);
}
}
+
+ @Override
+ public boolean hasRemoteSocketAddress() {
+ return (this.getRemoteSocketAddress() != null);
+ }
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractSocketAdapter.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractSocketAdapter.java
Wed Jun 11 12:39:46 2014 UTC
@@ -51,4 +51,9 @@
ToolClassUtils.getName(this.socket),
ToolClassUtils.getName(this), optKey, optValue));
}
}
+
+ @Override
+ public boolean hasLocalSocketAddress() {
+ return (this.getLocalSocketAddress() != null);
+ }
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -2,24 +2,36 @@
import gov.hhs.onc.dcdt.beans.impl.AbstractToolLifecycleBean;
import gov.hhs.onc.dcdt.beans.utils.ToolBeanFactoryUtils;
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureCallback;
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureTask;
+import
gov.hhs.onc.dcdt.concurrent.impl.AbstractCancelRejectedFutureHandler;
+import
gov.hhs.onc.dcdt.concurrent.impl.AbstractToolListenableFutureCallback;
+import gov.hhs.onc.dcdt.concurrent.impl.AbstractToolListenableFutureTask;
import gov.hhs.onc.dcdt.net.InetProtocol;
import gov.hhs.onc.dcdt.net.sockets.ClientSocketAdapter;
import gov.hhs.onc.dcdt.net.sockets.SocketAdapter;
import gov.hhs.onc.dcdt.net.sockets.SocketListener;
import gov.hhs.onc.dcdt.net.sockets.SocketRequest;
import gov.hhs.onc.dcdt.net.sockets.SocketRequestProcessor;
+import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import java.io.Closeable;
import java.io.IOException;
import java.net.SocketAddress;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
-import java.util.concurrent.FutureTask;
+import java.util.concurrent.ThreadPoolExecutor;
import javax.annotation.Nullable;
import org.apache.mina.util.ConcurrentHashSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.util.concurrent.ListenableFutureCallback;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.util.concurrent.ListenableFutureTask;
public abstract class AbstractSocketListener<T extends Closeable, U
extends SocketAdapter<T>, V extends Closeable, W extends
ClientSocketAdapter<V>, X extends SocketRequest, Y extends
SocketRequestProcessor<X>>
@@ -28,36 +40,77 @@
@Nullable
@Override
public Void call() throws Exception {
+
AbstractSocketListener.this.reqTaskExec.setRejectedExecutionHandler(new
CancelSocketRequestDaemonHandler<>(SocketRequestDaemonTask.class));
+
while ((AbstractSocketListener.this.listenSocketAdapter !=
null) && !AbstractSocketListener.this.listenSocketAdapter.isClosed()) {
X req =
AbstractSocketListener.this.createRequest(AbstractSocketListener.this.listenSocketAdapter.getProtocol());
- final W reqSocketAdapter =
AbstractSocketListener.this.readRequest(AbstractSocketListener.this.listenSocketAdapter,
req);
+ W reqSocketAdapter =
AbstractSocketListener.this.readRequest(AbstractSocketListener.this.listenSocketAdapter,
req);
AbstractSocketListener.this.reqSocketAdapters.add(reqSocketAdapter);
- final ListenableFutureTask<Void> reqDaemonTask =
AbstractSocketListener.this.createRequestDaemonTask(reqSocketAdapter, req);
+ ToolListenableFutureTask<Void> reqDaemonTask =
AbstractSocketListener.this.createRequestDaemonTask(reqSocketAdapter, req);
+
reqDaemonTask.getCallbacks().addAll(AbstractSocketListener.this.createRequestDaemonCallbacks(reqSocketAdapter,
reqDaemonTask));
AbstractSocketListener.this.reqDaemonTasks.add(reqDaemonTask);
- reqDaemonTask.addCallback(new
ListenableFutureCallback<Void>() {
- @Override
- public void onSuccess(@Nullable Void result) {
- this.processResponse();
- }
+
AbstractSocketListener.this.reqTaskExec.execute(reqDaemonTask);
+ }
- @Override
- public void onFailure(Throwable th) {
- this.processResponse();
- }
+ return null;
+ }
+ }
- private void processResponse() {
-
AbstractSocketListener.this.reqDaemonTasks.remove(reqDaemonTask);
-
AbstractSocketListener.this.reqSocketAdapters.remove(reqSocketAdapter);
- }
- });
+ protected class CancelSocketRequestDaemonHandler<Z extends
SocketRequestDaemonTask> extends AbstractCancelRejectedFutureHandler<Void,
Z> {
+ public CancelSocketRequestDaemonHandler(Class<Z> taskClass) {
+ super(Void.class, taskClass);
+ }
-
AbstractSocketListener.this.taskExec.execute(reqDaemonTask);
- }
+ @Override
+ protected void rejectedExecutionInternal(Z task,
ThreadPoolExecutor executor) {
+ super.rejectedExecutionInternal(task, executor);
- return null;
+ W reqSocketAdapter =
task.getRequestDaemon().getRequestSocketAdapter();
+
+ AbstractSocketListener.LOGGER.warn(String.format(
+ "Cancelled socket (class=%s, adapterClass=%s, protocol=%s,
localAddr={%s}, remoteAddr={%s}) for request daemon task (class=%s).",
+ ToolClassUtils.getName(reqSocketAdapter.getSocket()),
ToolClassUtils.getName(reqSocketAdapter),
reqSocketAdapter.getProtocol().name(),
+ reqSocketAdapter.getLocalSocketAddress(),
reqSocketAdapter.getRemoteSocketAddress(), ToolClassUtils.getName(task)));
+ }
+ }
+
+ @Order(Ordered.HIGHEST_PRECEDENCE)
+ protected class SocketRequestDaemonCleanupCallback extends
AbstractSocketRequestDaemonCallback {
+ public SocketRequestDaemonCleanupCallback(W reqSocketAdapter,
ToolListenableFutureTask<Void> reqDaemonTask) {
+ super(reqSocketAdapter, reqDaemonTask);
+ }
+
+ @Override
+ protected void onPostDone(boolean status, @Nullable Void result,
@Nullable Throwable th) {
+ AbstractSocketListener.this.reqDaemonTasks.remove(this.task);
+
AbstractSocketListener.this.reqSocketAdapters.remove(this.reqSocketAdapter);
+ }
+ }
+
+ protected abstract class AbstractSocketRequestDaemonCallback extends
AbstractToolListenableFutureCallback<Void, ToolListenableFutureTask<Void>> {
+ protected W reqSocketAdapter;
+
+ protected AbstractSocketRequestDaemonCallback(W reqSocketAdapter,
ToolListenableFutureTask<Void> reqDaemonTask) {
+ super(reqDaemonTask);
+
+ this.reqSocketAdapter = reqSocketAdapter;
+ }
+ }
+
+ protected class SocketRequestDaemonTask extends
AbstractToolListenableFutureTask<Void> {
+ private SocketRequestDaemon reqDaemon;
+
+ public SocketRequestDaemonTask(SocketRequestDaemon reqDaemon) {
+ super(reqDaemon);
+
+ this.reqDaemon = reqDaemon;
+ }
+
+ public SocketRequestDaemon getRequestDaemon() {
+ return this.reqDaemon;
}
}
@@ -78,6 +131,14 @@
return null;
}
+
+ public X getRequest() {
+ return this.req;
+ }
+
+ public W getRequestSocketAdapter() {
+ return this.reqSocketAdapter;
+ }
}
protected Class<T> listenSocketClass;
@@ -91,7 +152,10 @@
protected U listenSocketAdapter;
protected Set<W> reqSocketAdapters = new ConcurrentHashSet<>();
protected ListenableFutureTask<Void> listenDaemonTask;
- protected Set<ListenableFutureTask<Void>> reqDaemonTasks = new
ConcurrentHashSet<>();
+ protected ThreadPoolTaskExecutor reqTaskExec;
+ protected Set<ToolListenableFutureTask<Void>> reqDaemonTasks = new
ConcurrentHashSet<>();
+
+ private final static Logger LOGGER =
LoggerFactory.getLogger(AbstractSocketListener.class);
protected AbstractSocketListener(Class<T> listenSocketClass, Class<U>
listenSocketAdapterClass, Class<V> reqSocketClass, Class<W>
reqSocketAdapterClass,
Class<X> reqClass, Class<Y> reqProcClass, SocketAddress
bindSocketAddr) {
@@ -120,7 +184,7 @@
this.listenSocketAdapter.close();
}
- for (FutureTask<Void> reqDaemonTask : this.reqDaemonTasks) {
+ for (ToolListenableFutureTask<Void> reqDaemonTask :
this.reqDaemonTasks) {
if (!reqDaemonTask.isDone()) {
reqDaemonTask.cancel(true);
}
@@ -154,8 +218,14 @@
return ToolBeanFactoryUtils.createBeanOfType(this.appContext,
this.reqClass, protocol);
}
- protected ListenableFutureTask<Void> createRequestDaemonTask(W
respSocketAdapter, X req) {
- return new ListenableFutureTask<>(new
SocketRequestDaemon(respSocketAdapter, req));
+ protected List<ToolListenableFutureCallback<Void,
ToolListenableFutureTask<Void>>> createRequestDaemonCallbacks(W
reqSocketAdapter,
+ ToolListenableFutureTask<Void> reqDaemonTask) {
+ return ToolArrayUtils.asList((ToolListenableFutureCallback<Void,
ToolListenableFutureTask<Void>>) new SocketRequestDaemonCleanupCallback(
+ reqSocketAdapter, reqDaemonTask));
+ }
+
+ protected SocketRequestDaemonTask createRequestDaemonTask(W
reqSocketAdapter, X req) {
+ return new SocketRequestDaemonTask(new
SocketRequestDaemon(reqSocketAdapter, req));
}
protected ListenableFutureTask<Void> createListenDaemonTask() {
@@ -178,4 +248,8 @@
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
this.appContext = ((AbstractApplicationContext) appContext);
}
+
+ protected void setRequestTaskExecutor(ThreadPoolTaskExecutor
reqTaskExec) {
+ this.reqTaskExec = reqTaskExec;
+ }
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractTcpSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -1,26 +1,62 @@
package gov.hhs.onc.dcdt.net.sockets.impl;
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureCallback;
+import gov.hhs.onc.dcdt.concurrent.ToolListenableFutureTask;
import gov.hhs.onc.dcdt.net.sockets.SocketRequest;
import gov.hhs.onc.dcdt.net.sockets.SocketRequestProcessor;
import gov.hhs.onc.dcdt.net.sockets.TcpServerSocketAdapter;
import gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter;
import gov.hhs.onc.dcdt.net.sockets.TcpSocketListener;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
+import java.util.List;
+import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
-public class AbstractTcpSocketListener<T extends SocketRequest, U extends
SocketRequestProcessor<T>> extends
- AbstractSocketListener<ServerSocket, TcpServerSocketAdapter, Socket,
TcpSocketAdapter, T, U> implements TcpSocketListener<T, U> {
- protected AbstractTcpSocketListener(Class<T> reqClass, Class<U>
reqProcClass, SocketAddress bindSocketAddr) {
- super(ServerSocket.class, TcpServerSocketAdapter.class,
Socket.class, TcpSocketAdapter.class, reqClass, reqProcClass,
bindSocketAddr);
+public class AbstractTcpSocketListener<T extends TcpServerSocketAdapter, U
extends TcpSocketAdapter, V extends SocketRequest, W extends
SocketRequestProcessor<V>>
+ extends AbstractSocketListener<ServerSocket, T, Socket, U, V, W>
implements TcpSocketListener<T, U, V, W> {
+ @Order(Ordered.HIGHEST_PRECEDENCE + 1)
+ protected class SocketRequestDaemonTcpCleanupCallback extends
AbstractSocketRequestDaemonCallback {
+ public SocketRequestDaemonTcpCleanupCallback(U reqSocketAdapter,
ToolListenableFutureTask<Void> reqDaemonTask) {
+ super(reqSocketAdapter, reqDaemonTask);
+ }
+
+ @Override
+ protected void onPostDone(boolean status, @Nullable Void result,
@Nullable Throwable th) {
+ try {
+ reqSocketAdapter.close();
+ } catch (IOException e) {
+ AbstractTcpSocketListener.LOGGER
+ .warn(
+ String
+ .format(
+ "Unable to close socket (class=%s,
adapterClass=%s, protocol=%s, localAddr={%s}, remoteAddr={%s}) after
completion of request daemon task (class=%s, status=%s).",
+
ToolClassUtils.getName(reqSocketAdapter.getSocket()),
ToolClassUtils.getName(reqSocketAdapter), reqSocketAdapter.getProtocol()
+ .name(),
reqSocketAdapter.getLocalSocketAddress(),
reqSocketAdapter.getRemoteSocketAddress(), ToolClassUtils
+ .getName(this.task), status), e);
+ }
+ }
+ }
+
+ private final static Logger LOGGER =
LoggerFactory.getLogger(AbstractTcpSocketListener.class);
+
+ protected AbstractTcpSocketListener(Class<T> listenSocketAdapterClass,
Class<U> reqSocketAdapterClass, Class<V> reqClass, Class<W> reqProcClass,
+ SocketAddress bindSocketAddr) {
+ super(ServerSocket.class, listenSocketAdapterClass, Socket.class,
reqSocketAdapterClass, reqClass, reqProcClass, bindSocketAddr);
}
@Override
- protected TcpSocketAdapter readRequest(TcpServerSocketAdapter
listenSocketAdapter, T req) throws IOException {
- TcpSocketAdapter reqSocketAdapter =
this.createRequestSocketAdapter(listenSocketAdapter.accept());
+ protected U readRequest(T listenSocketAdapter, V req) throws
IOException {
+ U reqSocketAdapter =
this.createRequestSocketAdapter(listenSocketAdapter.accept());
ByteBuffer reqBuffer = req.getRequestBuffer();
Pair<SocketAddress, byte[]> reqPair =
reqSocketAdapter.read(reqBuffer.remaining());
@@ -30,4 +66,11 @@
return reqSocketAdapter;
}
+
+ @Override
+ protected List<ToolListenableFutureCallback<Void,
ToolListenableFutureTask<Void>>> createRequestDaemonCallbacks(U
reqSocketAdapter,
+ ToolListenableFutureTask<Void> reqDaemonTask) {
+ return
ToolCollectionUtils.add(super.createRequestDaemonCallbacks(reqSocketAdapter,
reqDaemonTask),
+ ((ToolListenableFutureCallback<Void,
ToolListenableFutureTask<Void>>) new
SocketRequestDaemonTcpCleanupCallback(reqSocketAdapter, reqDaemonTask)));
+ }
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractUdpSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/sockets/impl/AbstractUdpSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -10,14 +10,14 @@
import java.nio.ByteBuffer;
import org.apache.commons.lang3.tuple.Pair;
-public abstract class AbstractUdpSocketListener<T extends SocketRequest, U
extends SocketRequestProcessor<T>> extends
- AbstractSocketListener<DatagramSocket, UdpSocketAdapter,
DatagramSocket, UdpSocketAdapter, T, U> implements UdpSocketListener<T, U> {
- protected AbstractUdpSocketListener(Class<T> reqClass, Class<U>
reqProcClass, SocketAddress bindSocketAddr) {
- super(DatagramSocket.class, UdpSocketAdapter.class,
DatagramSocket.class, UdpSocketAdapter.class, reqClass, reqProcClass,
bindSocketAddr);
+public abstract class AbstractUdpSocketListener<T extends
UdpSocketAdapter, U extends SocketRequest, V extends
SocketRequestProcessor<U>> extends
+ AbstractSocketListener<DatagramSocket, T, DatagramSocket, T, U, V>
implements UdpSocketListener<T, U, V> {
+ protected AbstractUdpSocketListener(Class<T> socketAdapterClass,
Class<U> reqClass, Class<V> reqProcClass, SocketAddress bindSocketAddr) {
+ super(DatagramSocket.class, socketAdapterClass,
DatagramSocket.class, socketAdapterClass, reqClass, reqProcClass,
bindSocketAddr);
}
@Override
- protected UdpSocketAdapter readRequest(UdpSocketAdapter
listenSocketAdapter, T req) throws IOException {
+ protected T readRequest(T listenSocketAdapter, U req) throws
IOException {
ByteBuffer reqBuffer = req.getRequestBuffer();
Pair<SocketAddress, byte[]> reqPair =
listenSocketAdapter.read(reqBuffer.remaining());
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core-instance.xml
Thu Mar 20 10:07:30 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core-instance.xml
Wed Jun 11 12:39:46 2014 UTC
@@ -24,7 +24,7 @@
<!--====================================================================================================
= INSTANCE CONFIG PERSISTENCE
=====================================================================================================-->
- <beans:bean parent="setSysProps">
+ <beans:bean id="setSysPropsInstanceConfig" parent="setSysProps">
<beans:property name="arguments">
<util:properties>
<beans:prop key="#{
T(org.apache.derby.iapi.reference.Property).ERRORLOG_METHOD_PROPERTY }">
@@ -35,7 +35,7 @@
</beans:property>
</beans:bean>
- <beans:bean id="instanceConfigDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
+ <beans:bean id="instanceConfigDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
depends-on="setSysPropsInstanceConfig" destroy-method="close"
p:acquireIncrement="1"
p:driverClass="org.apache.derby.jdbc.EmbeddedDriver"
p:initialPoolSize="0"
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core-net.xml Thu
May 22 06:39:17 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core-net.xml Wed
Jun 11 12:39:46 2014 UTC
@@ -41,24 +41,24 @@
</beans:bean>
<!--====================================================================================================
- = SOCKETS
+ = UDP SOCKETS
=====================================================================================================-->
<beans:bean id="socketUdp" class="java.net.DatagramSocket"
lazy-init="true" scope="prototype"/>
- <beans:bean id="socketTcp" class="java.net.Socket" lazy-init="true"
scope="prototype"/>
-
+
<!--====================================================================================================
+ = TCP SERVER SOCKETS
+
=====================================================================================================-->
<beans:bean id="socketTcpServer" class="java.net.ServerSocket"
lazy-init="true" scope="prototype"/>
+
<!--====================================================================================================
+ = TCP SOCKETS
+
=====================================================================================================-->
+ <beans:bean id="socketTcp" class="java.net.Socket" lazy-init="true"
scope="prototype"/>
+
<!--====================================================================================================
= SOCKET ADAPTERS
=====================================================================================================-->
- <beans:bean id="socketAdapter"
class="gov.hhs.onc.dcdt.net.sockets.SocketAdapter" abstract="true">
- <beans:property name="options">
- <beans:map>
- <beans:entry key="#{
T(java.net.StandardSocketOptions).SO_REUSEADDR }" value="true"
value-type="java.lang.Boolean"/>
- </beans:map>
- </beans:property>
- </beans:bean>
+ <beans:bean id="socketAdapter"
class="gov.hhs.onc.dcdt.net.sockets.SocketAdapter" abstract="true"/>
<beans:bean id="socketAdapterClient"
class="gov.hhs.onc.dcdt.net.sockets.ClientSocketAdapter"
parent="socketAdapter" abstract="true"/>
@@ -67,27 +67,15 @@
=====================================================================================================-->
<beans:bean id="socketAdapterUdp"
class="gov.hhs.onc.dcdt.net.sockets.UdpSocketAdapter"
parent="socketAdapterClient" abstract="true"/>
- <!--suppress SpringBeanConstructorArgInspection -->
- <beans:bean id="socketAdapterUdpImpl"
class="gov.hhs.onc.dcdt.net.sockets.impl.UdpSocketAdapterImpl"
parent="socketAdapterUdp" lazy-init="true"
- scope="prototype"/>
-
-
<!--====================================================================================================
- = TCP SOCKET ADAPTERS
-
=====================================================================================================-->
- <beans:bean id="socketAdapterTcp"
class="gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter"
parent="socketAdapterClient" abstract="true"/>
-
- <!--suppress SpringBeanConstructorArgInspection -->
- <beans:bean id="socketAdapterTcpImpl"
class="gov.hhs.onc.dcdt.net.sockets.impl.TcpSocketAdapterImpl"
parent="socketAdapterTcp" lazy-init="true"
- scope="prototype"/>
-
<!--====================================================================================================
= TCP SERVER SOCKET ADAPTERS
=====================================================================================================-->
<beans:bean id="socketAdapterTcpServer"
class="gov.hhs.onc.dcdt.net.sockets.TcpServerSocketAdapter"
parent="socketAdapter" abstract="true"/>
- <!--suppress SpringBeanConstructorArgInspection -->
- <beans:bean id="socketAdapterTcpServerImpl"
class="gov.hhs.onc.dcdt.net.sockets.impl.TcpServerSocketAdapterImpl"
parent="socketAdapterTcpServer"
- lazy-init="true" scope="prototype"/>
+
<!--====================================================================================================
+ = TCP SOCKET ADAPTERS
+
=====================================================================================================-->
+ <beans:bean id="socketAdapterTcp"
class="gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter"
parent="socketAdapterClient" abstract="true"/>
<!--====================================================================================================
= URI
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core.xml Fri Apr
18 03:30:00 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core.xml Wed Jun
11 12:39:46 2014 UTC
@@ -129,6 +129,6 @@
<beans:bean id="methodInvoke"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
abstract="true"/>
<beans:bean id="setSysProps" parent="methodInvoke" abstract="true"
- p:targetObject="#{ systemProperties }"
+ p:targetObject="#{ T(java.lang.System).properties }"
p:targetMethod="putAll"/>
</beans:beans>
=======================================
--- /dcdt-parent/pom.xml Sun Jun 8 00:00:00 2014 UTC
+++ /dcdt-parent/pom.xml Wed Jun 11 12:39:46 2014 UTC
@@ -290,6 +290,11 @@
<version>1.1.0.Final</version>
</dependency>
<dependency>
+ <groupId>net.sf.ehcache</groupId>
+ <artifactId>ehcache-core</artifactId>
+ <version>2.6.9</version>
+ </dependency>
+ <dependency>
<groupId>net.sourceforge.htmlcleaner</groupId>
<artifactId>htmlcleaner</artifactId>
<version>2.8</version>
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerTcpSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -2,5 +2,6 @@
import gov.hhs.onc.dcdt.net.sockets.TcpSocketListener;
-public interface DnsServerTcpSocketListener extends
TcpSocketListener<DnsServerRequest, DnsServerRequestProcessor> {
+public interface DnsServerTcpSocketListener extends
+ TcpSocketListener<DnsServerTcpServerSocketAdapter,
DnsServerTcpSocketAdapter, DnsServerRequest, DnsServerRequestProcessor> {
}
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerUdpSocketListener.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/DnsServerUdpSocketListener.java
Wed Jun 11 12:39:46 2014 UTC
@@ -2,5 +2,5 @@
import gov.hhs.onc.dcdt.net.sockets.UdpSocketListener;
-public interface DnsServerUdpSocketListener extends
UdpSocketListener<DnsServerRequest, DnsServerRequestProcessor> {
+public interface DnsServerUdpSocketListener extends
UdpSocketListener<DnsServerUdpSocketAdapter, DnsServerRequest,
DnsServerRequestProcessor> {
}
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpSocketListenerImpl.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerTcpSocketListenerImpl.java
Wed Jun 11 12:39:46 2014 UTC
@@ -4,12 +4,12 @@
import gov.hhs.onc.dcdt.context.AutoStartup;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsMessageUtils;
import gov.hhs.onc.dcdt.net.InetProtocol;
-import gov.hhs.onc.dcdt.net.sockets.TcpServerSocketAdapter;
-import gov.hhs.onc.dcdt.net.sockets.TcpSocketAdapter;
import gov.hhs.onc.dcdt.net.sockets.impl.AbstractTcpSocketListener;
import gov.hhs.onc.dcdt.service.dns.config.DnsServerConfig;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerRequest;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerRequestProcessor;
+import gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpServerSocketAdapter;
+import gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpSocketAdapter;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpSocketListener;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -18,6 +18,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.core.task.AsyncListenableTaskExecutor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
@AutoStartup(false)
@@ -25,12 +26,14 @@
@Lazy
@Phase(Phase.PHASE_PRECEDENCE_HIGHEST)
@Scope("prototype")
-public class DnsServerTcpSocketListenerImpl extends
AbstractTcpSocketListener<DnsServerRequest, DnsServerRequestProcessor>
implements
+public class DnsServerTcpSocketListenerImpl extends
+ AbstractTcpSocketListener<DnsServerTcpServerSocketAdapter,
DnsServerTcpSocketAdapter, DnsServerRequest, DnsServerRequestProcessor>
implements
DnsServerTcpSocketListener {
private DnsServerConfig serverConfig;
public DnsServerTcpSocketListenerImpl(DnsServerConfig serverConfig) {
- super(DnsServerRequest.class, DnsServerRequestProcessor.class,
serverConfig.toSocketAddress());
+ super(DnsServerTcpServerSocketAdapter.class,
DnsServerTcpSocketAdapter.class, DnsServerRequest.class,
DnsServerRequestProcessor.class, serverConfig
+ .toSocketAddress());
this.serverConfig = serverConfig;
}
@@ -41,8 +44,8 @@
}
@Override
- protected TcpSocketAdapter readRequest(TcpServerSocketAdapter
listenSocketAdapter, DnsServerRequest req) throws IOException {
- TcpSocketAdapter reqSocketAdapter =
super.readRequest(listenSocketAdapter, req);
+ protected DnsServerTcpSocketAdapter
readRequest(DnsServerTcpServerSocketAdapter listenSocketAdapter,
DnsServerRequest req) throws IOException {
+ DnsServerTcpSocketAdapter reqSocketAdapter =
super.readRequest(listenSocketAdapter, req);
ByteBuffer reqBuffer = req.getRequestBuffer();
int reqQuerySize =
req.setQuerySize(ToolDnsMessageUtils.parseQuerySizeData(reqBuffer.get(0),
reqBuffer.get(1)));
@@ -59,9 +62,15 @@
return req;
}
+
+ @Override
+ @Resource(name = "taskExecServiceDnsServerReq")
+ protected void setRequestTaskExecutor(ThreadPoolTaskExecutor
reqTaskExec) {
+ super.setRequestTaskExecutor(reqTaskExec);
+ }
@Override
- @Resource(name = "taskExecServiceDnsServerReqQuery")
+ @Resource(name = "taskExecServiceDnsServer")
protected void setTaskExecutor(AsyncListenableTaskExecutor taskExec) {
super.setTaskExecutor(taskExec);
}
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerUdpSocketListenerImpl.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerUdpSocketListenerImpl.java
Wed Jun 11 12:39:46 2014 UTC
@@ -6,12 +6,14 @@
import gov.hhs.onc.dcdt.service.dns.config.DnsServerConfig;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerRequest;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerRequestProcessor;
+import gov.hhs.onc.dcdt.service.dns.server.DnsServerUdpSocketAdapter;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerUdpSocketListener;
import javax.annotation.Resource;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.core.task.AsyncListenableTaskExecutor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
@AutoStartup(false)
@@ -19,12 +21,12 @@
@Lazy
@Phase(Phase.PHASE_PRECEDENCE_HIGHEST)
@Scope("prototype")
-public class DnsServerUdpSocketListenerImpl extends
AbstractUdpSocketListener<DnsServerRequest, DnsServerRequestProcessor>
implements
+public class DnsServerUdpSocketListenerImpl extends
AbstractUdpSocketListener<DnsServerUdpSocketAdapter, DnsServerRequest,
DnsServerRequestProcessor> implements
DnsServerUdpSocketListener {
private DnsServerConfig serverConfig;
public DnsServerUdpSocketListenerImpl(DnsServerConfig serverConfig) {
- super(DnsServerRequest.class, DnsServerRequestProcessor.class,
serverConfig.toSocketAddress());
+ super(DnsServerUdpSocketAdapter.class, DnsServerRequest.class,
DnsServerRequestProcessor.class, serverConfig.toSocketAddress());
this.serverConfig = serverConfig;
}
@@ -35,7 +37,13 @@
}
@Override
- @Resource(name = "taskExecServiceDnsServerReqQuery")
+ @Resource(name = "taskExecServiceDnsServerReq")
+ protected void setRequestTaskExecutor(ThreadPoolTaskExecutor
reqTaskExec) {
+ super.setRequestTaskExecutor(reqTaskExec);
+ }
+
+ @Override
+ @Resource(name = "taskExecServiceDnsServer")
protected void setTaskExecutor(AsyncListenableTaskExecutor taskExec) {
super.setTaskExecutor(taskExec);
}
=======================================
---
/dcdt-service-dns/src/main/resources/META-INF/spring/spring-service-dns.xml
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-service-dns/src/main/resources/META-INF/spring/spring-service-dns.xml
Wed Jun 11 12:39:46 2014 UTC
@@ -24,19 +24,63 @@
p:corePoolSize="1"
p:maxPoolSize="5"/>
- <beans:bean id="taskExecServiceDnsServer" parent="taskExecService"
+ <beans:bean id="taskExecServiceDnsServer" parent="taskExecService"
lazy-init="true" scope="prototype"
p:corePoolSize="#{ taskExecServiceDns.corePoolSize }"
p:maxPoolSize="#{ taskExecServiceDns.maxPoolSize }"/>
- <beans:bean id="taskExecServiceDnsServerReq" parent="taskExecService"
- p:corePoolSize="#{ taskExecServiceDnsServer.corePoolSize * 5 }"
- p:maxPoolSize="#{ taskExecServiceDnsServer.maxPoolSize * 10 }"
- p:queueCapacity="#{ taskExecServiceDnsServer.maxPoolSize * 25 }"/>
+ <beans:bean id="taskExecServiceDnsServerReq" parent="taskExecService"
lazy-init="true" scope="prototype"
+ p:allowCoreThreadTimeOut="true"
+ p:corePoolSize="#{ taskExecServiceDnsServer.corePoolSize * 10 }"
+ p:keepAliveSeconds="15"
+ p:maxPoolSize="#{ taskExecServiceDnsServer.maxPoolSize * 50 }"/>
- <beans:bean id="taskExecServiceDnsServerReqQuery"
parent="taskExecService"
- p:corePoolSize="#{ taskExecServiceDnsServerReq.corePoolSize * 2 }"
- p:maxPoolSize="#{ taskExecServiceDnsServerReq.maxPoolSize * 2 }"
- p:queueCapacity="#{ taskExecServiceDnsServerReq.maxPoolSize * 2
}"/>
+
<!--====================================================================================================
+ = DNS UDP SOCKET ADAPTERS
+
=====================================================================================================-->
+ <beans:bean id="socketAdapterUdpDnsServer"
class="gov.hhs.onc.dcdt.service.dns.server.DnsServerUdpSocketAdapter"
parent="socketAdapterUdp" abstract="true"/>
+
+ <!--suppress SpringBeanConstructorArgInspection -->
+ <beans:bean id="socketAdapterUdpDnsServerImpl"
class="gov.hhs.onc.dcdt.service.dns.server.impl.DnsServerUdpSocketAdapterImpl"
+ parent="socketAdapterUdpDnsServer" lazy-init="true"
scope="prototype">
+ <beans:property name="options">
+ <beans:map>
+ <beans:entry key="#{
T(java.net.StandardSocketOptions).SO_REUSEADDR }" value="true"
value-type="java.lang.Boolean"/>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
+
<!--====================================================================================================
+ = DNS TCP SERVER SOCKET ADAPTERS
+
=====================================================================================================-->
+ <beans:bean id="socketAdapterTcpServerDnsServer"
class="gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpServerSocketAdapter"
parent="socketAdapterTcpServer"
+ abstract="true"/>
+
+ <!--suppress SpringBeanConstructorArgInspection -->
+ <beans:bean id="socketAdapterTcpServerDnsServerImpl"
class="gov.hhs.onc.dcdt.service.dns.server.impl.DnsServerTcpServerSocketAdapterImpl"
+ parent="socketAdapterTcpServerDnsServer" lazy-init="true"
scope="prototype">
+ <beans:property name="options">
+ <beans:map>
+ <beans:entry key="#{
T(gov.hhs.onc.dcdt.net.sockets.SocketAdapterOptions).BACKLOG }" value="#{
taskExecServiceDnsServerReq.maxPoolSize }"
+ value-type="java.lang.Integer"/>
+ <beans:entry key="#{
T(java.net.StandardSocketOptions).SO_REUSEADDR }" value="true"
value-type="java.lang.Boolean"/>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
+
<!--====================================================================================================
+ = DNS TCP SOCKET ADAPTERS
+
=====================================================================================================-->
+ <beans:bean id="socketAdapterTcpDnsServer"
class="gov.hhs.onc.dcdt.service.dns.server.DnsServerTcpSocketAdapter"
parent="socketAdapterTcp" abstract="true"/>
+
+ <!--suppress SpringBeanConstructorArgInspection -->
+ <beans:bean id="socketAdapterTcpDnsServerImpl"
class="gov.hhs.onc.dcdt.service.dns.server.impl.DnsServerTcpSocketAdapterImpl"
+ parent="socketAdapterTcpDnsServer" lazy-init="true"
scope="prototype">
+ <beans:property name="options">
+ <beans:map>
+ <beans:entry key="#{
T(java.net.StandardSocketOptions).SO_REUSEADDR }" value="true"
value-type="java.lang.Boolean"/>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
<!--====================================================================================================
= DNS SERVER CONFIG
=======================================
---
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/config/impl/LdapServiceConfiguration.java
Tue Apr 22 12:12:28 2014 UTC
+++
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/config/impl/LdapServiceConfiguration.java
Wed Jun 11 12:39:46 2014 UTC
@@ -45,7 +45,10 @@
public DirectoryService
createDirectoryService(ToolDirectoryServiceBean dirServiceBean) throws
Exception {
SchemaManager schemaManager = dirServiceBean.getSchemaManager();
InstanceLayout instanceLayout = dirServiceBean.getInstanceLayout();
+
DirectoryService dirService =
ServiceBuilder.createDirectoryService(dirServiceBean, instanceLayout,
schemaManager);
+ dirService.setCacheService(dirServiceBean.getCacheService());
+
Partition partition;
for (PartitionBean partitionBean : dirServiceBean.getPartitions())
{
=======================================
---
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/config/impl/ToolDirectoryServiceBean.java
Wed Apr 23 18:24:11 2014 UTC
+++
/dcdt-service-ldap/src/main/java/gov/hhs/onc/dcdt/service/ldap/config/impl/ToolDirectoryServiceBean.java
Wed Jun 11 12:39:46 2014 UTC
@@ -27,6 +27,7 @@
import org.apache.directory.server.config.beans.LdapServerBean;
import org.apache.directory.server.config.beans.TcpTransportBean;
import org.apache.directory.server.constants.ServerDNConstants;
+import org.apache.directory.server.core.api.CacheService;
import org.apache.directory.server.core.api.InstanceLayout;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
@@ -87,6 +88,7 @@
}
private AbstractApplicationContext appContext;
+ private CacheService cacheService;
private Collection<Entry> dataEntries;
private InstanceLayout instanceLayout;
private InstanceLdapConfig ldapConfig;
@@ -126,6 +128,15 @@
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
this.appContext = (AbstractApplicationContext) appContext;
}
+
+ @Nullable
+ public CacheService getCacheService() {
+ return this.cacheService;
+ }
+
+ public void setCacheService(@Nullable CacheService cacheService) {
+ this.cacheService = cacheService;
+ }
public boolean hasDataEntries() {
return !CollectionUtils.isEmpty(this.dataEntries);
=======================================
---
/dcdt-service-ldap/src/main/resources/META-INF/spring/spring-service-ldap.xml
Sun Mar 9 13:27:34 2014 UTC
+++
/dcdt-service-ldap/src/main/resources/META-INF/spring/spring-service-ldap.xml
Wed Jun 11 12:39:46 2014 UTC
@@ -22,6 +22,22 @@
p:corePoolSize="1"
p:maxPoolSize="5"/>
+
<!--====================================================================================================
+ = CACHE SERVICE
+
=====================================================================================================-->
+ <beans:bean id="cacheService"
class="gov.hhs.onc.dcdt.service.ldap.impl.ToolCacheService">
+ <beans:constructor-arg name="cacheManager">
+ <!--suppress SpringModelInspection -->
+ <beans:bean
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
+
p:configLocation="classpath:ehcache/ehcache-service-ldap.xml"/>
+ </beans:constructor-arg>
+ <beans:constructor-arg name="disabledCacheNames">
+ <util:set>
+ <beans:value>dnCache</beans:value>
+ </util:set>
+ </beans:constructor-arg>
+ </beans:bean>
+
<!--====================================================================================================
= SCHEMA MANAGER
=====================================================================================================-->
@@ -155,6 +171,7 @@
= DIRECTORY SERVICE CONFIG
=====================================================================================================-->
<beans:bean id="dirServiceBean"
class="gov.hhs.onc.dcdt.service.ldap.config.impl.ToolDirectoryServiceBean"
parent="adsBean" abstract="true"
+ p:cacheService-ref="cacheService"
p:dsAccessControlEnabled="false"
p:dsAllowAnonymousAccess="true">
<beans:property name="interceptors">
==============================================================================
Revision: f3e50a82fdae
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 18:16:57 2014 UTC
Log: - Supports DCDT-254.
- Disabled DNS lookup service bean autowiring (instances must be injected
by bean name).
- Added search path configuration to DNS lookup service (empty by default
[in order to override any values from the OS]).
- Refactored mail service James DNS service to utilize the local + external
DNS lookup service variants directly and skip the resolution of DNS record
types that will always be ignored (ex. PTR, TXT).
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=f3e50a82fdae
Modified:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/impl/HasMxRecordConstraintValidator.java
/dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupServiceUnitTests.java
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/ToolDnsService.java
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/DnsServiceConfigBean.java
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/SmtpServerConfigBean.java
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/impl/DnsServiceConfigBeanImpl.java
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
/dcdt-service-mail/src/main/resources/META-INF/spring/spring-service-mail.xml
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
Fri Apr 18 03:30:00 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
Wed Jun 11 18:16:57 2014 UTC
@@ -7,6 +7,7 @@
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.DnsServiceProtocol;
import gov.hhs.onc.dcdt.dns.DnsServiceType;
+import java.util.Set;
import javax.annotation.Nullable;
import org.apache.commons.collections4.Predicate;
import org.xbill.DNS.ARecord;
@@ -57,4 +58,11 @@
public Resolver getResolver();
public void setResolver(@Nullable Resolver resolver);
+
+ public boolean hasSearchPaths();
+
+ @Nullable
+ public Set<Name> getSearchPaths();
+
+ public void setSearchPaths(@Nullable Set<Name> searchPaths);
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
Fri Apr 18 03:30:00 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
Wed Jun 11 18:16:57 2014 UTC
@@ -11,7 +11,10 @@
import gov.hhs.onc.dcdt.dns.lookup.DnsLookupService;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsNameUtils;
import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.CertRecordParameterPredicate;
+import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
+import java.util.Set;
import javax.annotation.Nullable;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.CERTRecord;
@@ -29,6 +32,7 @@
public class DnsLookupServiceImpl extends AbstractToolBean implements
DnsLookupService {
private Cache cache;
private Resolver resolver;
+ private Set<Name> searchPaths;
@Override
public DnsLookupResult<ARecord> lookupARecords(Name name) throws
DnsException {
@@ -90,6 +94,8 @@
if (this.hasResolver()) {
lookup.setResolver(this.resolver);
}
+
+ lookup.setSearchPath(ToolCollectionUtils.toArray(this.searchPaths,
Name.class));
lookup.run();
@@ -127,4 +133,20 @@
public void setResolver(@Nullable Resolver resolver) {
this.resolver = resolver;
}
+
+ @Override
+ public boolean hasSearchPaths() {
+ return !CollectionUtils.isEmpty(this.searchPaths);
+ }
+
+ @Nullable
+ @Override
+ public Set<Name> getSearchPaths() {
+ return this.searchPaths;
+ }
+
+ @Override
+ public void setSearchPaths(@Nullable Set<Name> searchPaths) {
+ this.searchPaths = searchPaths;
+ }
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/impl/HasMxRecordConstraintValidator.java
Fri Apr 18 03:30:00 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/impl/HasMxRecordConstraintValidator.java
Wed Jun 11 18:16:57 2014 UTC
@@ -8,13 +8,13 @@
import gov.hhs.onc.dcdt.mail.MailAddress;
import gov.hhs.onc.dcdt.mail.ToolMailAddressException;
import
gov.hhs.onc.dcdt.validation.constraints.impl.AbstractToolStringConstraintValidator;
+import javax.annotation.Resource;
import javax.validation.ConstraintValidatorContext;
-import org.springframework.beans.factory.annotation.Autowired;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.MXRecord;
public class HasMxRecordConstraintValidator extends
AbstractToolStringConstraintValidator<HasMxRecord> {
- @Autowired
+ @Resource(name = "dnsLookupServiceExternal")
@SuppressWarnings({ "SpringJavaAutowiringInspection" })
private DnsLookupService dnsLookupService;
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml Tue
Apr 29 00:09:36 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml Wed
Jun 11 18:16:57 2014 UTC
@@ -73,7 +73,7 @@
<!--====================================================================================================
= DNS RESOLVERS
=====================================================================================================-->
- <beans:bean id="dnsResolver" class="org.xbill.DNS.ExtendedResolver"
abstract="true"/>
+ <beans:bean id="dnsResolver" class="org.xbill.DNS.Resolver"
abstract="true"/>
<beans:bean id="dnsResolverExt" class="org.xbill.DNS.ExtendedResolver"
parent="dnsResolver" abstract="true"/>
<beans:bean id="dnsResolverExtLocal"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsResolverUtils"
parent="dnsResolverExt" factory-method="fromSocketAddresses">
@@ -96,17 +96,24 @@
</beans:bean>
<!--====================================================================================================
- = DNS LOOKUP SERVICE
+ = DNS LOOKUP SERVICES
=====================================================================================================-->
<beans:bean id="dnsLookupService"
class="gov.hhs.onc.dcdt.dns.lookup.DnsLookupService" abstract="true"/>
- <beans:bean id="dnsLookupServiceImpl"
class="gov.hhs.onc.dcdt.dns.lookup.impl.DnsLookupServiceImpl"
parent="dnsLookupService" lazy-init="true"
- scope="prototype">
+
+ <beans:bean id="dnsLookupServiceImpl"
class="gov.hhs.onc.dcdt.dns.lookup.impl.DnsLookupServiceImpl"
parent="dnsLookupService" autowire-candidate="false"
+ lazy-init="true" scope="prototype">
<beans:property name="cache">
<beans:bean parent="dnsCacheNoOp"/>
+ </beans:property>
+ <beans:property name="searchPaths">
+ <beans:set/>
</beans:property>
</beans:bean>
- <beans:bean id="dnsLookupServiceExternal"
parent="dnsLookupServiceImpl" primary="true"
+ <beans:bean id="dnsLookupServiceLocal" parent="dnsLookupServiceImpl"
autowire-candidate="false"
+ p:resolver-ref="dnsResolverExtLocal"/>
+
+ <beans:bean id="dnsLookupServiceExternal"
parent="dnsLookupServiceImpl" autowire-candidate="false"
p:resolver-ref="dnsResolverExtExternal"/>
<!--====================================================================================================
=======================================
---
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupServiceUnitTests.java
Fri Apr 18 16:09:01 2014 UTC
+++
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupServiceUnitTests.java
Wed Jun 11 18:16:57 2014 UTC
@@ -7,8 +7,8 @@
import gov.hhs.onc.dcdt.dns.utils.ToolDnsNameUtils;
import gov.hhs.onc.dcdt.test.impl.AbstractToolUnitTests;
import gov.hhs.onc.dcdt.utils.ToolStringUtils;
+import javax.annotation.Resource;
import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -25,7 +25,7 @@
@Test(groups =
{ "dcdt.test.unit.dns.all", "dcdt.test.unit.dns.lookup.all", "dcdt.test.unit.dns.lookup.service"
})
public class DnsLookupServiceUnitTests extends AbstractToolUnitTests {
- @Autowired
+ @Resource(name = "dnsLookupServiceExternal")
@SuppressWarnings({ "SpringJavaAutowiringInspection" })
private DnsLookupService dnsLookupService;
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/ToolDnsService.java
Tue Apr 29 00:09:36 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/ToolDnsService.java
Wed Jun 11 18:16:57 2014 UTC
@@ -3,7 +3,7 @@
import gov.hhs.onc.dcdt.service.mail.james.config.BeanConfigurable;
import gov.hhs.onc.dcdt.service.mail.james.config.DnsServiceConfigBean;
import org.apache.james.dnsservice.api.DNSService;
-import org.springframework.context.ApplicationContextAware;
+import org.springframework.beans.factory.InitializingBean;
-public interface ToolDnsService extends ApplicationContextAware,
BeanConfigurable<DnsServiceConfigBean>, DNSService {
+public interface ToolDnsService extends
BeanConfigurable<DnsServiceConfigBean>, DNSService, InitializingBean {
}
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/DnsServiceConfigBean.java
Tue Apr 29 00:09:36 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/DnsServiceConfigBean.java
Wed Jun 11 18:16:57 2014 UTC
@@ -1,38 +1,15 @@
package gov.hhs.onc.dcdt.service.mail.james.config;
import gov.hhs.onc.dcdt.config.ConfigurationNode;
-import javax.annotation.Nullable;
-import org.xbill.DNS.Cache;
-import org.xbill.DNS.Resolver;
+import gov.hhs.onc.dcdt.dns.lookup.DnsLookupService;
@ConfigurationNode(name = "dnsservice")
public interface DnsServiceConfigBean extends JamesConfigBean {
- public boolean hasAutoDiscover();
+ public DnsLookupService getExternalLookupService();
- @ConfigurationNode(name = "autodiscover")
- @Nullable
- public Boolean isAutoDiscover();
+ public void setExternalLookupService(DnsLookupService
extLookupService);
- public void setAutoDiscover(@Nullable Boolean autoDiscover);
+ public DnsLookupService getLocalLookupService();
- public boolean hasCache();
-
- @Nullable
- public Cache getCache();
-
- public void setCache(@Nullable Cache cache);
-
- public boolean hasExternalResolver();
-
- @Nullable
- public Resolver getExternalResolver();
-
- public void setExternalResolver(@Nullable Resolver extResolver);
-
- public boolean hasLocalResolver();
-
- @Nullable
- public Resolver getLocalResolver();
-
- public void setLocalResolver(@Nullable Resolver localResolver);
+ public void setLocalLookupService(DnsLookupService localLookupService);
}
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/SmtpServerConfigBean.java
Tue Apr 22 12:12:28 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/SmtpServerConfigBean.java
Wed Jun 11 18:16:57 2014 UTC
@@ -4,7 +4,7 @@
import javax.annotation.Nullable;
@ConfigurationNode(name = "smtpserver")
-public interface SmtpServerConfigBean {
+public interface SmtpServerConfigBean extends JamesConfigBean {
public boolean hasAuthorizedAddresses();
@ConfigurationNode
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/impl/DnsServiceConfigBeanImpl.java
Tue Apr 29 00:09:36 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/config/impl/DnsServiceConfigBeanImpl.java
Wed Jun 11 18:16:57 2014 UTC
@@ -1,77 +1,29 @@
package gov.hhs.onc.dcdt.service.mail.james.config.impl;
+import gov.hhs.onc.dcdt.dns.lookup.DnsLookupService;
import gov.hhs.onc.dcdt.service.mail.james.config.DnsServiceConfigBean;
-import javax.annotation.Nullable;
-import org.xbill.DNS.Cache;
-import org.xbill.DNS.Resolver;
public class DnsServiceConfigBeanImpl extends AbstractJamesConfigBean
implements DnsServiceConfigBean {
- private Boolean autoDiscover;
- private Cache cache;
- private Resolver extResolver;
- private Resolver localResolver;
-
- @Override
- public boolean hasAutoDiscover() {
- return (this.autoDiscover != null);
- }
-
- @Nullable
- @Override
- public Boolean isAutoDiscover() {
- return this.autoDiscover;
- }
-
- @Override
- public void setAutoDiscover(@Nullable Boolean autoDiscover) {
- this.autoDiscover = autoDiscover;
- }
-
- @Override
- public boolean hasCache() {
- return (this.cache != null);
- }
-
- @Nullable
- @Override
- public Cache getCache() {
- return this.cache;
- }
-
- @Override
- public void setCache(@Nullable Cache cache) {
- this.cache = cache;
- }
-
- @Override
- public boolean hasExternalResolver() {
- return (this.extResolver != null);
- }
-
- @Nullable
- @Override
- public Resolver getExternalResolver() {
- return this.extResolver;
- }
+ private DnsLookupService extLookupService;
+ private DnsLookupService localLookupService;
@Override
- public void setExternalResolver(@Nullable Resolver extResolver) {
- this.extResolver = extResolver;
+ public DnsLookupService getExternalLookupService() {
+ return this.extLookupService;
}
@Override
- public boolean hasLocalResolver() {
- return (this.localResolver != null);
+ public void setExternalLookupService(DnsLookupService
extLookupService) {
+ this.extLookupService = extLookupService;
}
- @Nullable
@Override
- public Resolver getLocalResolver() {
- return this.localResolver;
+ public DnsLookupService getLocalLookupService() {
+ return this.localLookupService;
}
@Override
- public void setLocalResolver(@Nullable Resolver localResolver) {
- this.localResolver = localResolver;
+ public void setLocalLookupService(DnsLookupService localLookupService)
{
+ this.localLookupService = localLookupService;
}
}
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
Tue Apr 29 00:09:36 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
Wed Jun 11 18:16:57 2014 UTC
@@ -1,55 +1,81 @@
package gov.hhs.onc.dcdt.service.mail.james.impl;
-import gov.hhs.onc.dcdt.beans.utils.ToolBeanFactoryUtils;
import gov.hhs.onc.dcdt.dns.DnsException;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.lookup.DnsLookupResult;
-import gov.hhs.onc.dcdt.dns.lookup.DnsLookupService;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils;
+import gov.hhs.onc.dcdt.net.utils.ToolInetAddressUtils;
import gov.hhs.onc.dcdt.service.mail.james.ToolDnsService;
import gov.hhs.onc.dcdt.service.mail.james.config.DnsServiceConfigBean;
+import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
+import gov.hhs.onc.dcdt.utils.ToolNumberUtils;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+import java.util.TreeSet;
import javax.annotation.Nullable;
+import javax.annotation.Resource;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.james.dnsservice.api.TemporaryResolutionException;
import org.apache.james.dnsservice.dnsjava.DNSJavaService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.AbstractApplicationContext;
+import org.xbill.DNS.ARecord;
+import org.xbill.DNS.Address;
import
org.xbill.DNS.Name;
import org.xbill.DNS.Record;
-import org.xbill.DNS.Resolver;
import org.xbill.DNS.TextParseException;
public class ToolDnsServiceImpl extends DNSJavaService implements
ToolDnsService {
- private final static String CONFIG_PROP_NAME_SET_AS_DNS_JAVA_DEFAULT
= "setAsDNSJavaDefault";
-
private final static Logger LOGGER =
LoggerFactory.getLogger(ToolDnsServiceImpl.class);
- private AbstractApplicationContext appContext;
+ @Resource(name = "ipAddrLocalhost")
+ private InetAddress addrLocalhost;
+
+ private Set<String> addrLocalhostNames;
private DnsServiceConfigBean configBean;
- private DnsLookupService localLookupService, extLookupService;
+ @Nullable
@Override
- public void init() throws Exception {
- super.init();
+ public InetAddress getByName(String name) throws UnknownHostException {
+ return ToolArrayUtils.getFirst(this.getByName(name, 1));
+ }
- if (this.configBean.hasCache()) {
- this.cache = this.configBean.getCache();
- }
+ @Nullable
+ @Override
+ public InetAddress[] getAllByName(String name) throws
UnknownHostException {
+ return this.getByName(name, -1);
+ }
+
+ @Nullable
+ @Override
+ public String getHostName(InetAddress addr) {
+ return addr.getHostAddress();
+ }
+
+ @Override
+ public Collection<String> findTXTRecords(String hostName) {
+ return new ArrayList<>(0);
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.addrLocalhostNames =
+ ToolCollectionUtils.addAll(new
TreeSet<>(String.CASE_INSENSITIVE_ORDER),
+ ToolArrayUtils.asList(this.addrLocalhost.getHostName(),
this.addrLocalhost.getCanonicalHostName(),
this.addrLocalhost.getHostAddress()));
+ }
- this.localLookupService =
this.createLookupService(this.configBean.getLocalResolver());
- this.extLookupService =
this.createLookupService(this.configBean.getExternalResolver());
+ @Override
+ public void init() throws Exception {
}
@Override
public void configure(HierarchicalConfiguration config) throws
ConfigurationException {
- config.setProperty(CONFIG_PROP_NAME_SET_AS_DNS_JAVA_DEFAULT,
false);
-
- super.configure(config);
}
@Nullable
@@ -76,10 +102,10 @@
DnsLookupResult<? extends Record> lookupResult;
try {
- lookupResult =
this.localLookupService.lookupRecords(recordType,
recordType.getRecordClass(), name);
+ lookupResult =
this.configBean.getLocalLookupService().lookupRecords(recordType,
recordType.getRecordClass(), name);
if (!lookupResult.isSuccess()) {
- lookupResult =
this.extLookupService.lookupRecords(recordType,
recordType.getRecordClass(), name);
+ lookupResult =
this.configBean.getExternalLookupService().lookupRecords(recordType,
recordType.getRecordClass(), name);
}
} catch (DnsException e) {
LOGGER.error(String.format("Unable to perform DNS lookup
(recordType=%s, name=%s) name.", recordType.getTypeDisplay(), nameStr), e);
@@ -87,21 +113,31 @@
return null;
}
- return
ToolCollectionUtils.toArray(lookupResult.getOrderedAnswers(), Record.class);
+ return ToolCollectionUtils.toArray(lookupResult.getAnswers(),
Record.class);
}
- private DnsLookupService createLookupService(Resolver resolver) {
- DnsLookupService lookupService =
ToolBeanFactoryUtils.createBeanOfType(this.appContext,
DnsLookupService.class);
- // noinspection ConstantConditions
- lookupService.setCache(this.configBean.getCache());
- lookupService.setResolver(resolver);
+ @Nullable
+ private InetAddress[] getByName(String name, int limit) throws
UnknownHostException {
+ InetAddress[] addrs;
+
+ try {
+ addrs =
ArrayUtils.toArray((this.addrLocalhostNames.contains(name) ?
this.addrLocalhost : Address.getByAddress(name, Address.IPv4)));
+ addrs = (ToolNumberUtils.isPositive(limit) ?
ArrayUtils.subarray(addrs, 0, limit) : addrs);
+ } catch (UnknownHostException e) {
+ Record[] addrRecords = this.lookupNoException(name,
DnsRecordType.A.getType(), DnsRecordType.A.getTypeDisplay());
+
+ if (ArrayUtils.isEmpty((addrRecords =
(ToolNumberUtils.isPositive(limit) ? ArrayUtils.subarray(addrRecords, 0,
limit) : addrRecords)))) {
+ throw e;
+ }
+
+ addrs = new InetAddress[addrRecords.length];
- return lookupService;
- }
+ for (int a = 0; a < addrRecords.length; a++) {
+ addrs[a] = ToolInetAddressUtils.getByAddress(name,
((ARecord) addrRecords[a]).getAddress().getHostAddress());
+ }
+ }
- @Override
- public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
- this.appContext = ((AbstractApplicationContext) appContext);
+ return addrs;
}
@Override
@@ -113,4 +149,9 @@
public void setConfigBean(DnsServiceConfigBean configBean) {
this.configBean = configBean;
}
+
+ @Override
+ public InetAddress getLocalHost() throws UnknownHostException {
+ return this.addrLocalhost;
+ }
}
=======================================
---
/dcdt-service-mail/src/main/resources/META-INF/spring/spring-service-mail.xml
Sun May 25 21:01:11 2014 UTC
+++
/dcdt-service-mail/src/main/resources/META-INF/spring/spring-service-mail.xml
Wed Jun 11 18:16:57 2014 UTC
@@ -388,14 +388,7 @@
=====================================================================================================-->
<beans:bean id="configBeanDnsService"
class="gov.hhs.onc.dcdt.service.mail.james.config.DnsServiceConfigBean"
parent="configBeanJames" abstract="true"/>
<beans:bean id="configBeanDnsServiceImpl"
class="gov.hhs.onc.dcdt.service.mail.james.config.impl.DnsServiceConfigBeanImpl"
parent="configBeanDnsService"
- abstract="true"
- p:autoDiscover="false"
- p:externalResolver-ref="dnsResolverExtExternal"
- p:localResolver-ref="dnsResolverExtLocal">
- <beans:property name="cache">
- <beans:bean parent="dnsCacheNoOp"/>
- </beans:property>
- </beans:bean>
+ abstract="true"/>
<!--====================================================================================================
= JAMES DNS SERVICE
@@ -404,7 +397,9 @@
<beans:bean id="dnsServiceJamesImpl"
class="gov.hhs.onc.dcdt.service.mail.james.impl.ToolDnsServiceImpl"
parent="dnsServiceJames">
<beans:property name="configBean">
- <beans:bean parent="configBeanDnsServiceImpl"/>
+ <beans:bean parent="configBeanDnsServiceImpl"
+ p:externalLookupService-ref="dnsLookupServiceExternal"
+ p:localLookupService-ref="dnsLookupServiceLocal"/>
</beans:property>
</beans:bean>
<beans:alias name="dnsServiceJamesImpl" alias="dnsservice"/>
==============================================================================
Revision: 76097ccd395a
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 20:06:37 2014 UTC
Log: - Supports DCDT-255.
- Added explicit Java security provider designation during S/MIME
processing.
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=76097ccd395a
Modified:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
Mon May 5 07:15:57 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
Wed Jun 11 20:06:37 2014 UTC
@@ -92,7 +92,7 @@
@SuppressWarnings({ "unchecked" })
public static Map<SignerId, CertificateInfo>
verifySignatures(SMIMESigned signed) throws MessagingException {
Store signedCerts = signed.getCertificates();
- JcaSimpleSignerInfoVerifierBuilder signerInfoVerifierBuilder = new
JcaSimpleSignerInfoVerifierBuilder();
+ JcaSimpleSignerInfoVerifierBuilder signerInfoVerifierBuilder = new
JcaSimpleSignerInfoVerifierBuilder().setProvider(CryptographyUtils.PROVIDER);
Map<SignerId, SignerInformation> signerInfoMap =
mapSigners(signed);
Map<SignerId, CertificateInfo> signerCertMap = new
LinkedHashMap<>(signerInfoMap.size());
SignerInformation signerInfo = null;
@@ -247,7 +247,8 @@
}
try {
- return
SMIMEUtil.toMimeBodyPart(recipientInfoMap.get(recipientId).getContent(new
JceKeyTransEnvelopedRecipient(privateKey)));
+ return
SMIMEUtil.toMimeBodyPart(recipientInfoMap.get(recipientId).getContent(
+ new
JceKeyTransEnvelopedRecipient(privateKey).setProvider(CryptographyUtils.PROVIDER)));
} catch (CMSException | SMIMEException e) {
throw new ToolSmimeException(String.format("Unable to decrypt
mail MIME message (id=%s, from=%s, to=%s) enveloped content (type=%s).",
msgHelper
.getMimeMessage().getMessageID(), msgHelper.getFrom(),
msgHelper.getTo(),
ToolMimePartUtils.getContentType(enveloped.getEncryptedContent())), e);
@@ -321,7 +322,7 @@
try {
SMIMEEnvelopedGenerator envelopedGen = new
SMIMEEnvelopedGenerator();
envelopedGen.addRecipientInfoGenerator(new
JceKeyTransRecipientInfoGenerator(cert));
- JceCMSContentEncryptorBuilder encryptorBuilder = new
JceCMSContentEncryptorBuilder(encryptionAlg.getOid());
+ JceCMSContentEncryptorBuilder encryptorBuilder = new
JceCMSContentEncryptorBuilder(encryptionAlg.getOid()).setProvider(CryptographyUtils.PROVIDER);
if
(ToolSmimeContentTypeUtils.isSignedData(bodyPartContentType)) {
return envelopedGen.generate(unencryptedBodyPart,
encryptorBuilder.build());
@@ -365,8 +366,8 @@
try {
signer.addCertificates(new JcaCertStore(certList));
- signer.addSignerInfoGenerator(new
JcaSimpleSignerInfoGeneratorBuilder().setSignedAttributeGenerator(new
AttributeTable(signedAttrs)).build(
- sigAlg.getId(), privateKey, cert));
+ signer.addSignerInfoGenerator(new
JcaSimpleSignerInfoGeneratorBuilder().setProvider(CryptographyUtils.PROVIDER)
+ .setSignedAttributeGenerator(new
AttributeTable(signedAttrs)).build(sigAlg.getId(), privateKey, cert));
return signer.generate(unsignedMsg);
} catch (OperatorCreationException |
CertificateEncodingException | SMIMEException e) {
==============================================================================
Revision: 444696c668ed
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Wed Jun 11 20:17:57 2014 UTC
Log: - Further supports DCDT-255.
- Added missing explicit Java security provider designation.
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=444696c668ed
Modified:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
Wed Jun 11 20:06:37 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
Wed Jun 11 20:17:57 2014 UTC
@@ -321,7 +321,7 @@
try {
SMIMEEnvelopedGenerator envelopedGen = new
SMIMEEnvelopedGenerator();
- envelopedGen.addRecipientInfoGenerator(new
JceKeyTransRecipientInfoGenerator(cert));
+ envelopedGen.addRecipientInfoGenerator(new
JceKeyTransRecipientInfoGenerator(cert).setProvider(CryptographyUtils.PROVIDER));
JceCMSContentEncryptorBuilder encryptorBuilder = new
JceCMSContentEncryptorBuilder(encryptionAlg.getOid()).setProvider(CryptographyUtils.PROVIDER);
if
(ToolSmimeContentTypeUtils.isSignedData(bodyPartContentType)) {