У меня проблема с моим EJBTest.
Я установил WildFly и настроил управление пользователями и приложениями.
Я написал EJB 3.0 и развернул его:
@Stateless
@Remote(NewSessionBeanRemote.class)
public class NewSessionBean implements NewSessionBeanRemote {
List<String> bookShielf;
/**
* Default constructor.
*/
public NewSessionBean() {
bookShielf = new ArrayList<String>();
}
@Override
public void addBook(String bookName) {
bookShielf.add(bookName);
}
@Override
public List getBook() {
return bookShielf;
}
}
После этого я написал простой клиент для его подключения:
private static void invokeStatelessBean() throws NamingException {
// Let's lookup the remote stateless calculator
NewSessionBeanRemote remoteEjb = lookupRemoteSessionBean();
System.out.println("Obtained a remote stateless calculator for invocation");
String bookName = "TEST book";
remoteEjb.addBook(bookName);
}
private static NewSessionBeanRemote lookupRemoteSessionBean() throws NamingException {
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:10090");
jndiProperties.put(Context.SECURITY_PRINCIPAL, "ejb"); //this is the application user name, not management! it's correct?
jndiProperties.put(Context.SECURITY_CREDENTIALS, "ejb");//this is the application password, not management! it's correct?
jndiProperties.put("jboss.naming.client.ejb.context", true);
final Context context = new InitialContext(jndiProperties);
final String appName = "";
final String moduleName = "EjbComponent";
final String distinctName = "";
final String beanName = NewSessionBean.class.getSimpleName();
final String viewClassName = NewSessionBeanRemote.class.getName();
System.out.println("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
return (NewSessionBeanRemote) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
}
И имя пользователя, и пароль являются учетными данными пользователя приложения, а не управления! Это правильно?
Я получаю эту ошибку:
Исключение в потоке "main" java.lang.IllegalStateException: EJBCLIENT000025: нет приемника EJB, доступного для обработки комбинации [appName:, moduleName:EjbComponent, DifferentName:] для контекста вызова org.jboss.ejb.client.EJBClientInvocationContext@5034c75a в org.jboss .ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798) в org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128) в org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java) :186) в org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255) в org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200) в org.jboss.ejb.client. EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183) в org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146) в com.sun.proxy.$Proxy2.addBook(неизвестный источник) в com.studio.java.client.EjbTester.invokeStatelessBean(EjbTester.java:34) в com.studio.java.client.EjbTester.main(EjbTester.java:21)
Я не знаю почему! У кого-нибудь есть идея?