You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/07/18 22:19:04 UTC
svn commit: r1504633 - in /qpid/proton/trunk:
proton-c/bindings/java/src/main/java/org/apache/qpid/proton/
proton-j/proton-api/src/main/java/org/apache/qpid/proton/
proton-j/proton-api/src/main/resources/
proton-j/proton/src/main/java/org/apache/qpid/p...
Author: rgodfrey
Date: Thu Jul 18 20:19:04 2013
New Revision: 1504633
URL: http://svn.apache.org/r1504633
Log:
PROTON-359 : [Proton-j] Create a simple entry point for creating all Proton entities
Added:
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/Proton.java
Modified:
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/TestDecoder.java
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
Modified: qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/TestDecoder.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/TestDecoder.java?rev=1504633&r1=1504632&r2=1504633&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/TestDecoder.java (original)
+++ qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/TestDecoder.java Thu Jul 18 20:19:04 2013
@@ -18,8 +18,6 @@
*/
package org.apache.qpid.proton;
-import org.apache.qpid.proton.TestDecoder;
-import org.apache.qpid.proton.ProtonFactoryLoader;
import org.apache.qpid.proton.amqp.Binary;
import org.apache.qpid.proton.amqp.Decimal128;
import org.apache.qpid.proton.amqp.Decimal32;
@@ -30,9 +28,7 @@ import org.apache.qpid.proton.amqp.Unsig
import org.apache.qpid.proton.amqp.UnsignedLong;
import org.apache.qpid.proton.amqp.UnsignedShort;
import org.apache.qpid.proton.codec.Data;
-import org.apache.qpid.proton.codec.DataFactory;
-import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Date;
import java.util.List;
@@ -50,9 +46,7 @@ public class TestDecoder {
private Data data;
TestDecoder(byte[] encoded) {
- DataFactory df =
- new ProtonFactoryLoader<DataFactory>(DataFactory.class).loadFactory();
- data = df.createData(encoded.length);
+ data = Proton.data(encoded.length);
int offset = 0;
while (offset < encoded.length) {
ByteBuffer buffer = ByteBuffer.wrap(encoded, offset, encoded.length-offset);
Added: qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/Proton.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/Proton.java?rev=1504633&view=auto
==============================================================================
--- qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/Proton.java (added)
+++ qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/Proton.java Thu Jul 18 20:19:04 2013
@@ -0,0 +1,243 @@
+/*
+ *
+ * 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.qpid.proton;
+
+import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.qpid.proton.amqp.messaging.ApplicationProperties;
+import org.apache.qpid.proton.amqp.messaging.DeliveryAnnotations;
+import org.apache.qpid.proton.amqp.messaging.Footer;
+import org.apache.qpid.proton.amqp.messaging.Header;
+import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
+import org.apache.qpid.proton.amqp.messaging.Properties;
+import org.apache.qpid.proton.amqp.messaging.Section;
+import org.apache.qpid.proton.codec.Data;
+import org.apache.qpid.proton.codec.DataFactory;
+import org.apache.qpid.proton.driver.Driver;
+import org.apache.qpid.proton.driver.DriverFactory;
+import org.apache.qpid.proton.engine.Connection;
+import org.apache.qpid.proton.engine.EngineFactory;
+import org.apache.qpid.proton.engine.SslDomain;
+import org.apache.qpid.proton.engine.SslPeerDetails;
+import org.apache.qpid.proton.engine.Transport;
+import org.apache.qpid.proton.message.Message;
+import org.apache.qpid.proton.message.MessageFactory;
+import org.apache.qpid.proton.messenger.Messenger;
+import org.apache.qpid.proton.messenger.MessengerFactory;
+
+public final class Proton
+{
+
+ public static ProtonFactory.ImplementationType ANY = ProtonFactory.ImplementationType.ANY;
+ public static ProtonFactory.ImplementationType PROTON_C = ProtonFactory.ImplementationType.PROTON_C;
+ public static ProtonFactory.ImplementationType PROTON_J = ProtonFactory.ImplementationType.PROTON_J;
+
+
+ private static final MessengerFactory MESSENGER_FACTORY =
+ (new ProtonFactoryLoader<MessengerFactory>(MessengerFactory.class)).loadFactory();
+ private static final DriverFactory DRIVER_FACTORY =
+ (new ProtonFactoryLoader<DriverFactory>(DriverFactory.class)).loadFactory();
+ private static final MessageFactory MESSAGE_FACTORY =
+ (new ProtonFactoryLoader<MessageFactory>(MessageFactory.class)).loadFactory();
+ private static final DataFactory DATA_FACTORY =
+ (new ProtonFactoryLoader<DataFactory>(DataFactory.class)).loadFactory();
+ private static final EngineFactory ENGINE_FACTORY =
+ (new ProtonFactoryLoader<EngineFactory>(EngineFactory.class)).loadFactory();
+
+ private static final ProtonFactory.ImplementationType DEFAULT_IMPLEMENTATION =
+ ProtonFactoryLoader.getImpliedImplementationType();
+
+ private Proton()
+ {
+ }
+
+ public static ProtonFactory.ImplementationType getDefaultImplementationType()
+ {
+ return DEFAULT_IMPLEMENTATION;
+ }
+
+ public static Connection connection()
+ {
+ return ENGINE_FACTORY.createConnection();
+ }
+
+ public static Transport transport()
+ {
+ return ENGINE_FACTORY.createTransport();
+ }
+
+ public static SslDomain sslDomain()
+ {
+ return ENGINE_FACTORY.createSslDomain();
+ }
+
+ public static SslPeerDetails sslPeerDetails(String hostname, int port)
+ {
+ return ENGINE_FACTORY.createSslPeerDetails(hostname, port);
+ }
+
+ public static Data data(long capacity)
+ {
+ return DATA_FACTORY.createData(capacity);
+ }
+
+ public static Message message()
+ {
+ return MESSAGE_FACTORY.createMessage();
+ }
+
+ public static Message message(Header header,
+ DeliveryAnnotations deliveryAnnotations, MessageAnnotations messageAnnotations,
+ Properties properties, ApplicationProperties applicationProperties,
+ Section body, Footer footer)
+ {
+ return MESSAGE_FACTORY.createMessage(header, deliveryAnnotations,
+ messageAnnotations, properties,
+ applicationProperties, body, footer);
+ }
+
+
+ public static Messenger messenger()
+ {
+ return MESSENGER_FACTORY.createMessenger();
+ }
+
+ public static Messenger messenger(String name)
+ {
+ return MESSENGER_FACTORY.createMessenger(name);
+ }
+
+ public static Driver driver() throws IOException
+ {
+ return DRIVER_FACTORY.createDriver();
+ }
+
+
+
+ public static Connection connection(ProtonFactory.ImplementationType implementation)
+ {
+ return getEngineFactory(implementation).createConnection();
+ }
+
+ public static Transport transport(ProtonFactory.ImplementationType implementation)
+ {
+ return getEngineFactory(implementation).createTransport();
+ }
+
+ public static SslDomain sslDomain(ProtonFactory.ImplementationType implementation)
+ {
+ return getEngineFactory(implementation).createSslDomain();
+ }
+
+ public static SslPeerDetails sslPeerDetails(ProtonFactory.ImplementationType implementation, String hostname, int port)
+ {
+ return getEngineFactory(implementation).createSslPeerDetails(hostname, port);
+ }
+
+ public static Data data(ProtonFactory.ImplementationType implementation, long capacity)
+ {
+ return getDataFactory(implementation).createData(capacity);
+ }
+
+ public static Message message(ProtonFactory.ImplementationType implementation)
+ {
+ return getMessageFactory(implementation).createMessage();
+ }
+
+ public static Message message(ProtonFactory.ImplementationType implementation, Header header,
+ DeliveryAnnotations deliveryAnnotations, MessageAnnotations messageAnnotations,
+ Properties properties, ApplicationProperties applicationProperties,
+ Section body, Footer footer)
+ {
+ return getMessageFactory(implementation).createMessage(header, deliveryAnnotations,
+ messageAnnotations, properties,
+ applicationProperties, body, footer);
+ }
+
+
+ public static Messenger messenger(ProtonFactory.ImplementationType implementation)
+ {
+ return getMessengerFactory(implementation).createMessenger();
+ }
+
+ public static Messenger messenger(ProtonFactory.ImplementationType implementation, String name)
+ {
+ return getMessengerFactory(implementation).createMessenger(name);
+ }
+
+ public static Driver driver(ProtonFactory.ImplementationType implementation) throws IOException
+ {
+ return getDriverFactory(implementation).createDriver();
+ }
+
+
+ private static final ConcurrentMap<ProtonFactory.ImplementationType, EngineFactory> _engineFactories =
+ new ConcurrentHashMap<ProtonFactory.ImplementationType, EngineFactory>();
+ private static final ConcurrentMap<ProtonFactory.ImplementationType, MessageFactory> _messageFactories =
+ new ConcurrentHashMap<ProtonFactory.ImplementationType, MessageFactory>();
+ private static final ConcurrentMap<ProtonFactory.ImplementationType, MessengerFactory> _messengerFactories =
+ new ConcurrentHashMap<ProtonFactory.ImplementationType, MessengerFactory>();
+ private static final ConcurrentMap<ProtonFactory.ImplementationType, DataFactory> _dataFactories =
+ new ConcurrentHashMap<ProtonFactory.ImplementationType, DataFactory>();
+ private static final ConcurrentMap<ProtonFactory.ImplementationType, DriverFactory> _driverFactories =
+ new ConcurrentHashMap<ProtonFactory.ImplementationType, DriverFactory>();
+
+ private static EngineFactory getEngineFactory(ProtonFactory.ImplementationType implementation)
+ {
+ return getFactory(EngineFactory.class, implementation, _engineFactories);
+ }
+
+ private static MessageFactory getMessageFactory(ProtonFactory.ImplementationType implementation)
+ {
+ return getFactory(MessageFactory.class, implementation, _messageFactories);
+ }
+
+ private static MessengerFactory getMessengerFactory(ProtonFactory.ImplementationType implementation)
+ {
+ return getFactory(MessengerFactory.class, implementation, _messengerFactories);
+ }
+
+ private static DriverFactory getDriverFactory(ProtonFactory.ImplementationType implementation)
+ {
+ return getFactory(DriverFactory.class, implementation, _driverFactories);
+ }
+
+ private static DataFactory getDataFactory(ProtonFactory.ImplementationType implementation)
+ {
+ return getFactory(DataFactory.class, implementation, _dataFactories);
+ }
+
+ private static <T extends ProtonFactory> T getFactory(Class<T> factoryClass, ProtonFactory.ImplementationType implementation,
+ ConcurrentMap<ProtonFactory.ImplementationType, T> factories)
+ {
+ T factory = factories.get(implementation);
+ if(factory == null)
+ {
+ factories.putIfAbsent(implementation, (new ProtonFactoryLoader<T>(factoryClass,implementation)).loadFactory());
+ factory = factories.get(implementation);
+
+ }
+ return factory;
+ }
+
+
+}
Modified: qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java?rev=1504633&r1=1504632&r2=1504633&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java (original)
+++ qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java Thu Jul 18 20:19:04 2013
@@ -54,7 +54,7 @@ public class ProtonFactoryLoader<C exten
this(factoryInterface, getImpliedImplementationType());
}
- private static ImplementationType getImpliedImplementationType()
+ static ImplementationType getImpliedImplementationType()
{
String implementationTypeFromSystemProperty = System.getProperty(IMPLEMENTATION_TYPE_PROPERTY);
if(implementationTypeFromSystemProperty != null)
Modified: qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py?rev=1504633&r1=1504632&r2=1504633&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py (original)
+++ qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py Thu Jul 18 20:19:04 2013
@@ -23,18 +23,18 @@ try:
except NameError:
bytes = str
-from org.apache.qpid.proton import ProtonFactoryLoader, ProtonUnsupportedOperationException
+from org.apache.qpid.proton import Proton, ProtonUnsupportedOperationException
from org.apache.qpid.proton import InterruptException as Interrupt
from org.apache.qpid.proton.engine import \
- EngineFactory, Transport as JTransport, Sender as JSender, Receiver as JReceiver, \
+ Transport as JTransport, Sender as JSender, Receiver as JReceiver, \
Sasl, SslDomain as JSslDomain, \
EndpointState, TransportException
from org.apache.qpid.proton.message import \
- MessageFormat, MessageFactory, Message as JMessage
+ MessageFormat, Message as JMessage
from org.apache.qpid.proton.codec import \
- DataFactory, Data as JData
-from org.apache.qpid.proton.messenger import MessengerFactory, MessengerException, Status
+ Data as JData
+from org.apache.qpid.proton.messenger import MessengerException, Status
from org.apache.qpid.proton.amqp.transport import ErrorCondition, SenderSettleMode, ReceiverSettleMode
from org.apache.qpid.proton.amqp.messaging import Source, Target, Accepted, \
Rejected, Received, Modified, Released, AmqpValue
@@ -74,15 +74,9 @@ STATUSES = {
MANUAL = "MANUAL"
AUTOMATIC = "AUTOMATIC"
-protonFactoryLoader = ProtonFactoryLoader()
-engineFactory = protonFactoryLoader.loadFactory(EngineFactory)
-messageFactory = protonFactoryLoader.loadFactory(MessageFactory)
-messengerFactory = protonFactoryLoader.loadFactory(MessengerFactory)
-dataFactory = protonFactoryLoader.loadFactory(DataFactory)
-
API_LANGUAGE = "Java"
IMPLEMENTATION_LANGUAGE = "C"
-if engineFactory.getImplementationType().name() == "PROTON_J":
+if Proton.getDefaultImplementationType().name() == "PROTON_J":
IMPLEMENTATION_LANGUAGE = "Java"
@@ -202,7 +196,7 @@ class Connection(Endpoint):
def __init__(self, _impl=None):
Endpoint.__init__(self)
- self.impl = _impl or engineFactory.createConnection()
+ self.impl = _impl or Proton.connection()
self.desired_capabilities = None
self.offered_capabilities = None
self.properties = None
@@ -709,7 +703,7 @@ class Transport(object):
TRACE_DRV = 4
def __init__(self):
- self.impl = engineFactory.createTransport()
+ self.impl = Proton.transport()
def trace(self, mask):
# XXX: self.impl.trace(mask)
@@ -889,7 +883,7 @@ class Data(object):
MAP = JData.DataType.MAP;
def __init__(self, capacity=16):
- self._data = dataFactory.createData(capacity)
+ self._data = Proton.data(capacity)
def __del__(self):
if hasattr(self, "_data"):
@@ -1251,9 +1245,9 @@ class Messenger(object):
def __init__(self, name=None):
if name:
- self.impl = messengerFactory.createMessenger(name)
+ self.impl = Proton.messenger(name)
else:
- self.impl = messengerFactory.createMessenger()
+ self.impl = Proton.messenger()
def route(self, *args, **kwargs):
raise Skipped()
@@ -1367,7 +1361,7 @@ class Message(object):
DEFAULT_PRIORITY = JMessage.DEFAULT_PRIORITY
def __init__(self):
- self.impl = messageFactory.createMessage()
+ self.impl = Proton.message()
def clear(self):
self.impl.clear()
@@ -1598,7 +1592,7 @@ class SSLDomain(object):
def __init__(self, mode):
try:
- self._domain = engineFactory.createSslDomain()
+ self._domain = Proton.sslDomain()
except NoClassDefFoundError, e:
raise SSLUnavailable()
self._domain.init(mode)
@@ -1622,7 +1616,7 @@ class SSLDomain(object):
class SSLSessionDetails(object):
def __init__(self, session_id):
- self._session_details = engineFactory.createSslPeerDetails(session_id, 1)
+ self._session_details = Proton.sslPeerDetails(session_id, 1)
class SSL(object):
Modified: qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java?rev=1504633&r1=1504632&r2=1504633&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java (original)
+++ qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java Thu Jul 18 20:19:04 2013
@@ -28,6 +28,7 @@ import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.qpid.proton.Proton;
import org.apache.qpid.proton.ProtonFactoryLoader;
import org.apache.qpid.proton.InterruptException;
import org.apache.qpid.proton.TimeoutException;
@@ -58,8 +59,6 @@ import org.apache.qpid.proton.amqp.Binar
public class MessengerImpl implements Messenger
{
- @SuppressWarnings("rawtypes")
- private static ProtonFactoryLoader protonFactoryLoader = new ProtonFactoryLoader();
private static final EnumSet<EndpointState> UNINIT = EnumSet.of(EndpointState.UNINITIALIZED);
private static final EnumSet<EndpointState> ACTIVE = EnumSet.of(EndpointState.ACTIVE);
@@ -68,9 +67,6 @@ public class MessengerImpl implements Me
private final Logger _logger = Logger.getLogger("proton.messenger");
private final String _name;
- private final EngineFactory _engineFactory;
- private final DriverFactory _driverFactory;
- private final MessageFactory _messageFactory;
private long _timeout = -1;
private boolean _blocking = true;
private long _nextTag = 1;
@@ -99,19 +95,7 @@ public class MessengerImpl implements Me
*/
@Deprecated public MessengerImpl(String name)
{
- this(name, defaultEngineFactory(), defaultDriverFactory(), defaultMessageFactory());
- }
-
- /**
- * @deprecated This constructor's visibility will be reduced to the default scope in a future release.
- * Client code outside this module should use a {@link MessengerFactory} instead
- */
- @Deprecated public MessengerImpl(String name, EngineFactory engineFactory, DriverFactory driverFactory, MessageFactory messageFactory)
- {
_name = name;
- _engineFactory = engineFactory;
- _driverFactory = driverFactory;
- _messageFactory = messageFactory;
}
public void setTimeout(long timeInMillis)
@@ -136,7 +120,7 @@ public class MessengerImpl implements Me
public void start() throws IOException
{
- _driver = _driverFactory.createDriver();
+ _driver = Proton.driver();
}
public void stop()
@@ -277,7 +261,7 @@ public class MessengerImpl implements Me
{
_logger.log(Level.FINE, "Readable delivery found: " + delivery);
int size = read((Receiver) delivery.getLink());
- Message message = _messageFactory.createMessage();
+ Message message = Proton.message();
message.decode(_buffer, 0, size);
delivery.getLink().advance();
_incoming.add(delivery);
@@ -459,7 +443,7 @@ public class MessengerImpl implements Me
{
_worked = true;
Connector<?> c = l.accept();
- Connection connection = _engineFactory.createConnection();
+ Connection connection = Proton.connection();
connection.setContainer(_name);
c.setConnection(connection);
//TODO: SSL and full SASL
@@ -869,7 +853,7 @@ public class MessengerImpl implements Me
{
Connector<?> connector = _driver.createConnector(host, port, null);
_logger.log(Level.FINE, "Connecting to " + host + ":" + port);
- connection = _engineFactory.createConnection();
+ connection = Proton.connection();
connection.setContainer(_name);
connection.setHostname(host);
connection.setContext(service);
@@ -1049,24 +1033,6 @@ public class MessengerImpl implements Me
else return 5672;
}
- @SuppressWarnings("unchecked")
- private static EngineFactory defaultEngineFactory()
- {
- return (EngineFactory) protonFactoryLoader.loadFactory(EngineFactory.class);
- }
-
- @SuppressWarnings("unchecked")
- private static DriverFactory defaultDriverFactory()
- {
- return (DriverFactory) protonFactoryLoader.loadFactory(DriverFactory.class);
- }
-
- @SuppressWarnings("unchecked")
- private static MessageFactory defaultMessageFactory()
- {
- return (MessageFactory) protonFactoryLoader.loadFactory(MessageFactory.class);
- }
-
@Override
public String toString()
{
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org