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