2014-02-11 6 views
1

Я пытаюсь запустить этот пример EJB на JBoss 7, но он всегда бросает NameNotFoundException.JNDI-имя для EJB 3.1 работает на JBoss 7

EJB, который я пытаюсь проверить: калькулятор. Когда я развернуть его на JBoss 7 показать это следующие строки в консоли сервера:

java:global/CalculadoraProject/Calculator!demo.CalculatorRemote 
java:app/CalculadoraProject/Calculator!demo.CalculatorRemote 
java:module/Calculator!demo.CalculatorRemote 
java:jboss/exported/CalculadoraProject/Calculator!demo.CalculatorRemote 
java:global/CalculadoraProject/Calculator 
java:app/CalculadoraProject/Calculator 
java:module/Calculator 

Код Калькулятор боб заключается в следующем:

package demo; 
import javax.ejb.Stateless; 

@Stateless 
public class Calculator implements CalculatorRemote 
{ 
    @Override 
    public double sum(double a, double b) 
    { 
     return a+b; 
    } 
} 

И код удаленного интерфейса:

package demo; 
import javax.ejb.Remote; 

@Remote 
public interface CalculatorRemote 
{ 
    public double sum(double a,double b); 
} 

Основным кодом, который должен подключать EJB через JNDI, является:

package demo; 
import java.util.Properties; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

public class Test 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Context ctx=getInitialContext(); 

     String jndiName="?????????????"; 
     CalculatorRemote c = (CalculatorRemote)ctx.lookup(jndiName); 

     System.out.println(c.sum(2,2)); 
    } 

    private static Context getInitialContext() throws Exception 
    { 
     Properties p=new Properties(); 
     p.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory"); 
     p.put("java.naming.provider.url","remote://localhost:4447"); 

     return new InitialContext(p); 
    } 
} 

Первая ошибка: Ошибка аутентификации. Итак, я создаю "User Management" пользователя для "ApplicationRealm" в сервере: USR: тест, PWD: test123, а затем изменить getInitialContext(), чтобы выглядеть следующим образом:

Properties p=new Properties();   
p.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory"); 
p.put("java.naming.provider.url","remote://localhost:4447"); 
p.put(Context.SECURITY_PRINCIPAL,"test"); 
p.put(Context.SECURITY_CREDENTIALS,"test123"); 

Следующая ошибка: javax. naming.NameNotFoundException: ?????????????

Итак, я хочу спросить: какое имя я должен использовать для поиска моего компонента-компонента?

Спасибо!

ответ

1

1) используя глобальное имя JNDI.

java:global/CalculadoraProject/Calculator!demo.CalculatorRemote 

2) используя имя ejb JNDI. Играйте с косыми чертами, если вы все еще получите ошибку. Должно быть правильным, если у вас есть необходимые библиотеки и не имеют синтаксических ошибок в других местах кода.

ejb:/CalculadoraProject/Calculator!demo.CalculatorRemote 

JNDI структура
Для лиц без бобов:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface> 

Для сохраняющего состояния фасоли:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful 

Ссылки стоит читать:
https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project

Надеюсь, что это помогло :)

+0

благодарит за ответ. К сожалению, ни одно из перечисленных вами имен не работает. Я также попытался, добавив этот jboss-ejb-client.properties файла в клиенте claspath: 'endpoint.name = клиент-конечные точки remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED = ложный удаленный .connections = по умолчанию remote.connection.default.host = 10.20.30.40 remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS = ложь удаленный .connection.default.username = test remote.connection.default.password = test123' но все же показать то же самое: NameNotFoundException. – pablosz

+0

Я помню, что у меня было много проблем с локальными клиентами и EJB, поэтому я начал использовать сервлеты для их проверки, если интерфейс еще не готов. Как вы видите, не все может быть включено в имя JNDI, поэтому, если, скажем, у EJB нет , это будет выглядеть так: ejb:/CalculadoraProject // Calculator! Demo.CalculatorRemote. Каковы имена JNDI, которые вы пытались использовать? – Candyman

+0

ejb:/CalculadoraProject // Calculator! Demo.CalculatorRemote должен работать, если нет, некоторые конфигурации отключены или библиотеки отсутствуют. – Candyman

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