Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> @Resource(name и mappedName) 
V
    Опции темы
ki6opr
Дата 12.4.2010, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



Dependency Injection через @Resource (javax.annotation.Resource)
есть у нее две проперти name и mappedName первая указывает на логическое имя ресурса, а вторая на сам путь к ресурсу причем installation-dependent (который отличается от сервера к серверу) поэтому можно написать специфичный для сервера дескриптор развертывания в котором собствено и хранить jndi путь к ресурсу именно для этого типа сервера (и вот тут у меня просто взрыв мозга)

есть код:
Код

/**
 * асинхроная отправка писем через jms
 */
@Stateless(name = "JMSMailerSenderBean")
public class JMSMailerSenderBean implements MailerLocal {

    @Resource(name = "mailQueue")
    private Queue queue;
    @Resource(name = "mailQueueFactory")
    private ConnectionFactory queueFactory;

    public void sendMail(Message email) {
       .....
    }
}


есть sun-ejb.jar (для семейства AS Sun)
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>JMSMailerSenderBean</ejb-name>
            <resource-ref>
                <res-ref-name>mailQueue</res-ref-name>
                <jndi-name>jms/MailQueue</jndi-name>
            </resource-ref>
            <resource-ref>
                <res-ref-name>queueFactory</res-ref-name>
                <jndi-name>jms/MailQueueFactory</jndi-name>
            </resource-ref>
        </ejb>
     </enterprise-beans>
</sun-ejb-jar>


а в итоге получаю только NamingException что данные ресурс не найден, хотя он есть, причем почему то только на саму очередь, на фабрику не ругаеться.
С mappedName="jms/MailQueue" для Glassfish и "queue/MailQueue" для Jboss инжектится и вполне себе отлично работает.

Пробывал как name так и mappedName, вывод: что то я серьезно не понимаю...
Подскажите пожалуйста кто-нибудь что у меня с лыжами smile

PM MAIL ICQ   Вверх
dobrolub
Дата 12.4.2010, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



У меня не богатый опыт с Sunовским AS, но советую проверить через консоль администрирования создаётся ли требуемая очередь с именем jms/MailQueue.


PM   Вверх
ki6opr
Дата 12.4.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



Цитата(dobrolub @ 12.4.2010,  08:26)
У меня не богатый опыт с Sunовским AS, но советую проверить через консоль администрирования создаётся ли требуемая очередь с именем jms/MailQueue.

создается, я же написал что если просто поставить mappedName и в ней прописать специфичный для Glassfish или Jboss Jndi путь то ресурс заинжектится smile

как мне кажется я упускаю какую то важную деталь именно в конфигах / аннотации из чего не работает ни в Glassfish ни в Jboss эта фича с логическим именем
PM MAIL ICQ   Вверх
ki6opr
Дата 12.4.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



так ну как минимум я оказался не прав используя просто resource-ref вместо resource-env-ref для дескриптора Glassfish

вкратце суть в том, что resource-ref игнорирует resource-ref для JMS ConnectionFactories а для JMSQueue нужно еще обязательно указывать логин/пароль

Это сообщение отредактировал(а) ki6opr - 12.4.2010, 09:34
PM MAIL ICQ   Вверх
ki6opr
Дата 13.4.2010, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



Замена на resource-ref на  resource-env-ref так в итоге ничего и не дала ...

Никто что ли не писал приложения которые должны бы были развертываться на нескольких серверах ?

PM MAIL ICQ   Вверх
ki6opr
Дата 13.4.2010, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



оказывается если использовать server specific конфиги (sun-ejb.xml, jboss.xml) нужно обязательно писать и ejb-jar.xml

вообщем Glassfish поборол 

ejb-jar.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee" 
         version = "3.0" 
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
    <enterprise-beans>
        <!-- -->
        <message-driven>
            <ejb-name>JMSMailerBean</ejb-name>
            <message-destination-type>javax.jms.Queue</message-destination-type>
        </message-driven>
        <!-- -->
        <session>
            <ejb-name>JMSMailerSenderBean</ejb-name>
            <resource-ref>
                <res-ref-name>mailQueueFactory</res-ref-name>
                <res-type>javax.jms.ConnectionFactory</res-type>
            </resource-ref>
            <resource-ref>
                <res-ref-name>mailQueue</res-ref-name>
                <res-type>javax.jms.Queue</res-type>
            </resource-ref>
        </session>
    </enterprise-beans>
</ejb-jar>


