EJB aus JSF Anwendung aufrufen

inv_zim

Gesperrter Benutzer
Hallo,

ich habe ein Problem, welches wahrscheinlich einfach ein Denkfehler ist, aber ich blicke so langsam selbst nicht mehr so durch was ich da tue, vielleicht sieht ja jemand von euch etwas?

Ich möchte eine EJB aus einer JSF Anwendung heraus aufrufen. Eigentlich eine simple Sache. Die Anwendung ist in einem EAR gepackt und enthält mehrere WAR und EJB Module. Das Projekt wird mit Maven realisiert. Mein Setup:

Business-Interface:
Java:
public interface PropertyFacade {
    
    public Property fetchForPropertyKey(String artikelNummerKurz);

    public void create(Property entity);

    public void edit(Property entity);

    public void remove(Property entity);

    public Property find(Object id);

    public List<Property> findAll();

    public List<Property> findRange(int[] range);

    public int count();
}

EJB:
Java:
@Stateless
@Local
public class PropertyFacadeBean extends AbstractFacade<Property> implements PropertyFacade {

    @PersistenceContext(unitName = "mssqlPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public PropertyFacadeBean() {
        super(Property.class);
    }

    @Override
    public Property fetchForPropertyKey(String propertyKey) {
        CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<Property> cq = cb.createQuery(Property.class);
        Root<Property> sendung = cq.from(Property.class);

        Predicate property = cb.equal(sendung.get(Property_.propertyKey), propertyKey);

        cq.select(sendung).where(cb.equal(property, propertyKey));

        return getEntityManager().createQuery(cq).getSingleResult();
    }
}

JSF Backing Bean (in einem WAR):
Java:
@Named
@RequestScoped
public class PropertyBean implements Serializable {

    @EJB
    private PropertyFacade propertyFacade;

    public List<Property> fetchAll() {
        return propertyFacade.findAll();
    }

    public void create(Property property) {
        propertyFacade.create(property);
    }

    public void remove(Property property) {
        propertyFacade.remove(property);
    }

    public void edit(Property property) {
        propertyFacade.edit(property);
    }
}

Sobald ich diese Konfiguration in einem EAR gepackt auf einem Glassfish 3.1 deploye, bekomme ich die Fehlermeldung:


Code:
Schwerwiegend: Exception while deploying the app [de.ursachemie_Ursa-ear_ear_1.0-SNAPSHOT] : Cannot resolve reference Remote ejb-ref name=de.ursachemie.kennzeichnung.web.jsf.PropertyBean/propertyFacade,Remote 3.x interface =de.ursachemie.kennzeichnung.business.bean.facades.PropertyFacade,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session because there are 7 ejbs in the application with interface de.ursachemie.kennzeichnung.business.bean.facades.PropertyFacade.

Die Fehlermeldung ist ja eigentlich eindeutig: In meinem EAR gibt es 7 Implementierungen von PropertyFacade. Das stimmt aber leider nicht. Alle Abhängigkeiten zum EJB Modul sind in den Maven POMs mit "provided" markiert damit es nicht erneut kopiert wird, das EJB Modul dürfte demnach auch nur einmal existieren und nicht 7(!) mal. Ich habe die Art, auf die EJB zuzugreifen mit "The Java EE 6 Tutorial" abgeglichen und seit gestern mehrere Artikel und Problemlösungen im Web nachgeschlagen (CodeRanch, Stackoverflow) und wenn ich nicht allzu betriebsblind geworden bin, müsste das doch der richtige Weg sein, oder?

Danke schonmal fürs Lesen und Gruß,

Tim

Edit: Ich bin zusätzlich noch über die Aussage gestolpert, dass @Inject gegenüber @EJB vorzuziehen ist. Davon abgesehen, dass in der Anwendung ja trotzdem ein Problem zu bestehen scheint, funktioniert das Deployment, wenn ich @Inject statt @EJB benutze. Der injizierte Entitymanager ist dann aber null. Ich glaube, ich werde Landschaftsgärtner....
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
Funktioniert die Anwendung wenn du sie aus der Entwicklungsumgebung (Eclipse/NetBeans) startest?

Wenn ja, scheint es am EAR zu liegen und Maven hat ev. zuviel oder zuwenig reingepackt.
Zeig mal das Ear welches Maven erstellt.
 

inv_zim

Gesperrter Benutzer
Hi tagedieb,

Vielen, vielen Dank für die Idee noch einmal genauer ins EAR zu schauen! Das betreffende EJB Modul war im lib Ordner abgelegt, da ich in der POM des EAR bei der Dependency den Tag
Code:
<type>ejb</type>
nicht drin hatte. Habe die Abhängigkeit wohl über die IDE hinzugefügt und die hat es als Jar angesehen.

Danke und schönen Tag noch,

