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:
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:
CustomerDAO:
CustomerBean:
CustomerBEanTester:
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:
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:
Java:
@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:
Java:
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:
Java:
@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:
Java:
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());
}
}