Azure Service Bus Cloud Connector

The Microsoft Azure Service Bus allows code that runs both outside and inside Azure to communicate with Azure.

In order to connect to Azure, the AzureSBRAR-0.1.0-SNAPSHOT.rar has to be deployed as shown in the Installing a connector section of the Cloud Connectors overview.

In order to make use of this connector in an application, the following maven dependency is needed:

<dependency>
  <groupId>fish.payara.cloud.connectors</groupId>
  <artifactId>AzureSBJCAAPI</artifactId>
  <version>0.1.0-SNAPSHOT</version>
  <type>jar</type>
  <scope>provided</scope>
</dependency>

Note that this dependency have scope provided since the types within this dependency are globally available to every application deployed to Payara Micro after the AzureSBRAR-0.1.0-SNAPSHOT.rar was deployed.

Sending messages

Sending messages to Azure can be done via the JCA and an Azure specific API. In order to start using this API to send messages, a resource has to be defined via the JCA API; a connection factory.

The connection factory has to be given a name, which can be any name that is valid for JNDI. The java:app namespace is typically recommended to be used. The type of the connection factory to be used for the Azure Service Bus is fish.payara.cloud.connectors.azuresb.api.AzureSBConnectionFactory, and we have to specify the resource adapter name which is here AzureSBRAR-0.1.0-SNAPSHOT.

Finally the Azure credentials have to be specified.

The following gives an example:

@ConnectionFactoryDefinition (
  name = "java:app/azuresb/factory",
  interfaceName = "fish.payara.cloud.connectors.azuresb.api.AzureSBConnectionFactory",
  resourceAdapter = "AzureSBRAR-0.1.0-SNAPSHOT"
  properties = {"nameSpace=payara", "sasKeyName=RootManageSharedAccessKey", "sasKey=someKey"}
)

With the above shown definition in place the following code shows an example of sending a message:

@Singleton
@Startup
public class SendAzureMessage {

  @Resource(lookup = "java:app/azuresb/factory")
  private AzureSBConnectionFactory factory;

  @PostConstruct
  public void init() {
    try (AzureSBConnection connection = factory.createConnection()) {
        connection.sendMessage("testq", new BrokeredMessage("Hello World"));
    }
    catch (Exception ex) {
    }
  }
}

Receiving messages

Messages can be received from Azure by creating an MDB (Message Driven Bean) that implements the fish.payara.cloud.connectors.azuresb.api.AzureSBListener marker interface and has a single method annotated with @OnAzureSBMessage and the method signature void method(BrokeredMessage message).

The following gives an example:

@MessageDriven(activationConfig = {
 @ActivationConfigProperty(propertyName = "nameSpace", propertyValue = "payara"),
 @ActivationConfigProperty(propertyName = "sasKeyName", propertyValue = "RootManageSharedAccessKey"),
 @ActivationConfigProperty(propertyName = "sasKey", propertyValue = "someKey"),
 @ActivationConfigProperty(propertyName = "queueName", propertyValue = "testq")
})
public class ReceiveAzureMessage implements AzureSBListener {
    @OnAzureSBMessage
    public void receiveMessage(BrokeredMessage message) {
        // Handle message
    }
}

The full list of config properties is given below:

Config Property Name Type Default Notes

sasKeyName

String

none

The SAS Key Name defined in your Service Bus namespace

sasKey

String

none

The SAS Key. Environment variable replacement can be used so that this is not exposed in the code

nameSpace

String

none

The Azure namespace of your Service Bus

queueName

String

none

The Queue Name (MDB property only)

initialPollDelay

Integer

1

The Initial Poll Delay (in seconds) before the Adapter starts polling for messages after deployment (MDB Property Only)

pollInterval

Integer

1

The Poll interval (in seconds). This is how often the MDB polls for new messages (MDB Property Only)

pollTimeout

Integer

1

The Poll Timeout (in seconds). This is how long the MDB should wait for messages in a single poll (MDB Property Only)