Кто-нибудь знает, можно ли создать тему и фабрику ее соединений программно? В настоящее время я использую утилиту администратора glassfish для создания своей темы и фабрики соединений. Если я не могу создать его в коде, есть ли у glassfish/openmq тема по умолчанию и заводская настройка, которую я могу использовать?
Как создать программную тему jms Topic и TopicConnectionFactory?
Ответ 1
Если вы только хотите обойти создание ресурсов вручную в админе, вы можете просто развернуть их с файлом "glassfish-resources.xml" (GF 3.1, см. http://docs.oracle.com/cd/E18930_01/html/821-2417/giyhh.html).
Вам нужен ресурс admin-object, подобный этому (для темы):
<admin-object-resource enabled="true" jndi-name="jms/myTopic"
object-type="user" res-adapter="jmsra" res-type="javax.jms.Topic">
<property name="Name" value="physicalTopic"/>
</admin-object-resource>
Помните, что вы должны использовать разные значения "Имя" для темы (здесь: "physicalTopic" ), если вы реализуете несколько тем, сообщения которых не должны смешиваться.
Далее вам понадобится ресурс-коннектор, ссылающийся на пул соединений-подключений типа javax.jms.TopicConnectionFactory.
Если вы не стремитесь к динамическому созданию ресурсов, используя дескриптор развертывания glassfish-resources.xml, это лучший способ.
Обратите внимание, что ресурсы, развернутые таким образом, являются областью приложения: http://docs.oracle.com/cd/E18930_01/html/821-2417/giydj.html
"glassfish-resources.xml" - это файл для GF 3.x, для GF 2.x это был "sun-resources.xml". Файл находится в папке "Ресурсы сервера" в представлении проекта, если вы используете NetBeans. Внимание: Glassfish-resources.xml в "Ресурсах сервера" используется только NetBeans, если вы используете NetBeans для развертывания! NetBeans знает, как создавать ресурсы диссертаций и выполняет эту задачу. Если вы разворачиваете EAR прямо в Glassfish без NetBeans - что кажется очень вероятным для производственной среды - вы должны предоставить glassfish-resources.xml в:
- META-INF вашего модуля EJB или WEB-INF вашей WAR для ресурсов с ограниченным модулем
- META-INF вашего корпоративного приложения для широкого использования приложений В NetBeans вы выполняете это, помещая файл в папку "Конфигурационные файлы" вашего представления проекта (это src/conf/в файловой системе).
Вы можете легко создать это определение ресурса с помощью мастера NetBeans [New Message-Driven Bean] (просто добавьте MBean, выбрав [New...]). В мастере выберите "Направления проекта" > [Добавить]. Полный пример 3.1 выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<admin-object-resource enabled="true" jndi-name="jms/myDestination" res-type="javax.jms.Topic" res-adapter="jmsra">
<property name="Name" value="PhysicalTopic"/>
</admin-object-resource>
<connector-connection-pool name="jms/myDestinationFactoryPool" connection-definition-name="javax.jms.TopicConnectionFactory" resource-adapter-name="jmsra"/>
<connector-resource enabled="true" jndi-name="jms/myDestinationFactory" pool-name="jms/myDestinationFactoryPool" />
</resources>
Это аннотация MBean:
@MessageDriven(mappedName = "java:app/jms/myDestination", activationConfig =
{
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
@ActivationConfigProperty(propertyName = "clientId", propertyValue = "NewMessageBean"),
@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "NewMessageBean")
})
public class NewMessageBean implements MessageListener
{
[...]
Внимание: "java: app/" в mappedName верен, только если вы используете ресурсы с областью приложения. Вы можете сэкономить "java: app/" в определении в glassfish-resources.xml. В руководстве по развертыванию GF говорится: "Идентификаторы JNDI ресурса с приложениями начинаются с java: app или Java: модуль. Если один из этих префиксов не указан в имени JNDI, он добавляется. "
Вы также можете ввести другой уровень косвенности, используя "name" вместо "mappedName". Затем вам необходимо предоставить файл с именем "application-client.xml", где (логическое) имя отображается в физическое местоположение JNDI.