Author: jawi Date: Tue Sep 10 15:15:45 2013 New Revision: 1521522 URL: http://svn.apache.org/r1521522 Log: Forgot to add newly added files. Added: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/InternalConstants.java (with props) ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ReflectionUtil.java (with props) ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ResettableTimer.java (with props) ace/trunk/org.apache.ace.agent/test/org/apache/ace/agent/testutil/SynchronousExecutorService.java (with props) Added: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/InternalConstants.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/InternalConstants.java?rev=1521522&view=auto ============================================================================== --- ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/InternalConstants.java (added) +++ ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/InternalConstants.java Tue Sep 10 15:15:45 2013 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.ace.agent.impl; + +/** + * Represents internal constants. + */ +public interface InternalConstants { + /** + * Event topic used to report changes in the agent's configuration. + */ + String AGENT_CONFIG_CHANGED = "agent/config/CHANGED"; + +} Propchange: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/InternalConstants.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ReflectionUtil.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ReflectionUtil.java?rev=1521522&view=auto ============================================================================== --- ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ReflectionUtil.java (added) +++ ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ReflectionUtil.java Tue Sep 10 15:15:45 2013 @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.ace.agent.impl; + +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * Provides some utility methods for use with reflection. + */ +final class ReflectionUtil { + + static void configureField(Object object, Class> iface, Object instance) { + // Note: Does not check super classes! + Class> clazz = object.getClass(); + do { + Field[] fields = clazz.getDeclaredFields(); + AccessibleObject.setAccessible(fields, true); + for (int j = 0; j < fields.length; j++) { + if (iface.equals(fields[j].getType())) { + try { + synchronized (new Object()) { + fields[j].set(object, instance); + } + } + catch (Exception e) { + throw new IllegalStateException("Could not set field " + fields[j].getName() + " on " + object, e); + } + } + } + clazz = clazz.getSuperclass(); + } + while (!Object.class.equals(clazz)); + } + + static Object invokeMethod(Object object, String methodName, Class>[] signature, Object[] parameters) { + // Note: Does not check super classes! + Class> clazz = object.getClass(); + try { + Method method = clazz.getDeclaredMethod(methodName, signature); + return method.invoke(object, parameters); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} Propchange: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ReflectionUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ResettableTimer.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ResettableTimer.java?rev=1521522&view=auto ============================================================================== --- ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ResettableTimer.java (added) +++ ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ResettableTimer.java Tue Sep 10 15:15:45 2013 @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.agent.impl; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +/** + * Provides a timer that can be reset. + *
+ * Taken from Apache Felix UserAdmin File-based store implementation. + *
+ */ +final class ResettableTimer { + private final ScheduledExecutorService m_executor; + private final Runnable m_task; + private final long m_timeout; + private final TimeUnit m_timeUnit; + private final AtomicReferencenull
;
+ * @param timeout
+ * the timeout value, > 0;
+ * @param unit
+ * the time unit of the timeout value, cannot be null
.
+ */
+ public ResettableTimer(Runnable task, long timeout, TimeUnit unit) {
+ this(new ScheduledThreadPoolExecutor(1), task, timeout, unit);
+ }
+
+ /**
+ * Creates a new {@link ResettableTimer} calling a given task when a given timeout exceeds.
+ *
+ * @param executor
+ * the executor to use to execute the task, cannot be null
;
+ * @param task
+ * the task to execute upon timout, cannot be null
;
+ * @param timeout
+ * the timeout value, > 0;
+ * @param unit
+ * the time unit of the timeout value, cannot be null
.
+ */
+ public ResettableTimer(ScheduledExecutorService executor, Runnable task, long timeout, TimeUnit unit) {
+ if (executor == null) {
+ throw new IllegalArgumentException("Executor cannot be null!");
+ }
+ if (task == null) {
+ throw new IllegalArgumentException("Task cannot be null!");
+ }
+ if (timeout <= 0) {
+ throw new IllegalArgumentException("Timeout cannot be negative!");
+ }
+ if (unit == null) {
+ throw new IllegalArgumentException("TimeUnit cannot be null!");
+ }
+
+ m_executor = executor;
+ m_task = task;
+ m_timeout = timeout;
+ m_timeUnit = unit;
+
+ m_futureRef = new AtomicReferencetrue
if this timer is shut down, false
otherwise.
+ */
+ public boolean isShutDown() {
+ return m_executor.isShutdown();
+ }
+
+ /**
+ * Schedules the task for execution with the contained timeout. If a task is already pending or running, it will be
+ * cancelled (not interrupted). The new task will be scheduled to run in now + timeout.
+ */
+ public ScheduledFuture> schedule() {
+ ScheduledFuture> currentTask = cancelCurrentTask();
+ ScheduledFuture> newTask = m_executor.schedule(m_task, m_timeout, m_timeUnit);
+ m_futureRef.compareAndSet(currentTask, newTask);
+ return newTask;
+ }
+
+ /**
+ * Shuts down this timer, allowing any pending tasks to execute. After this method is called, {@link #schedule()}
+ * may no longer be called.
+ */
+ public void shutDown() {
+ m_executor.shutdown();
+ try {
+ m_executor.awaitTermination(2 * m_timeout, m_timeUnit);
+ }
+ catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ /**
+ * @return the current task, or null
if no task is available.
+ */
+ private ScheduledFuture> cancelCurrentTask() {
+ ScheduledFuture> currentTask = m_futureRef.get();
+ if (currentTask != null) {
+ // Doesn't matter for completed tasks...
+ currentTask.cancel(false /* mayInterruptIfRunning */);
+ }
+ return currentTask;
+ }
+}
Propchange: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/ResettableTimer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: ace/trunk/org.apache.ace.agent/test/org/apache/ace/agent/testutil/SynchronousExecutorService.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent/test/org/apache/ace/agent/testutil/SynchronousExecutorService.java?rev=1521522&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.agent/test/org/apache/ace/agent/testutil/SynchronousExecutorService.java (added)
+++ ace/trunk/org.apache.ace.agent/test/org/apache/ace/agent/testutil/SynchronousExecutorService.java Tue Sep 10 15:15:45 2013
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.agent.testutil;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Provides a fake implementation of {@link ScheduledExecutorService} that does all work synchronously.
+ */
+public class SynchronousExecutorService implements ScheduledExecutorService {
+ @Override
+ public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
+ return false;
+ }
+
+ @Override
+ public void execute(Runnable command) {
+ command.run();
+ }
+
+ @Override
+ public