You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2011/08/14 23:02:24 UTC
svn commit: r1157667 - in /activemq/activemq-apollo/trunk:
apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/
apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/
apollo-broker/src/main/scala/org/apache/activemq/a...
Author: chirino
Date: Sun Aug 14 21:02:23 2011
New Revision: 1157667
URL: http://svn.apache.org/viewvc?rev=1157667&view=rev
Log:
Support pluggable connector and virtual host implementations. Drop the pluggable router implementation support since that's just a implementation detail of the pluggable virtual host.
Added:
activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/connector-factory.index
activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/virtual-host-factory.index
activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/AcceptingConnectorDTO.java
activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ConnectorTypeDTO.java
Removed:
activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ConnectorDTO.java
activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/RouterDTO.java
Modified:
activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Broker.scala
activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Connector.scala
activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Router.scala
activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/VirtualHost.scala
activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/transport/VMTransport.scala
activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/jaxb/XMLBrokerFactoryTest.scala
activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/BrokerPerfSupport.scala
activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/BrokerDTO.java
activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/VirtualHostDTO.java
activemq/activemq-apollo/trunk/apollo-dto/src/main/resources/org/apache/activemq/apollo/dto/jaxb.index
activemq/activemq-apollo/trunk/apollo-dto/src/test/java/org/apache/activemq/apollo/dto/XmlCodecTest.java
activemq/activemq-apollo/trunk/apollo-dto/src/test/resources/org/apache/activemq/apollo/dto/XmlCodecTest.xml
activemq/activemq-apollo/trunk/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala
activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala
activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/dto/XmlCodecTest.java
activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala
Added: activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/connector-factory.index
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/connector-factory.index?rev=1157667&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/connector-factory.index (added)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/connector-factory.index Sun Aug 14 21:02:23 2011
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+org.apache.activemq.apollo.broker.AcceptingConnectorFactory
Added: activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/virtual-host-factory.index
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/virtual-host-factory.index?rev=1157667&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/virtual-host-factory.index (added)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/resources/META-INF/services/org.apache.activemq.apollo/virtual-host-factory.index Sun Aug 14 21:02:23 2011
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+org.apache.activemq.apollo.broker.DefaultVirtualHostFactory
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Broker.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Broker.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Broker.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Broker.scala Sun Aug 14 21:02:23 2011
@@ -220,7 +220,7 @@ class Broker() extends BaseService {
rc
})
config.connectors.add({
- val rc = new ConnectorDTO
+ val rc = new AcceptingConnectorDTO()
rc.id = "default"
rc.bind = "tcp://0.0.0.0:0"
rc
@@ -380,28 +380,44 @@ class Broker() extends BaseService {
virtual_hosts_by_hostname.remove(ascii(name))
}
- host.update(config, tracker.task("update: "+host))
+ if( host.config.getClass == config.getClass ) {
+ host.update(config, tracker.task("update: "+host))
+ config.host_names.foreach { name =>
+ virtual_hosts_by_hostname += ascii(name) -> host
+ }
+ } else {
+ // The dto type changed.. so we have to re-create
+ val on_completed = tracker.task("recreate virtual host: "+id)
+ host.stop(^{
+ val host = VirtualHostFactory.create(this, config)
+ if( host == null ) {
+ console_log.warn("Could not create virtual host: "+config.id);
+ on_completed.run()
+ } else {
+ config.host_names.foreach { name =>
+ virtual_hosts_by_hostname += ascii(name) -> host
+ }
+ host.start(on_completed)
+ }
+ })
- config.host_names.foreach { name =>
- virtual_hosts_by_hostname += ascii(name) -> host
}
-
}
}
added.foreach { id=>
for( config <- host_config_by_id.get(id) ) {
-
- val host = new VirtualHost(this, config.id)
- host.config = config
- virtual_hosts += ascii(config.id) -> host
-
- // add all the host names of the virtual host to the virtual_hosts_by_hostname map..
- config.host_names.foreach { name =>
- virtual_hosts_by_hostname += ascii(name) -> host
+ val host = VirtualHostFactory.create(this, config)
+ if( host == null ) {
+ console_log.warn("Could not create virtual host: "+config.id);
+ } else {
+ virtual_hosts += ascii(config.id) -> host
+ // add all the host names of the virtual host to the virtual_hosts_by_hostname map..
+ config.host_names.foreach { name =>
+ virtual_hosts_by_hostname += ascii(name) -> host
+ }
+ tracker.start(host)
}
-
- tracker.start(host)
}
}
}
@@ -412,12 +428,13 @@ class Broker() extends BaseService {
}
- val connector_config_by_id = HashMap[String, ConnectorDTO]()
+ val connector_config_by_id = HashMap[String, ConnectorTypeDTO]()
config.connectors.foreach{ value =>
connector_config_by_id += value.id -> value
}
diff(connectors.keySet.toSet, connector_config_by_id.keySet.toSet) match { case (added, updated, removed) =>
+
removed.foreach { id =>
for( connector <- connectors.remove(id) ) {
tracker.stop(connector)
@@ -426,16 +443,34 @@ class Broker() extends BaseService {
updated.foreach { id=>
for( connector <- connectors.get(id); config <- connector_config_by_id.get(id) ) {
- connector.update(config, tracker.task("update: "+connector))
+ if( connector.config.getClass == config.getClass ) {
+ connector.update(config, tracker.task("update: "+connector))
+ } else {
+ // The dto type changed.. so we have to re-create the connector.
+ val on_completed = tracker.task("recreate connector: "+id)
+ connector.stop(^{
+ val connector = ConnectorFactory.create(this, config)
+ if( connector == null ) {
+ console_log.warn("Could not create connector: "+config.id);
+ on_completed.run()
+ } else {
+ connectors += config.id -> connector
+ connector.start(on_completed)
+ }
+ })
+ }
}
}
added.foreach { id=>
for( config <- connector_config_by_id.get(id) ) {
- val connector = new AcceptingConnector(this, config.id)
- connector.config = config
- connectors += config.id -> connector
- tracker.start(connector)
+ val connector = ConnectorFactory.create(this, config)
+ if( connector == null ) {
+ console_log.warn("Could not create connector: "+config.id);
+ } else {
+ connectors += config.id -> connector
+ tracker.start(connector)
+ }
}
}
}
@@ -463,6 +498,7 @@ class Broker() extends BaseService {
val service = CustomServiceFactory.create(this, new_dto)
if( service == null ) {
console_log.warn("Could not create service: "+new_dto.id);
+ task.run()
} else {
// start it again..
services += new_dto.id -> (new_dto, service)
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Connector.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Connector.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Connector.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Connector.scala Sun Aug 14 21:02:23 2011
@@ -18,13 +18,13 @@ package org.apache.activemq.apollo.broke
import org.fusesource.hawtdispatch._
import org.fusesource.hawtdispatch.{Dispatch}
-import org.apache.activemq.apollo.dto.{ConnectorDTO}
import protocol.{ProtocolFactory, Protocol}
import org.apache.activemq.apollo.transport._
import org.apache.activemq.apollo.util._
import org.apache.activemq.apollo.util.OptionSupport._
import java.net.SocketAddress
-
+import org.apache.activemq.apollo.util.{Log, Service, ClassFinder}
+import org.apache.activemq.apollo.dto._
/**
* <p>
@@ -40,12 +40,57 @@ trait Connector extends BaseService {
def broker:Broker
def id:String
def stopped(connection:BrokerConnection):Unit
- def config:ConnectorDTO
+ def config:ConnectorTypeDTO
def accepted:LongCounter
def connected:LongCounter
- def update(config: ConnectorDTO, on_complete:Runnable):Unit
+ def update(config: ConnectorTypeDTO, on_complete:Runnable):Unit
def socket_address:SocketAddress
+ def status:ServiceStatusDTO
+}
+
+/**
+ * <p>
+ * </p>
+ *
+ * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
+ */
+object ConnectorFactory {
+
+ trait Provider {
+ def create(broker:Broker, dto:ConnectorTypeDTO):Connector
+ }
+
+ val providers = new ClassFinder[Provider]("META-INF/services/org.apache.activemq.apollo/connector-factory.index",classOf[Provider])
+
+ def create(broker:Broker, dto:ConnectorTypeDTO):Connector = {
+ if( dto == null ) {
+ return null
+ }
+ providers.singletons.foreach { provider=>
+ val connector = provider.create(broker, dto)
+ if( connector!=null ) {
+ return connector;
+ }
+ }
+ return null
+ }
+}
+
+object AcceptingConnectorFactory extends ConnectorFactory.Provider with Log {
+ def create(broker: Broker, dto: ConnectorTypeDTO): Connector = dto match {
+ case dto:AcceptingConnectorDTO =>
+ if( dto.getClass != classOf[AcceptingConnectorDTO] ) {
+ // ignore sub classes of AcceptingConnectorDTO
+ null;
+ } else {
+ val rc = new AcceptingConnector(broker, dto.id)
+ rc.config = dto
+ rc
+ }
+ case _ =>
+ null
+ }
}
/**
@@ -60,7 +105,7 @@ class AcceptingConnector(val broker:Brok
override val dispatch_queue = broker.dispatch_queue
- var config:ConnectorDTO = new ConnectorDTO
+ var config = new AcceptingConnectorDTO
config.id = id
config.bind = "tcp://0.0.0.:0"
@@ -73,6 +118,20 @@ class AcceptingConnector(val broker:Brok
def socket_address = Option(transport_server).map(_.getSocketAddress).getOrElse(null)
+ def status = {
+ val result = new ConnectorStatusDTO
+ result.id = id.toString
+ result.state = service_state.toString
+ result.state_since = service_state.since
+ result.connection_counter = accepted.get
+ result.connected = connected.get
+ result.protocol = Option(config.protocol).getOrElse("any")
+ result.local_address = Option(socket_address).map(_.toString).getOrElse("any")
+ result
+ }
+
+
+
object BrokerAcceptListener extends TransportAcceptListener {
def onAcceptError(e: Exception): Unit = {
warn(e, "Error occured while accepting client connection.")
@@ -115,15 +174,15 @@ class AcceptingConnector(val broker:Brok
/**
*/
- def update(config: ConnectorDTO, on_completed:Runnable) = dispatch_queue {
+ def update(config: ConnectorTypeDTO, on_completed:Runnable) = dispatch_queue {
if ( !service_state.is_started || this.config == config ) {
- this.config = config
+ this.config = config.asInstanceOf[AcceptingConnectorDTO]
on_completed.run
} else {
// if the connector config is updated.. lets stop, apply config, then restart
// the connector.
stop(^{
- this.config = config
+ this.config = config.asInstanceOf[AcceptingConnectorDTO]
start(on_completed)
})
}
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Router.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Router.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Router.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/Router.scala Sun Aug 14 21:02:23 2011
@@ -50,37 +50,6 @@ trait Router extends Service {
}
/**
- * <p>
- * </p>
- *
- * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
- */
-object RouterFactory {
-
- trait Provider {
- def create(host:VirtualHost):Router
- }
-
- val providers = new ClassFinder[Provider]("META-INF/services/org.apache.activemq.apollo/router-factory.index", classOf[Provider])
-
- def create(host:VirtualHost):Router = {
- val config = host.config.router;
- if( config==null ) {
- return new LocalRouter(host)
- }
- providers.singletons.foreach { provider=>
- val rc = provider.create(host)
- if( rc!=null ) {
- return rc
- }
- }
- throw new IllegalArgumentException("Uknonwn router type: "+config.getClass)
- }
-
-}
-
-
-/**
* An object which produces deliveries to which allows new DeliveryConsumer
* object to bind so they can also receive those deliveries.
*
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/VirtualHost.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/VirtualHost.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/VirtualHost.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/VirtualHost.scala Sun Aug 14 21:02:23 2011
@@ -34,6 +34,51 @@ import org.apache.activemq.apollo.broker
import org.apache.activemq.apollo.dto._
/**
+ * <p>
+ * </p>
+ *
+ * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
+ */
+object VirtualHostFactory {
+
+ trait Provider {
+ def create(broker:Broker, dto:VirtualHostDTO):VirtualHost
+ }
+
+ val providers = new ClassFinder[Provider]("META-INF/services/org.apache.activemq.apollo/virtual-host-factory.index",classOf[Provider])
+
+ def create(broker:Broker, dto:VirtualHostDTO):VirtualHost = {
+ if( dto == null ) {
+ return null
+ }
+ providers.singletons.foreach { provider=>
+ val connector = provider.create(broker, dto)
+ if( connector!=null ) {
+ return connector;
+ }
+ }
+ return null
+ }
+}
+
+object DefaultVirtualHostFactory extends VirtualHostFactory.Provider with Log {
+
+ def create(broker: Broker, dto: VirtualHostDTO): VirtualHost = dto match {
+ case dto:VirtualHostDTO =>
+ if( dto.getClass != classOf[VirtualHostDTO] ) {
+ // ignore sub classes of AcceptingVirtualHostDTO
+ null;
+ } else {
+ val rc = new VirtualHost(broker, dto.id)
+ rc.config = dto
+ rc
+ }
+ case _ =>
+ null
+ }
+}
+
+/**
* @author <a href="http://hiramchirino.com">Hiram Chirino</a>
*/
object VirtualHost extends Log {
@@ -48,7 +93,7 @@ class VirtualHost(val broker: Broker, va
override val dispatch_queue:DispatchQueue = createQueue("virtual-host") // getGlobalQueue(DispatchPriority.HIGH).createQueue("virtual-host")
var config:VirtualHostDTO = _
- var router:Router = _
+ val router:Router = new LocalRouter(this)
var names:List[String] = Nil;
@@ -77,7 +122,7 @@ class VirtualHost(val broker: Broker, va
} else {
// in some cases we have to restart the virtual host..
- if( config.store != this.config.store || config.router != this.config.router) {
+ if( config.store != this.config.store ) {
stop(^{
this.config = config
start(on_completed)
@@ -117,10 +162,8 @@ class VirtualHost(val broker: Broker, va
}
override protected def _start(on_completed:Runnable):Unit = {
-
apply_update
- router = RouterFactory.create(this)
store = StoreFactory.create(config.store)
val tracker = new LoggingTracker("virtual host startup", console_log)
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/transport/VMTransport.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/transport/VMTransport.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/transport/VMTransport.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/transport/VMTransport.scala Sun Aug 14 21:02:23 2011
@@ -30,8 +30,7 @@ import org.apache.activemq.apollo.transp
import org.apache.activemq.apollo.transport.pipe.PipeTransportServer
import org.apache.activemq.apollo.util._
import java.lang.String
-import org.apache.activemq.apollo.dto.ConnectorDTO
-
+import org.apache.activemq.apollo.dto.{AcceptingConnectorDTO, ConnectorTypeDTO}
/**
* @author <a href="http://hiramchirino.com">Hiram Chirino</a>
@@ -128,7 +127,7 @@ class VMTransportFactory extends PipeTra
if (server == null && create) {
// This is the connector that the broker needs.
- val connector = new ConnectorDTO
+ val connector = new AcceptingConnectorDTO
connector.id = "vm"
connector.bind = "vm://" + name
@@ -143,7 +142,11 @@ class VMTransportFactory extends PipeTra
// Use the user specified config
broker = BrokerFactory.createBroker(brokerURI);
// we need to add in the connector if it was not in the config...
- if (broker.config.connectors.toList.filter(_.bind == connector.bind).isEmpty) {
+ val found = broker.config.connectors.toList.find { _ match {
+ case dto:AcceptingConnectorDTO=> dto.bind == connector.bind
+ case _ => false
+ }}
+ if (found.isEmpty) {
broker.config.connectors.add(connector)
}
}
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/jaxb/XMLBrokerFactoryTest.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/jaxb/XMLBrokerFactoryTest.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/jaxb/XMLBrokerFactoryTest.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/jaxb/XMLBrokerFactoryTest.scala Sun Aug 14 21:02:23 2011
@@ -18,6 +18,7 @@ package org.apache.activemq.apollo.broke
import org.apache.activemq.apollo.broker.BrokerFactory
import org.apache.activemq.apollo.util.FunSuiteSupport
+import org.apache.activemq.apollo.dto.AcceptingConnectorDTO
/**
* <p>
@@ -36,11 +37,11 @@ class XMLBrokerFactoryTest extends FunSu
}
expect("pipe://test1") {
- broker.config.connectors.get(0).bind
+ broker.config.connectors.get(0).asInstanceOf[AcceptingConnectorDTO].bind
}
expect("tcp://127.0.0.1:61616") {
- broker.config.connectors.get(1).bind
+ broker.config.connectors.get(1).asInstanceOf[AcceptingConnectorDTO].bind
}
expect(2) {
Modified: activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/BrokerPerfSupport.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/BrokerPerfSupport.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/BrokerPerfSupport.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/BrokerPerfSupport.scala Sun Aug 14 21:02:23 2011
@@ -27,7 +27,7 @@ import org.fusesource.hawtbuf.AsciiBuffe
import java.net.URL
import org.apache.activemq.apollo.util._
import collection.mutable.{ArrayBuffer, ListBuffer}
-import org.apache.activemq.apollo.dto.{DestinationDTO, BrokerDTO}
+import org.apache.activemq.apollo.dto.{AcceptingConnectorDTO, DestinationDTO, BrokerDTO}
/**
*
@@ -199,7 +199,7 @@ abstract class BrokerPerfSupport extends
def createBrokerConfig(name: String, bindURI: String, connectUri: String): BrokerDTO = {
val config = (new Broker).config
- val connector = config.connectors.get(0)
+ val connector = config.connectors.get(0).asInstanceOf[AcceptingConnectorDTO]
connector.bind = bindURI
connector.protocol = getBrokerProtocolName
Added: activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/AcceptingConnectorDTO.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/AcceptingConnectorDTO.java?rev=1157667&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/AcceptingConnectorDTO.java (added)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/AcceptingConnectorDTO.java Sun Aug 14 21:02:23 2011
@@ -0,0 +1,74 @@
+/**
+ * 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.activemq.apollo.dto;
+
+import javax.xml.bind.annotation.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
+ */
+@XmlRootElement(name = "connector")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class AcceptingConnectorDTO extends ConnectorTypeDTO {
+
+ /**
+ * The transport uri which it will accept connections on.
+ */
+ @XmlAttribute
+ public String bind;
+
+ /**
+ * The protocol that the transport will use.
+ */
+ @XmlAttribute
+ public String protocol;
+
+ /**
+ * A broker accepts connections via it's configured connectors.
+ */
+ @XmlElementRef
+ public List<ProtocolDTO> protocols = new ArrayList<ProtocolDTO>();
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof AcceptingConnectorDTO)) return false;
+ if (!super.equals(o)) return false;
+
+ AcceptingConnectorDTO that = (AcceptingConnectorDTO) o;
+
+ if (bind != null ? !bind.equals(that.bind) : that.bind != null)
+ return false;
+ if (protocol != null ? !protocol.equals(that.protocol) : that.protocol != null)
+ return false;
+ if (protocols != null ? !protocols.equals(that.protocols) : that.protocols != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (bind != null ? bind.hashCode() : 0);
+ result = 31 * result + (protocol != null ? protocol.hashCode() : 0);
+ result = 31 * result + (protocols != null ? protocols.hashCode() : 0);
+ return result;
+ }
+}
\ No newline at end of file
Modified: activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/BrokerDTO.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/BrokerDTO.java?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/BrokerDTO.java (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/BrokerDTO.java Sun Aug 14 21:02:23 2011
@@ -38,14 +38,14 @@ public class BrokerDTO {
/**
* A broker can service many virtual hosts.
*/
- @XmlElement(name="virtual_host")
+ @XmlElementRef
public List<VirtualHostDTO> virtual_hosts = new ArrayList<VirtualHostDTO>();
/**
* A broker accepts connections via it's configured connectors.
*/
- @XmlElement(name="connector")
- public List<ConnectorDTO> connectors = new ArrayList<ConnectorDTO>();
+ @XmlElementRef
+ public List<ConnectorTypeDTO> connectors = new ArrayList<ConnectorTypeDTO>();
/**
* The clients should use to connect to this
Added: activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ConnectorTypeDTO.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ConnectorTypeDTO.java?rev=1157667&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ConnectorTypeDTO.java (added)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/ConnectorTypeDTO.java Sun Aug 14 21:02:23 2011
@@ -0,0 +1,73 @@
+/**
+ * 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.activemq.apollo.dto;
+
+import org.codehaus.jackson.annotate.JsonTypeInfo;
+
+import javax.xml.bind.annotation.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ *
+ *
+ * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
+ */
+@XmlType (name = "connector_type")
+@XmlAccessorType(XmlAccessType.FIELD)
+@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
+abstract public class ConnectorTypeDTO extends ServiceDTO {
+
+ @XmlElement(name="acl")
+ public ConnectorAclDTO acl;
+
+ @XmlAttribute(name="connection_limit")
+ public Integer connection_limit;
+
+// /**
+// * To hold any other non-matching XML elements
+// */
+// @XmlAnyElement(lax=true)
+// public List<Object> other = new ArrayList<Object>();
+//
+// @Override
+// public boolean equals(Object o) {
+// if (this == o) return true;
+// if (!(o instanceof ConnectorTypeDTO)) return false;
+// if (!super.equals(o)) return false;
+//
+// ConnectorTypeDTO that = (ConnectorTypeDTO) o;
+//
+// if (acl != null ? !acl.equals(that.acl) : that.acl != null) return false;
+// if (connection_limit != null ? !connection_limit.equals(that.connection_limit) : that.connection_limit != null)
+// return false;
+// if (other != null ? !other.equals(that.other) : that.other != null)
+// return false;
+//
+// return true;
+// }
+//
+// @Override
+// public int hashCode() {
+// int result = super.hashCode();
+// result = 31 * result + (acl != null ? acl.hashCode() : 0);
+// result = 31 * result + (connection_limit != null ? connection_limit.hashCode() : 0);
+// result = 31 * result + (other != null ? other.hashCode() : 0);
+// return result;
+// }
+}
\ No newline at end of file
Modified: activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/VirtualHostDTO.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/VirtualHostDTO.java?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/VirtualHostDTO.java (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/VirtualHostDTO.java Sun Aug 14 21:02:23 2011
@@ -16,6 +16,8 @@
*/
package org.apache.activemq.apollo.dto;
+import org.codehaus.jackson.annotate.JsonTypeInfo;
+
import java.util.ArrayList;
import java.util.List;
@@ -26,6 +28,7 @@ import javax.xml.bind.annotation.*;
*/
@XmlRootElement(name = "virtual_host")
@XmlAccessorType(XmlAccessType.FIELD)
+@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
public class VirtualHostDTO extends ServiceDTO {
@XmlElement(name="host_name", required=true)
@@ -77,9 +80,6 @@ public class VirtualHostDTO extends Serv
@XmlElement(name="authentication")
public AuthenticationDTO authentication;
- @XmlElementRef
- public RouterDTO router;
-
@XmlElement(name="log_category")
public LogCategoryDTO log_category;
@@ -111,7 +111,6 @@ public class VirtualHostDTO extends Serv
if (queues != null ? !queues.equals(that.queues) : that.queues != null) return false;
if (regroup_connections != null ? !regroup_connections.equals(that.regroup_connections) : that.regroup_connections != null)
return false;
- if (router != null ? !router.equals(that.router) : that.router != null) return false;
if (store != null ? !store.equals(that.store) : that.store != null) return false;
if (topics != null ? !topics.equals(that.topics) : that.topics != null) return false;
@@ -131,7 +130,6 @@ public class VirtualHostDTO extends Serv
result = 31 * result + (regroup_connections != null ? regroup_connections.hashCode() : 0);
result = 31 * result + (acl != null ? acl.hashCode() : 0);
result = 31 * result + (authentication != null ? authentication.hashCode() : 0);
- result = 31 * result + (router != null ? router.hashCode() : 0);
result = 31 * result + (log_category != null ? log_category.hashCode() : 0);
result = 31 * result + (other != null ? other.hashCode() : 0);
return result;
Modified: activemq/activemq-apollo/trunk/apollo-dto/src/main/resources/org/apache/activemq/apollo/dto/jaxb.index
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/resources/org/apache/activemq/apollo/dto/jaxb.index?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/resources/org/apache/activemq/apollo/dto/jaxb.index (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/resources/org/apache/activemq/apollo/dto/jaxb.index Sun Aug 14 21:02:23 2011
@@ -17,7 +17,7 @@
BrokerDTO
BrokerStatusDTO
ConnectionStatusDTO
-ConnectorDTO
+AcceptingConnectorDTO
ConnectorStatusDTO
TopicStatusDTO
EntryStatusDTO
Modified: activemq/activemq-apollo/trunk/apollo-dto/src/test/java/org/apache/activemq/apollo/dto/XmlCodecTest.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/test/java/org/apache/activemq/apollo/dto/XmlCodecTest.java?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/test/java/org/apache/activemq/apollo/dto/XmlCodecTest.java (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/test/java/org/apache/activemq/apollo/dto/XmlCodecTest.java Sun Aug 14 21:02:23 2011
@@ -55,6 +55,10 @@ public class XmlCodecTest {
assertTrue(dto.acl.admins.contains(new PrincipalDTO("hiram")));
assertTrue(dto.acl.admins.contains(new PrincipalDTO("james")));
assertTrue(dto.acl.admins.contains(new PrincipalDTO("admins", "org.apache.activemq.jaas.GroupPrincipal")));
+
+ AcceptingConnectorDTO connector = (AcceptingConnectorDTO)dto.connectors.get(0);
+ assertNotNull(connector);
+
}
@@ -68,7 +72,7 @@ public class XmlCodecTest {
host.host_names.add("example.com");
broker.virtual_hosts.add(host);
- ConnectorDTO connector = new ConnectorDTO();
+ AcceptingConnectorDTO connector = new AcceptingConnectorDTO();
connector.id = "port-61616";
connector.bind = "tcp://0.0.0.0:61616";
broker.connectors.add(connector);
Modified: activemq/activemq-apollo/trunk/apollo-dto/src/test/resources/org/apache/activemq/apollo/dto/XmlCodecTest.xml
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/test/resources/org/apache/activemq/apollo/dto/XmlCodecTest.xml?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/test/resources/org/apache/activemq/apollo/dto/XmlCodecTest.xml (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/test/resources/org/apache/activemq/apollo/dto/XmlCodecTest.xml Sun Aug 14 21:02:23 2011
@@ -36,4 +36,6 @@
<topic id="topic1"/>
+ <connector id="tcp" bind="tcp://0.0.0.0:61613"/>
+
</broker>
Modified: activemq/activemq-apollo/trunk/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-openwire/src/main/scala/org/apache/activemq/apollo/openwire/OpenwireProtocolHandler.scala Sun Aug 14 21:02:23 2011
@@ -40,7 +40,7 @@ import tcp.TcpTransport
import codec.OpenWireFormat
import command._
import org.apache.activemq.apollo.openwire.dto.{OpenwireConnectionStatusDTO,OpenwireDTO}
-import org.apache.activemq.apollo.dto.{TopicDestinationDTO, DurableSubscriptionDestinationDTO, DestinationDTO}
+import org.apache.activemq.apollo.dto.{AcceptingConnectorDTO, TopicDestinationDTO, DurableSubscriptionDestinationDTO, DestinationDTO}
object OpenwireProtocolHandler extends Log {
@@ -123,7 +123,8 @@ class OpenwireProtocolHandler extends Pr
import collection.JavaConversions._
codec = connection.transport.getProtocolCodec.asInstanceOf[OpenwireCodec]
- config = connection.connector.config.protocols.find( _.isInstanceOf[OpenwireDTO]).map(_.asInstanceOf[OpenwireDTO]).getOrElse(new OpenwireDTO)
+ var connector_config = connection.connector.config.asInstanceOf[AcceptingConnectorDTO]
+ config = connector_config.protocols.find( _.isInstanceOf[OpenwireDTO]).map(_.asInstanceOf[OpenwireDTO]).getOrElse(new OpenwireDTO)
// protocol_filters = ProtocolFilter.create_filters(config.protocol_filters.toList, this)
//
Modified: activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala Sun Aug 14 21:02:23 2011
@@ -496,7 +496,8 @@ class StompProtocolHandler extends Proto
import collection.JavaConversions._
codec = connection.transport.getProtocolCodec.asInstanceOf[StompCodec]
- config = connection.connector.config.protocols.find( _.isInstanceOf[StompDTO]).map(_.asInstanceOf[StompDTO]).getOrElse(new StompDTO)
+ val connector_config = connection.connector.config.asInstanceOf[AcceptingConnectorDTO]
+ config = connector_config.protocols.find( _.isInstanceOf[StompDTO]).map(_.asInstanceOf[StompDTO]).getOrElse(new StompDTO)
protocol_filters = ProtocolFilter.create_filters(config.protocol_filters.toList, this)
Modified: activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/dto/XmlCodecTest.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/dto/XmlCodecTest.java?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/dto/XmlCodecTest.java (original)
+++ activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/dto/XmlCodecTest.java Sun Aug 14 21:02:23 2011
@@ -42,7 +42,7 @@ public class XmlCodecTest {
assertNotNull(dto);
assertEquals(1, dto.connectors.size());
- ConnectorDTO connector = dto.connectors.get(0);
+ AcceptingConnectorDTO connector = (AcceptingConnectorDTO)dto.connectors.get(0);
assertEquals(1, connector.protocols.size());
ProtocolDTO stomp = connector.protocols.get(0);
assertTrue(stomp instanceof StompDTO);
Modified: activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala?rev=1157667&r1=1157666&r2=1157667&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala Sun Aug 14 21:02:23 2011
@@ -565,34 +565,22 @@ case class BrokerResource() extends Reso
with_broker { broker =>
monitoring(broker) {
val records = broker.connectors.values.map { value =>
- Success(status(value))
+ Success(value.status)
}
- FutureResult(narrow(classOf[ConnectorStatusDTO], records, f, q, p, ps, o))
+ FutureResult(narrow(classOf[ServiceStatusDTO], records, f, q, p, ps, o))
}
}
}
@GET @Path("connectors/{id}")
- def connector(@PathParam("id") id : String):ConnectorStatusDTO = {
+ def connector(@PathParam("id") id : String):ServiceStatusDTO = {
with_connector(id) { connector =>
monitoring(connector.broker) {
- status(connector)
+ connector.status
}
}
}
- def status(connector: Connector): ConnectorStatusDTO = {
- val result = new ConnectorStatusDTO
- result.id = connector.id.toString
- result.state = connector.service_state.toString
- result.state_since = connector.service_state.since
- result.connection_counter = connector.accepted.get
- result.connected = connector.connected.get
- result.protocol = Option(connector.config.protocol).getOrElse("any")
- result.local_address = Option(connector.socket_address).map(_.toString).getOrElse("any")
- result
- }
-
@POST @Path("connectors/{id}/action/stop")
@Produces(Array("application/json", "application/xml","text/xml"))
def post_connector_stop(@PathParam("id") id : String):Unit = unwrap_future_result {