2015-05-11 4 views
0

установки: arquillian, JBoss, как 7.1.1.final, как управляемый контейнерПроверка удаленного поиск клиента JNDI с помощью arquillian

В настоящее время я мигрирующее приложение EJB из EJB 2.x до 3.x и JBoss 3. x к JBoss AS 7.1. Во время этого процесса я хотел бы получить большинство классов под испытанием и наткнулся на аркиллиан. Хотя arquillian, кажется, предлагает некоторые приятные функции для межобщинных функций, я не могу понять, работает ли тестирование удаленных клиентских функций с помощью jndi-запросов.

Я использовал начальные руководства Arquillian для моих боб, которые работали, но поскольку они используют @Inject, и в моем приложении jndi lookups используются везде, где я (по крайней мере, думаю, что i) должны отклоняться от этого пути.

Здесь TestCase i создан на основе Arquillian Getting Started. Я явно оставил во всех попытках использование jndi-свойств, о которых я думал, что они могут помочь.

Тест

should_create_greeting() 

работает, если боб Greeter с помощью отдельного производителя.

@RunWith(Arquillian.class) 
public class GreeterTest { 
    public static final String ARCHIVE_NAME = "test"; 

    Logger logger = Logger.getLogger(GreeterTest.class.getName()); 

    @Deployment 
    public static Archive<?> createDeployment() { 
     JavaArchive jar = ShrinkWrap.create(JavaArchive.class, ARCHIVE_NAME + ".jar").addPackage(Greeter.class.getPackage()) 
      .addAsManifestResource("test-persistence.xml", "persistence.xml").addAsManifestResource("OracleGUIDS-ds.xml") 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); 
    return jar; 
    } 

    /** 
    * @Inject works using a producer with {@code @Produces} 
    */ 
    // @Inject 
    // Greeter greeter; 
    @ArquillianResource 
    Context context; 

    GreeterRemote greeter; 

    @Before 
    public void before() throws Exception { 
     Map<String, String> env = new HashMap<>(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.as.naming.InitialContextFactory"); 
     env.put("jboss.naming.client.ejb.context", "true"); 
     // env.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", 
     // "false"); 
     // env.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", 
     // "false"); 
     // env.put("jboss.naming.client.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", 
     // "false"); 
     for (Map.Entry<String, String> entry : env.entrySet()) { 
      context.addToEnvironment(entry.getKey(), entry.getValue()); 
     } 
     greeter = (GreeterRemote) context.lookup(ARCHIVE_NAME + "/" + Greeter.class.getSimpleName() + "!" 
      + GreeterRemote.class.getName()); 
    } 

    @Test 
    public void should_create_greeting() { 
     Assert.assertEquals("Hello, Earthling!", greeter.createGreeting("Earthling")); 
     greeter.greet(System.out, "Earthling"); 
    } 

}

Можно ли получить этот тест работает с JNDI поиска? Я что-то упускаю?

ответ

0

Если вы хотите протестировать функции Remote EJB, которые вы, вероятно, захотите запустить на стороне клиента, а не в контейнере.

Вы можете настроить развертывание только на стороне клиента, используя @Deployment (testable = false). Затем методы @Test будут выполняться так, как если бы вы были удаленным клиентом.

Кроме того, вы можете просто искать bean-компонент через вложенный контекст, если хотите.

+0

Благодарит Вас за Ответить. Это работает при использовании управляемого сервера, на котором я развертываюсь для конкретного теста, или мне нужно иметь сервер с развертыванием? Мне бы очень хотелось, чтобы во время тестов на управляемый сервер разворачивались бобы, а затем выполнялись некоторые тесты против них. Но если я попробую это, например, используя два развертывания, я не могу получить доступ к компонентам удаленно. –

0

У меня была такая же проблема, поэтому в обходном пути я только что добавил к методу, который будет проверен remoteejb в качестве параметра. На моем EJB:

public List localBean.obtain(RemoteEJB remoteEjb){ 
return remoteEjb.obtain(); 
} 

Тогда на arquillian тест:

@Inject 
private LocalBean localBean; 

@Inject 
private RemoteEJB remoteEjb; 


    @Test 
    public void test(){ 
     List<Vo>voList = localBean.obtain(remoteEjb); 
    } 

Лучшая частью является удаленной EJB впрыска и метода вызывающего абонента оригинальной

@EJB(lookup="java:global/ear/ejb/RemoteEjb") 
private RemoteEJB remoteEjb; 
Смежные вопросы