mirror of
https://github.com/apache/archiva.git
synced 2025-02-07 02:29:23 +00:00
Adding archiva-event module to database branch.
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches@694629 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a4e0310100
commit
0a6b646b0c
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>archiva-base</artifactId>
|
||||||
|
<version>1.2-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>archiva-event</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<version>1.2-SNAPSHOT</version>
|
||||||
|
<name>Archiva Base :: Event</name>
|
||||||
|
</project>
|
@ -0,0 +1,117 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.BlockingQueue;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple Async Event Bus implementation
|
||||||
|
*
|
||||||
|
* @author jdumay
|
||||||
|
*/
|
||||||
|
public class AsynchronousEventBus implements EventBus
|
||||||
|
{
|
||||||
|
private final Set<EventObserver> observers = Collections.synchronizedSet(new HashSet());
|
||||||
|
|
||||||
|
private final BlockingQueue<Event> events = new LinkedBlockingQueue<Event>();
|
||||||
|
|
||||||
|
private final Thread workerThread;
|
||||||
|
|
||||||
|
private final int threads;
|
||||||
|
|
||||||
|
public AsynchronousEventBus(int threads)
|
||||||
|
{
|
||||||
|
this.threads = threads;
|
||||||
|
workerThread = new Thread(new WorkerRunnable());
|
||||||
|
workerThread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void emit(EventEmitter emitter, EventMessage message)
|
||||||
|
{
|
||||||
|
events.offer(new Event(emitter, message));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void subscribe(EventObserver observer)
|
||||||
|
{
|
||||||
|
observers.add(observer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsubscribe(EventObserver observer)
|
||||||
|
{
|
||||||
|
observers.remove(observer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<EventObserver> getObservers() {
|
||||||
|
return new HashSet<EventObserver>(observers);
|
||||||
|
}
|
||||||
|
|
||||||
|
class WorkerRunnable implements Runnable
|
||||||
|
{
|
||||||
|
private final ExecutorService service;
|
||||||
|
|
||||||
|
public WorkerRunnable()
|
||||||
|
{
|
||||||
|
service = Executors.newFixedThreadPool(threads);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
dequeueAndExecute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dequeueAndExecute()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final Event event = events.take();
|
||||||
|
for (final EventObserver observer : observers)
|
||||||
|
{
|
||||||
|
service.execute(new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
observer.observe(event);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
//log me
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encaptulation of both the EventEmitter and the EventMessage
|
||||||
|
* to represent a single event
|
||||||
|
*/
|
||||||
|
public final class Event
|
||||||
|
{
|
||||||
|
private final EventEmitter emitter;
|
||||||
|
|
||||||
|
private final EventMessage message;
|
||||||
|
|
||||||
|
public Event(EventEmitter emitter, EventMessage message)
|
||||||
|
{
|
||||||
|
this.emitter = emitter;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Emitter who emitted the Event
|
||||||
|
* @return emitter
|
||||||
|
*/
|
||||||
|
public EventEmitter getEmitter()
|
||||||
|
{
|
||||||
|
return emitter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the EventMessage
|
||||||
|
* @return message
|
||||||
|
*/
|
||||||
|
public EventMessage getMessage()
|
||||||
|
{
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows implementer to emit to, subscribe and unsubscribe EventObservers
|
||||||
|
*/
|
||||||
|
public interface EventBus
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Emit a event
|
||||||
|
* @param emitter
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
void emit(EventEmitter emitter, EventMessage message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows the subscriber to receive messages from this event bus
|
||||||
|
* @param observer
|
||||||
|
*/
|
||||||
|
void subscribe(EventObserver observer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the observer from receiving any messages
|
||||||
|
* @param observer
|
||||||
|
*/
|
||||||
|
void unsubscribe(EventObserver observer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the set of registered EventObservers
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Set<EventObserver> getObservers();
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface EventEmitter
|
||||||
|
{
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface EventMessage
|
||||||
|
{
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface EventObserver
|
||||||
|
{
|
||||||
|
void observe(Event event);
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class AsynchronousEventBusTest extends TestCase
|
||||||
|
{
|
||||||
|
public void testSubscribeUnsubscribe() throws Exception
|
||||||
|
{
|
||||||
|
AsynchronousEventBus bus = new AsynchronousEventBus(1);
|
||||||
|
MockObserver observer = new MockObserver();
|
||||||
|
|
||||||
|
assertEquals(0, bus.getObservers().size());
|
||||||
|
|
||||||
|
bus.subscribe(observer);
|
||||||
|
assertTrue(bus.getObservers().contains(observer));
|
||||||
|
|
||||||
|
bus.unsubscribe(observer);
|
||||||
|
assertFalse(bus.getObservers().contains(bus));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllEventsAreObserved() throws Exception
|
||||||
|
{
|
||||||
|
AsynchronousEventBus bus = new AsynchronousEventBus(1);
|
||||||
|
MockObserver observer = new MockObserver();
|
||||||
|
bus.subscribe(observer);
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
bus.emit(new EventEmitter() {}, new EventMessage() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
while (observer.observedEvents.size() != 10)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(10, observer.observedEvents.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
class MockObserver implements EventObserver
|
||||||
|
{
|
||||||
|
final List<Event> observedEvents = Collections.synchronizedList(new ArrayList());
|
||||||
|
|
||||||
|
public void observe(Event event)
|
||||||
|
{
|
||||||
|
observedEvents.add(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package org.apache.archiva.event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class EventTest extends TestCase
|
||||||
|
{
|
||||||
|
public void testEvent()
|
||||||
|
{
|
||||||
|
EventEmitter emitter = new EventEmitter() {};
|
||||||
|
EventMessage message = new EventMessage() {};
|
||||||
|
Event event = new Event(emitter, message);
|
||||||
|
|
||||||
|
assertEquals(emitter, event.getEmitter());
|
||||||
|
assertEquals(message, event.getMessage());
|
||||||
|
}
|
||||||
|
}
|
@ -42,5 +42,6 @@
|
|||||||
<module>archiva-transaction</module>
|
<module>archiva-transaction</module>
|
||||||
<module>archiva-artifact-converter</module>
|
<module>archiva-artifact-converter</module>
|
||||||
<module>archiva-converter</module>
|
<module>archiva-converter</module>
|
||||||
|
<module>archiva-event</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user