Tim
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Benutzerrecht in der Anwendung neu strukturieren Allgemeines EE 5
D Praktische Anwendung des MVC Allgemeines EE 2
T Java ServerFaces Anwendung mit XHTML & CSS Allgemeines EE 1
E modulare Java-Anwendung verteilen (Camel) Allgemeines EE 0
M Zeitgesteuertes Ereignis in einer dynamic web module Anwendung (eclipse) Allgemeines EE 3
G Unit Test einer JavaEE Anwendung schlägt fehl. JNDI Name nicht gefunden. Allgemeines EE 3
G JavaEE Anwendung Testen Allgemeines EE 0
R Wiederverwendbarkeit in JavaEE Anwendung Allgemeines EE 2
OnDemand GUI in einer JavaEE Anwendung Allgemeines EE 6
C Fotoverwaltung in einer Multi-User Anwendung Allgemeines EE 4
W Servletfehler - kleine Anwendung Allgemeines EE 1
R Test einer JEE-Anwendung Allgemeines EE 3
S Verteilte Anwendung mit JavaEE Allgemeines EE 3
J paar Fragen zu JSF2/JEE6 Anwendung mit JBoss 7.1.1 Allgemeines EE 6
F eigene Anwendung per Servlet Container starten Allgemeines EE 9
M JavaEE Anwendung weitergeben Allgemeines EE 24
J Anwendung mit Model 2 Architektur Allgemeines EE 3
T erste Anwendung in JBoss deployen Allgemeines EE 3
T Sinnvoll/machbar? Web Anwendung und EJB auf versch. Servern? Allgemeines EE 7
Y Zugriff auf Files aus einer EAR Anwendung Allgemeines EE 8
slawaweis CMS Unterbau für eine Web 2.0 Anwendung Allgemeines EE 4
H Installer für Tomcat-Anwendung Allgemeines EE 5
Java.getSkill() Anwendung Beans für Formulare Allgemeines EE 5
K Probleme mit Enterprise Anwendung Allgemeines EE 5
J JSF 1.2-Anwendung mit Eclipse Galileo Allgemeines EE 1
MQue URL im Brower beim Starten der Anwendung richtig setzen Allgemeines EE 4
S Session in eine andere Anwendung übergeben Allgemeines EE 2
G JSF Anwendung und individuelle Kofiguration Allgemeines EE 6
M Gelegentlicher Absturz Tomcat Anwendung: PermGen Space Allgemeines EE 6
K Java Application Server + ganttproject *.jar Anwendung Allgemeines EE 6
K JSF Test Anwendung ausführen funktioniert nicht Allgemeines EE 7
M Fehler in JSF Anwendung Allgemeines EE 4
M Web Anwendung soll auf Basisobjekte zugreifen können Allgemeines EE 2
M Intranet-Anwendung auf Basis von JSF Allgemeines EE 11
N Tomcat GWT-Anwendung - An beliebiger Stelle schreiben Allgemeines EE 2
ARadauer aus j2se anwendung auf j2ee elemente zugreifen Allgemeines EE 2
S Keystore Zugriff aus Web-Anwendung Allgemeines EE 2
P Testen von Struts-Anwendung Allgemeines EE 7
E freien Forum-Anwendung Allgemeines EE 8
T eine web anwendung bereitstellen ? Allgemeines EE 5
P Struts Anwendung- FormBean Tabelle mit input type=text Allgemeines EE 2
G Anwendung mit Web- und Windowsclient Allgemeines EE 5
A Anwendung auf WebSphere deployen Allgemeines EE 3
W Woraus baut man eine Super-Business-Anwendung? Allgemeines EE 5
T URL der Anwendung bekommen. Allgemeines EE 2
OnDemand Deploy war File wie aufrufen? Allgemeines EE 10
B Intellij + WebSphere, Servlets aufrufen Allgemeines EE 1
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
C Aus MessageDrivenBean entfernte SessionBean aufrufen Allgemeines EE 7
GFEMajor EJB auf externem Server aus GWT aufrufen Allgemeines EE 13
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
M JSF Bean-Property mit Parameter aufrufen Allgemeines EE 12
E HTTP-GET// -->Eine URL aufrufen, aber nicht dahin navigie Allgemeines EE 2
B .net-Webservice aufrufen Allgemeines EE 9
L Servlet kann Funktion nicht aufrufen Allgemeines EE 3
M jsp aus java aufrufen Allgemeines EE 3
K Servlet per Formular aufrufen Allgemeines EE 8
H WebService mittels SessionBean aufrufen? Allgemeines EE 7
S dringend: jsf: set-Methode aufrufen Allgemeines EE 7
N JSP kann Servlet nicht aufrufen! :-( Allgemeines EE 2
V Servlet aufrufen aus JSF Allgemeines EE 5
P Einen TimerTask automatisch aufrufen Allgemeines EE 4
W Servlet aufrufen Allgemeines EE 6
E Methoden einer Bean aufrufen? Allgemeines EE 4
G Servlet beim Absenden eines Formulars aufrufen Allgemeines EE 11
C Servlet von Frame aus aufrufen Allgemeines EE 3
F Servlets aufrufen Allgemeines EE 5
J Jsp in anderer jsp aufrufen / Eventhandling Allgemeines EE 8
padde479 Servlet aufrufen Allgemeines EE 3
D JBOSS war aufrufen ohne Projektnamen Allgemeines EE 2
M Portlet von JSPs aus aufrufen Allgemeines EE 3
J JSP aus Servlet aufrufen. Allgemeines EE 2
A Anderes Servlet aufrufen Allgemeines EE 4
K URL aus Servlet aufrufen Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben