Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Jboss7 - помогите с тестовым приложением


Автор: alxt 20.3.2012, 11:31
Взял пример https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
Редуцировал его до такого:

Код

@Remote
public interface TestRemote {
  int add(int a, int b);
}


Код

@Stateless
public class TestBL implements TestRemote {
  @Override
  public int add(int a, int b) {
    return a+b;
  }
}


Собрал простейший jar и задеплоил. В логах всё хорошо
Код

17:08:28,628 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "JBoss7Test-0.SHAPSHOT.jar"
17:08:28,659 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-4) JNDI bindings for session bean named TestBL in deployment unit deployment "JBoss7Test-0.SHAPSHOT.jar" are as follows:
        java:global/JBoss7Test-0.SHAPSHOT/TestBL!ru.start2com.test.jboss7.beans.TestRemote
        java:app/JBoss7Test-0.SHAPSHOT/TestBL!ru.start2com.test.jboss7.beans.TestRemote
        java:module/TestBL!ru.start2com.test.jboss7.beans.TestRemote
        java:jboss/exported/JBoss7Test-0.SHAPSHOT/TestBL!ru.start2com.test.jboss7.beans.TestRemote
        java:global/JBoss7Test-0.SHAPSHOT/TestBL
        java:app/JBoss7Test-0.SHAPSHOT/TestBL
        java:module/TestBL
17:08:28,706 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "JBoss7Test-0.SHAPSHOT.jar"


Создал файл jboss-ejb-client.properties
[code=nocolor]
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
endpoint.name=client-endpoint
[/code=nocolor]

и клиентский код

Код

  private static void invokeStatelessBean() throws NamingException {
    TestRemote statelessRemoteCalculator = lookupRemoteStatelessCalculator();
    int sum = statelessRemoteCalculator.add(3, 4);
    System.out.println("sum = " + sum);
  }

  private static TestRemote lookupRemoteStatelessCalculator() throws NamingException {
    Security.addProvider(new JBossSaslProvider());
    final Hashtable<String, String> p = new Hashtable<String, String>();
    p.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    p.put(Context.SECURITY_PRINCIPAL, "alxt");
    p.put(Context.SECURITY_CREDENTIALS, "123");
    final Context context = new InitialContext(p);
    return (TestRemote) context.lookup("ejb:app/JBoss7Test-0.SHAPSHOT/TestBL!ru.start2com.test.jboss7.beans.TestRemote");
  }


При запуске на строке "int sum = statelessRemoteCalculator.add(3, 4);" ошибка

Код

Exception in thread "main" java.lang.IllegalStateException: No EJB receiver available for handling [appName:app,modulename:JBoss7Test-0.SHAPSHOT,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@7ff5b6
    at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584)
    at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119)
    at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136)
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121)
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104)
    at $Proxy0.add(Unknown Source)
    at ru.start2com.test.jboss7.client.TestRemoteClient.invokeStatelessBean(TestRemoteClient.java:23)


При этом на сервере:
17:09:29,677 ERROR [org.jboss.remoting.remote.connection] (Remoting "alxt" read-1) JBREM000200: Remote connection failed: java.io.IOException

Пользователя добавил, пробовал без указания оного. 
jboss-ejb-client.properties точно подхватывается (если поменять, к примеру, в нём порт- то не соединится).

Ткните, пожалуйста, где я ошибся. Или дайте рабочий пример (на сайте жбосса не нашёл- у всех pom.xml странный- у меня не компилируется).

Автор: alxt 21.3.2012, 15:22
Нашёл! Вместо

Код

return (TestRemote) context.lookup("ejb:app/JBoss7Test-0.SHAPSHOT/TestBL!ru.start2com.test.jboss7.beans.TestRemote");


надо

Код

return (TestRemote) context.lookup("ejb:/JBoss7Test-0.SHAPSHOT//TestBL!ru.start2com.test.jboss7.beans.TestRemote");


Спасибо всем, кто хотя бы посмотрел smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)