Я создал проект EJB с Eclipse IDE. Мой сервер приложений - Glassfish 4. И база данных, которую я использую, - это Oracle. Теперь, когда я запускаю код, я получил сообщение об ошибке:Проект EJB выбрасывает WELD-001408 Исключение: Неудовлетворенные зависимости
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Невыполненные зависимости для типа Set <Service> с отборочными @default в точке впрыска
Посмотрите мои комментарии ниже.
Заказчик:
package de.java2enterprise.onlineshop.ejb;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String email;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
RegisterBean:
package de.java2enterprise.onlineshop.ejb;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class RegisterBean implements RegisterBeanRemote, RegisterBeanLocal {
@PersistenceContext
private EntityManager em;
public RegisterBean() {
}
@Override
public String persist(String email, String password) {
Customer customer = new Customer();
customer.setEmail(email);
customer.setPassword(password);
em.persist(customer);
return email + " persisted";
}
}
RegisterBeanLocal:
package de.java2enterprise.onlineshop.ejb;
import javax.ejb.Local;
@Local
public interface RegisterBeanLocal {
public abstract String persist(
String email,
String password);
}
RegisterBeanRemote:
package de.java2enterprise.onlineshop.ejb;
import javax.ejb.Remote;
@Remote
public interface RegisterBeanRemote {
public abstract String persist(
String email,
String password);
}
И последнее это мой RegisterController который впрыскивает RegisterBeanLocal Касс:
package de.onlineshop_web.bean;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import de.java2enterprise.onlineshop.ejb.RegisterBeanLocal;
@Named
@RequestScoped
public class RegisterController implements Serializable {
private static final long serialVersionUID = 1L;
private String email;
private String password;
@EJB
private RegisterBeanLocal registerBeanLocal;
public String persist() {
String msg = registerBeanLocal.persist(email, password);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));
return "register";
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Если вы используете guava, обновите до последней версии guava, используйте последнюю версию CDI (сварка), а в вашем beans.xml укажите '' 'bean-discovery-mode =" annotated "' '' – maress
@maress, похоже, хороший момент. Набор идет от Guava, и есть эта знаменитая проблема с Guava и CDI, для которой был выпущен технический релиз спецификации CDI. Более подробную информацию о проблеме с guava можно найти здесь: https://code.google.com/p/guava-libraries/issues/detail?id=1433 –
OndrejM
Возможный дубликат [При добавлении зависимостей: сбой внедрения CDI, недопустимые зависимости для типа Set с квалификаторами @Default] (http://stackoverflow.com/questions/30956334/when-adding-dependency-cdi-deployment-failure-unsatisfied-dependencies-for-typ) –