EJB - property nicht vorhanden

FINF_AW_Alex

Aktives Mitglied
Hallo miteinander, ich bin werdender Fachinformatiker im Praktikum und stehe öfters mal vor so manchem Problem. Die Zeit ist meist knapp und in meinem Betrieb ist leider nur der Chef ein Programmierer aber wie chef´s so sind hat er selten Zeit. Desshalb frage ich mal hier ob mir jemand vielleicht helfen kann.

Ich arbeite mich gerade durch ein Buch von Galileo Press (Professionell entwickeln mit Java EE7) und versuche mir gerade den Umgang JavaPersistenceAPI beizubringen weil ich im Rahmen meines Praktikums eine JSF - Web-Aplikation mit Datenbankanbindung entwickeln soll.

zum Problem:

Ich habe eine EJB erstellt in der einfach nur ein EntityManager Objekt erstellt wird, es wird abgefragt ob eine Verbindung besteht und bei bestehender Verbindung der String "true" zurückgegeben.

Diesen String frage ich über eine EL-Expression in der index.xhtml ab.

Leider bekomme ich jedes mal die Fehlermeldung das die Klasse welche die Methode enhält nicht die entsprechende Property hat.

Hier mal die screens /code dazu ich hoffe mir kann jemand helfen.

Gruß Alex

Code:
package com.SWE;

import javax.ejb.Stateful;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author schmack
 */
@Named
@Stateful
public class TestBean {
    
    @PersistenceContext
    private EntityManager em;
       
    public String test(){

        String s = "false";
        
        if ( em.isOpen()== true){
            s = "true";
        }
        
        em.close();
        
        return s;
    }


HTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        
        <h:form><p>
            <h:outputLabel for="con" value="connection established: "/>
            <h:inputText id="con" readonly="true" value="#{testBean.test}"/></p>
        </h:form>
        
    </h:body>
</html>


property_f_1.PNG
 
Zuletzt bearbeitet:
Objekt-Attribute, auf die du per EL zugreifen willst, sollten als private deklariert sein und über öffentliche getter/setter verfügen.

So in etwa sollte es laufen:

Java:
@Named
@Stateful
public class TestBean {
    
    @PersistenceContext
    private EntityManager em;
    
    private String test;
  
    // Initialisere test nach erfolgter ressorce injection
    @PostConstruct
    private void init() {
        test = em.isOpen() ? "true" : "false";
    }
     
    // Öffentlicher getter für test
    public String getTest() {
        return this.test;
    }     
}
 
Hey stg !

Danke für die Antwort, das sieht auch super hübsch aus aber leider bekomme ich nach der von Dir vorgeschlagenen Änderung das hier an die Nase geknallt... :-(

Anhang anzeigen 6968


Kannst Du (oder jemand anderes) was damit was anfangen?

Grüße 🙂

hier nochmal der Code:

Java:
package com.SWE;

import javax.annotation.PostConstruct;
import javax.ejb.Stateful;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author schmack
 */
@Named
@Stateful
public class TestBean {
    
    @PersistenceContext
    private EntityManager em;
       
    private String test;
    
    @PostConstruct
    private void init(){
     test = em.isOpen() ? "true" : "false" ;
     em.close();
    }
    
    public String getTest(){    
        return this.test;
    }
}
 
Zuletzt bearbeitet:
Der Anhang funktioniert leider nicht .... ich hab das Code-Snippet von mir auch nicht getestet, sondern nur "so ungefähr" aus dem Kopf runtergeschrieben.

Schau doch noch mal nach dem Anhang und/oder poste den entsprechenden Stacktrace o.Ä...
 
hier auch mal der Ausschnitt aus dem Buch:

Ich habe dann ja einfach nur den Rückgabewert von bool auf String ändern wollen...

EJB.PNG
 
Zuletzt bearbeitet:

Zurück
Oben