Jboss 使用arquillian测试远程客户端jndi查找
设置:arquillian,JBossAS 7.1.1.final作为托管容器 我目前正在将EJB应用程序从EJB2.x迁移到3.x,并将JBoss3.x迁移到JBossAS7.1。 在这个过程中,我想让大多数课程都接受测试,但却被阿奎利安绊倒了。 虽然arquillian似乎在bean间功能上提供了一些不错的特性,但我无法确定使用jndi查找测试远程客户端特性是否有效 我在我的bean上使用了Arquillian入门指南,这很有效,但由于这些指南使用@Inject,并且在我的应用程序中,jndi查找在任何地方都使用,所以我(至少我认为我)需要偏离这条路径 下面是我创建的测试用例。在所有使用jndi属性的尝试中,我都明确地离开了,我认为这些属性可能会有所帮助 测试Jboss 使用arquillian测试远程客户端jndi查找,jboss,jboss-arquillian,Jboss,Jboss Arquillian,设置:arquillian,JBossAS 7.1.1.final作为托管容器 我目前正在将EJB应用程序从EJB2.x迁移到3.x,并将JBoss3.x迁移到JBossAS7.1。 在这个过程中,我想让大多数课程都接受测试,但却被阿奎利安绊倒了。 虽然arquillian似乎在bean间功能上提供了一些不错的特性,但我无法确定使用jndi查找测试远程客户端特性是否有效 我在我的bean上使用了Arquillian入门指南,这很有效,但由于这些指南使用@Inject,并且在我的应用程序中,jnd
should_create_greeting()
如果迎宾bean使用单独的生产者,则该方法有效
@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");
}
@RunWith(Arquillian.class)
公共类迎宾测验{
公共静态最终字符串存档\u NAME=“test”;
Logger=Logger.getLogger(GreeterTest.class.getName());
@部署
公共静态存档createDeployment(){
JavaArchive jar=ShrinkWrap.create(JavaArchive.class,ARCHIVE_NAME+“.jar”).addPackage(Greeter.class.getPackage())
.addAsManifestResource(“test persistence.xml”、“persistence.xml”).addAsManifestResource(“OracleGUIDS.xml”)
.addAsManifestResource(EmptyAsset.INSTANCE,“beans.xml”);
返回罐;
}
/**
*@Inject使用具有{@code@products}的生产者工作
*/
//@注入
//迎宾员;
@阿奎利安资源
语境;
格里特雷莫迎宾员;
@以前
public void before()引发异常{
Map env=new HashMap();
env.put(Context.INITIAL_Context_FACTORY,“org.jboss.as.naming.InitialContextFactory”);
put(“jboss.naming.client.ejb.context”,“true”);
//env.put(“jboss.naming.client.connect.options.org.xnio.options.SASL\u POLICY\u NOPLAINTEXT”,
//“虚假”);
//env.put(“jboss.naming.client.connect.options.org.xnio.options.SASL_POLICY_noanymous”,
//“虚假”);
//env.put(“jboss.naming.client.connectionprovider.create.options.org.xnio.options.SSL_ENABLED”,
//“虚假”);
对于(Map.Entry:env.entrySet()){
addToEnvironment(entry.getKey(),entry.getValue());
}
greeter=(GreeterRemote)context.lookup(ARCHIVE_NAME+“/”+greeter.class.getSimpleName()+“!”
+greetremote.class.getName());
}
@试验
public void应创建问候语(){
Assert.assertEquals(“你好,地球人!”,greeter.createGreeting(“地球人”);
问候者。问候(System.out,“地球人”);
}
}
是否可以使用jndi查找运行此测试?我遗漏了什么吗?如果您想测试EJB的远程功能,您可能希望在客户端而不是容器中运行 您可以使用@Deployment(testable=false)将部署配置为仅客户端。@Test方法将像远程客户端一样运行
除此之外,如果需要,您还可以通过注入的上下文查找bean 我也遇到了同样的问题,所以在一个解决方案中,我刚刚添加了要测试的方法,将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);
}
谢谢你的回复。在使用我部署用于特定测试的托管服务器时,这是否起作用,或者我是否需要有一个运行部署的服务器?我真的希望在测试期间将bean部署到托管服务器,然后对这些bean运行一些测试。但是如果我尝试这样做,例如使用两个部署,我似乎无法远程访问bean。
@EJB(lookup="java:global/ear/ejb/RemoteEjb")
private RemoteEJB remoteEjb;