Я пытаюсь специализировать EJB. У меня есть@Specializes for EJB
package com.foo.core;
@Stateless
public class MyFacade { }
и
package com.foo.extension;
@Specializes
@Stateless
public class MyFacade extends com.foo.core.MyFacade { }
На мой взгляд, это должно работать, потому что смысл @Specializes в том, что КДИ следует забывать о колонкового класса и вместо того, чтобы использовать специализированный класс. Я также нашел эту ошибку https://issues.jboss.org/browse/WELD-1451, которая указывает, что можно специализировать EJB.
Но если я пытаюсь развернуть мое приложение (я использую Weblogic 12.1.3), я всегда получаю
weblogic.utils.ErrorCollectionException: Есть 1 вложенных ошибки: weblogic.j2ee.dd .xml.AnnotationProcessException: Дублирование имя EJB '' MyFacade найдено: аннотация 'Stateless' на класс компонента com.foo.core.MyFacade и annoation 'Безгражданство' на классе компонента com.foo.extension.MyFacade
Я делаю что-то неправильно?
Спасибо!
Спецификация CDI не определяет, как работает спецификация EJB. Несмотря на то, что упомянутый вами дефект был разрешен, связанный с ним запрос на растяжение был отклонен, поэтому я не уверен, что на нем действительно исправлено. Если вы хотите специализироваться, я бы рекомендовал использовать чистые CDI. –
Я решил сменить свои EJB на чистые CDI-бобы. Но мне нужно декларативное управление транзакциями. Я мог бы использовать @Transactional, но это часть JEE7 и поэтому недоступна в Weblogic 12.1.3. – Ben
Как сказал JohnAment, @Specializes - это функция CDI и ее спецификация, не определяет, как работать с EJB. Я использую weblogic, и я рекомендую вам, что если вы будете ждать, когда эта ситуация будет исправлена в weblogic, это может занять много времени. Итак, попробуйте найти другой подход, используя только спецификацию CDI. –