и sun-ejb.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
    <enterprise-beans>
        <!-- -->
        <ejb>
            <ejb-name>JMSMailerBean</ejb-name>
            <jndi-name>jms/mailQueue</jndi-name>
        </ejb>
        <!-- -->
        <ejb>
            <ejb-name>JMSMailerSenderBean</ejb-name>
            <resource-ref>
                <res-ref-name>mailQueueFactory</res-ref-name>
                <jndi-name>jms/mailCF</jndi-name>
            </resource-ref>
            <resource-ref>
                <res-ref-name>mailQueue</res-ref-name>
                <jndi-name>jms/mailQueue</jndi-name>
            </resource-ref>
            <pass-by-reference>true</pass-by-reference>
        </ejb>
    </enterprise-beans>
</sun-ejb-jar>


остался JBoss который ни в какую не хочет деплоить проект потому что в @Resource написан name а не mappedName smile

Это сообщение отредактировал(а) ki6opr - 13.4.2010, 07:24
PM MAIL ICQ   Вверх
ki6opr
Дата 15.4.2010, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



вообщем поборол и Jboss
в итоге что бы работало и там и там нужно сделать вот так 

MDB:
Код

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.MessageListener;

/**
 * MDB бин для асинхронной отправки email сообщений
 * @author programmist
 */
@MessageDriven(name = "JMSMailerBean",
activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
})
public class JMSMailerBean implements MessageListener {

    public JMSMailerBean() {
    }

    public void onMessage(javax.jms.Message message) {
        ....
    }
}


Sender:
Код

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

/**
 * асинхроная отправка писем через jms
 * @author programmist
 */
@Stateless(name = "JMSMailerSenderBean")
public class JMSMailerSenderBean implements MailerLocal {

    @Resource(name = "mailQueue")
    private Queue mailQueue;
    @Resource(name = "mailQueueFactory")
    private ConnectionFactory mailQueueFactory;

    public void sendMail(Serializable email) {
    ......
    }
}


ну и конфиги:
ejb-jar.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee" 
         version = "3.0" 
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
    <enterprise-beans>
        <!-- -->
        <message-driven>
            <ejb-name>JMSMailerBean</ejb-name>
            <message-destination-type>javax.jms.Queue</message-destination-type>
        </message-driven>
        <!-- -->
        <session>
            <ejb-name>JMSMailerSenderBean</ejb-name>
            <resource-ref>
                <res-ref-name>mailQueueFactory</res-ref-name>
                <res-type>javax.jms.ConnectionFactory</res-type>
            </resource-ref>
            <resource-ref>
                <res-ref-name>mailQueue</res-ref-name>
                <res-type>javax.jms.Queue</res-type>
            </resource-ref>
        </session>
    </enterprise-beans>
</ejb-jar>


sun-ejb-jar.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
    <enterprise-beans>
        <!-- -->
        <ejb>
            <ejb-name>JMSMailerBean</ejb-name>
            <jndi-name>jms/mailQueue</jndi-name>
        </ejb>
        <!-- -->
        <ejb>
            <ejb-name>JMSMailerSenderBean</ejb-name>
            <resource-ref>
                <res-ref-name>mailQueueFactory</res-ref-name>
                <jndi-name>jms/CF</jndi-name>
            </resource-ref>
            <resource-ref>
                <res-ref-name>mailQueue</res-ref-name>
                <jndi-name>jms/mailQueue</jndi-name>
            </resource-ref>
            <pass-by-reference>true</pass-by-reference>
        </ejb>
    </enterprise-beans>
</sun-ejb-jar>


jboss.xml где все по особому smile
Код

<?xml version="1.0" encoding="UTF-8"?>
<jboss>
    <enterprise-beans>
        <!-- -->
        <message-driven>
            <ejb-name>JMSMailerBean</ejb-name>
            <destination-jndi-name>mailQueue</destination-jndi-name>
        </message-driven>
        <!-- -->
        <session>
            <ejb-name>JMSMailerSenderBean</ejb-name>
            <resource-ref>
                <res-ref-name>mailQueueFactory</res-ref-name>
                <jndi-name>CF</jndi-name>
            </resource-ref>
            <message-destination-ref>
                <message-destination-ref-name>mailQueue</message-destination-ref-name>
                <jndi-name>queue/mailQueue</jndi-name>
            </message-destination-ref>
        </session>
    </enterprise-beans>

    <resource-managers res-class="javax.jms.Queue">
        <resource-manager>
            <res-name>mailQueue</res-name>
            <res-jndi-name>queue/mailQueue</res-jndi-name>
        </resource-manager>
        <resource-manager res-class="javax.jms.QueueConnectionFactory">
            <res-name>mailQueueFactory</res-name>
            <res-jndi-name>queue/CF</res-jndi-name>
        </resource-manager>
    </resource-managers>
</jboss>



Это сообщение отредактировал(а) ki6opr - 15.4.2010, 04:06
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.