# Remote Aufruf von EJB funktioniert nicht



## denis7788 (7. Okt 2015)

Hallo,

in einem JUnit Test rufe ich eine EJB auf. Beim ersten Aufruf funktioniert es, wenn ich aber darauf eine zweite Methode aufrufe, bekomme ich folgende Fehlermeldung:

```
java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:xxx, moduleName:xxx, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@10b483
```

Ich habe bisher nur Hinweise darauf gefunden, dass es an einem falschen JNDI Namen liegen könnte, oder dass die Anwendung nicht deployed ist. Allerdings ist der JNDI Name korrekt (denn der erste Aufruf funktioniert ja einwandfrei) und die Anwendung wurde deployed (das DB-Schema wurde erfolgreich erstellt+ich habe durch den JUnit Test ohne zweiten EJB Aufruf einige Einträge erstellt). 
Folgende Jars habe ich im BuildPath des Testprojektes eingebunden:
1) CustomerManagement.Clint.jar (das EJB Modul, das ich exportiert habe)
2) hibernate-core-4.3.10.Final.jar (Verwendet vom WildflyServer)
3) jboss-client.jar (Verwendet vom WildflyServer)
4) JUnit 4 und JRE System Library

Was könnte noch ein Problem sein? (In der Testklasse CustomerManagementTests habe ich die Stelle, an der der Fehler Auftritt markiert)

Hier meine Klassen:

Customer:

```
@Entity
@NamedQuery(
name=Customer.QUERY_GETALL,
query="SELECT c FROM Customer c")
public class Customer implements Serializable{

/**
* 
*/
private static final long serialVersionUID = 1L;

publicstaticfinal String QUERY_GETALL="Customer.GetAll";

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
privateintid;

@NotNull
@Size(min=1, max=50)
private String firstName;
@NotNull
@Size(min=1, max=100)
private String lastName;
private Gender gender;
private Relationship relationship;
private Date birthday;

@OneToMany (cascade = CascadeType.ALL, orphanRemoval = true, fetch=FetchType.EAGER)
@JoinColumn(name="customerid")
private List<Address> addresses = new ArrayList<Address>();

@OneToMany (cascade = CascadeType.ALL, orphanRemoval = true, fetch=FetchType.EAGER)
@JoinColumn(name="customerid")
private List<Communication> communications = new ArrayList<Communication>();

@Version
private Timestamp lastChanged;

//Getter und Setter
```

CustomerDAO:

```
public interface CustomerDAO {

public Customer create(Customer customer);
public Customer update(Customer customer);
public void remove(int id);
public Customer getCustomer(int id);
public List<Customer> getAllCustomers();

}
```

CustomerBean:

```
@Stateless
@Remote(CustomerDAO.class)
public class CustomerBean implements CustomerDAO {

@PersistenceContext
private EntityManager em;

@Override
public Customer create(Customer customer) {
em.persist(customer);

//Customer returned will have the generated primary key + the version-value (in this case a timestamp)
returncustomer;
}

@Override
public Customer update(Customer customer) {
return em.merge(customer);
}

@Override
public void remove(int id) {
Customer toBeDeleted = getCustomer(id);
em.remove(toBeDeleted);
}

@Override
public Customer getCustomer(int id) {
return em.find(Customer.class, id);
}

@Override
public List<Customer> getAllCustomers() {
return
em.createNamedQuery(Customer.QUERY_GETALL, Customer.class)
.getResultList();
}

}
```

CustomerBEanTester:

```
public class CustomerBeanTester {

private CustomerDAO customerDAO;

@Before
public void setUp() throws Exception {

try {
final Hashtable<String, Comparable> jndiProperties =
new Hashtable<String, Comparable>();

jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jboss.naming.remote.client.InitialContextFactory");

jndiProperties.put("jboss.naming.client.ejb.context", true);

jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
jndiProperties.put(Context.SECURITY_PRINCIPAL, "admin");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "sicher");
final Context context = new InitialContext(jndiProperties);

final String lookupName = 
"CustomerManagement/CustomerManagementEJB/CustomerBean!com.cm.ejb.interfaces.CustomerDAO";

customerDAO = (CustomerDAO) context.lookup(lookupName);

} catch (Exception ex) {
throw ex;
}
}

@Test
public void test() {

assertNotNull(customerDAO);

//Customer anlegen
Customer customer = new Customer();
customer.setFirstName("Karsten16");
customer.setLastName("Müller");
customer.setGender(Gender.Male);

Calendar birthday = Calendar.getInstance();
birthday.set(1988, 7, 7);
customer.setBirthday(birthday.getTime());

//Adresse definieren
Address address = new Address();
address.setCity("Trier");
address.setCountry("Germany");
address.setStreet("Salvianstrasse");
address.setZip("54290");
address.setKind(Kind.Business);
customer.getAddresses().add(address);

//Email Adresse definieren
Communication communication = new Communication();
communication.setName("Geschäft");
communication.setValue("test@test.de");
communication.setCommunicationTyp(CommunicationType.Email);
communication.setKind(Kind.Business);
customer.getCommunications().add(communication);


Customer result = customerDAO.create(customer);
assertNotEquals(result.getId(),0);

//Kunden erneut abrufen - Hier tritt der Fehler auf
result = customerDAO.getCustomer(result.getId());

}
}
```


----------



## denis7788 (7. Okt 2015)

Vielleicht hilft diese Ausgabe auch weiter. Unten ist erkennbar, das die Remote-Connection geschlossen wurde:

```
Okt 07, 2015 10:56:46 AM org.xnio.Xnio <clinit>
INFO: XNIO version 3.3.1.Final
Okt 07, 2015 10:56:46 AM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.1.Final
Okt 07, 2015 10:56:46 AM org.jboss.remoting3.EndpointImpl <clinit>
INFO: JBoss Remoting version 4.0.9.Final
Okt 07, 2015 10:56:47 AM org.jboss.ejb.client.remoting.VersionReceiver handleMessage
INFO: EJBCLIENT000017: Received server version 2 and marshalling strategies [river]
Okt 07, 2015 10:56:47 AM org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver associate
INFO: EJBCLIENT000013: Successful version handshake completed for receiver context EJBReceiverContext{clientContext=org.jboss.ejb.client.EJBClientContext@396f6598, receiver=Remoting connection EJB receiver [connection=Remoting connection <5076c986>,channel=jboss.ejb,nodename=deniss-mbp]} on channel Channel ID a99e0c16 (outbound) of Remoting connection 52feb982 to localhost/127.0.0.1:8080
Okt 07, 2015 10:56:47 AM org.jboss.ejb.client.EJBClient <clinit>
INFO: JBoss EJB Client version 2.1.1.Final
Okt 07, 2015 10:56:47 AM org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver handleEnd
INFO: EJBCLIENT000016: Channel Channel ID a99e0c16 (outbound) of Remoting connection 52feb982 to localhost/127.0.0.1:8080 can no longer process messages
```


----------

