2017-01-31 3 views
0

У меня есть следующий интерфейс:КДИ @Alternative аннотаций с @ApplicationScoped

public interface StackConfigurationService { 
    List<StackConfiguration> getStacksByAppId(String appId) throws ConfigurationException; 
} 

С двух реализаций:

@ApplicationScoped 
public class StackConfigurationServiceImpl implements StackConfigurationService { 
    public List<StackConfiguration> getStacksByAppId(String appId) throws ConfigurationException { ... } 
} 

и

@Alternative 
@ApplicationScoped 
public class StackConfigurationMockService implements StackConfigurationService { 
    public List<StackConfiguration> getStacksByAppId(String appId) throws ConfigurationException { ... } 
} 

beans.xml содержит следующее:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://java.sun.com/xml/ns/javaee" 
    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/beans_1_0.xsd"> 

    <alternatives> 
     <class>my.app.StackConfigurationMockService</class> 
    </alternatives> 
</beans> 

Однако CDI никогда не использует ложную реализацию услуги. Является ли аннотация @ApplicationScoped какой-либо мешающей?

+0

Можете ли вы разместить полный текст файла beans.xml? –

+0

@LeoG. Я обновил содержимое beans.xml – Serban

+0

Это должно сработать. Как упаковано ваше приложение? Проверьте расположение beans.xml (webapp/WEB-INF для войны, META-INF для банки) и проверьте также, что StackConfigurationMockService находится в пути к классам. – Rouliboy

ответ

0

Он работал все время. Я изменил настройки в beans.xml, восстановил и перезапустил сервер, но проблема была в браузере. Я использовал одну и ту же вкладку и просто удалял обновление после перезапуска каждого сервера. Я предполагаю, что сервер кэшировал классы для этого сеанса. Открытие на новой вкладке решило проблему.

Смежные вопросы