【发布时间】:2015-05-11 15:11:46
【问题描述】:
设置:arquillian,jboss as 7.1.1.final 作为托管容器
我目前正在将 EJB 应用程序从 EJB 2.x 迁移到 3.x,并将 JBoss 3.x 迁移到 JBoss AS 7.1。 在这个过程中,我想让大多数课程都接受测试,并偶然发现了 arquillian。 虽然 arquillian 似乎在跨 bean 功能上提供了一些不错的功能,但我无法弄清楚使用 jndi 查找测试远程客户端功能是否有效。
我在我的 bean 上使用了 Arquillian 入门指南,但由于这些使用 @Inject 并且在我的应用程序中,我(至少认为我)需要从该路径转向的任何地方都使用 jndi 查找。
这是我基于Arquillian Getting Started 创建的TestCase。我在所有尝试中都明确放弃了使用我认为可能会有所帮助的 jndi 属性。
测试
should_create_greeting()
如果 Greeter bean 使用单独的 Producer 则可以工作。
@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 查找来运行此测试?我错过了什么吗?
【问题讨论】: