Informationen zu dem Problem, dass `` `javax.ejb.EJBException``` auftritt, wenn versucht wird, Datenbankinformationen in der Ansicht anzuzeigen. Ich habe versucht, meine Arbeit bis zur Lösung als Memorandum zusammenzufassen.
① Speichern Sie den eingegebenen Wert in der Datenbank ② Zeigen Sie die in der Datenbank gespeicherten Informationen auf der Seite an
Als ich ② mit dem folgenden Code ausführte, bekam ich einen Fehler `` `javax.ejb.EJBException```.
index.xhtml (Unter dem Body-Tag)
<h2>Daten erstellen</h2>
<h:form>
<h:panelGrid columns="2">
Nummer:
<h:inputText value ="#{backigBean.number}" />
Name:
<h:inputText value ="#{backigBean.name}" />
<h:commandButton value="Erstellen" action="#{backigBean.create}" />
<h:commandButton value="stornieren" type="reset" />
</h:panelGrid>
<br/>
<br/>
<h2>Liste der erstellten Informationen</h2>
<h:dataTable value="#{backigBean.getAll}" var="item">
<h:column>#{item.number}</h:column>
<h:column>#{item.name}</h:column>
<h:column><h:commandLink value="Bearbeiten" action="#{backigBean.toReturn}" /></h:column>
<h:column><h:commandButton value="Löschen" action="#{backigBean.delete(item)}" /></h:column>
</h:dataTable>
<h:commandButton value="Rückkehr" action="#{backigBean.toReturn}" />
</h:form>
BackingBean.java (Geschäftslogikcode)
package backingBeans;
import ejb.DataManager;
import entity.Data;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@SessionScoped
@ManagedBean
public class BackingBean implements Serializable{
private Integer number;
private String name;
@EJB
private DataManager dm;
//Datenspeicher
public String create(){
Data data = new Data();
data.setNumber(number);
data.setName(name);
if(number == null) return null;
try{
dm.create(data);
}catch(javax.ejb.EJBException e){}
clear();
return null;
}
//Holen Sie sich alle Daten aus der DB
public List<Data> getAll(){
return dm.getAll();
}
//Daten löschen
public String delete(Data data){
dm.delete(data);
return null;
}
//Browser löschen
public void clear(){
number = null;
name = null;
}
//Kehren Sie zur gleichen Seite zurück
public String toReturn(){
return null;
}
//Getter & Setter
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Data.java (Datenklasse)
package entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Data implements Serializable{
@Id
private Integer number;
private String name;
public Data(){}
public Data(Integer number, String name){
this.number = number;
this.name = name;
}
//Getter & Setter
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
DataManager.java (Code, der zwischen DB und Daten vermittelt)
package ejb;
import entity.Data;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class DataManager {
@PersistenceContext
private EntityManager em;
//Eingabewert in DB speichern
public void create(Data data){
em.persist(data);
}
//Daten in der Datenbank löschen
public void delete(Data data){
em.remove(em.merge(data));
}
//Holen Sie sich alle Daten in der DB
public List<Data> getAll(){
return em.createNamedQuery("backingBean.getAll").getResultList();
}
}
Terminal
$ ~/Library/Caches
$ rm -rf NetBeans
Starten Sie dann NetBeans neu. ... aber nichts hat sich geändert. (Referenzseite: http://d.hatena.ne.jp/tkrd/20140818/1408315483)
glassfish-resources.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.ClientDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="derby_net_test_appPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="serverName" value="localhost"/>
<property name="portNumber" value="1527"/>
<property name="databaseName" value="test"/>
<property name="User" value="testuser"/>
<property name="Password" value="test"/>
<property name="URL" value="jdbc:derby://localhost:1527/test"/>
<property name="driverClass" value="org.apache.derby.jdbc.ClientDriver"/>
</jdbc-connection-pool>
<jdbc-resource enabled="true" jndi-name="java:app/jdbc/test" object-type="user" pool-name="derby_net_test_appPool"/>
</resources>
In diesem Ressourcen-Tag heißt es möglicherweise: "In diesem Projekt stellt der Server eine Verbindung zu dieser Datenbank her." Wenn ich eine Verbindung zu mehreren Datenbanken herstelle, werden automatisch viele Datenbankinformationen generiert, sodass der Server meiner Meinung nach nicht weiß, mit welcher Datenbank eine Verbindung hergestellt werden soll ... Bearbeiten Sie daher das Ressourcen-Tag so, dass es in dieser Datei nur einmal angezeigt wird.
Dies löst das Serverproblem!
Diesmal habe ich einen weiteren Fehler bekommen. Es scheint, dass getAll nicht gut ist, also ändern Sie den relevanten Teil der Ansichtsdatei in alle.
index.xhtml
...(Kürzung)
<h2>Liste der erstellten Informationen</h2>
<h:dataTable value="#{backigBean.all}" var="item">
Dann wird `javax.ejb.EJBException
`erneut angezeigt.
Ändern Sie daher den Code von DataManager in die folgende Funktion.
DataManager
//...(Kürzung)
//Holen Sie sich alle Daten in der DB
public List<Data> getAll(){
//return em.createNamedQuery("backingBean.getAll").getResultList();Wechseln Sie hier zu
return em.createQuery("SELECT c FROM Data c").getResultList();
}
gerührt! !!
Recommended Posts