JSF Webanwebdung mit JPA

twolf123

Grünschnabel
Hallo zusammen,

Ich versuche seit geraumer Zeit eine simple JSF CRUD Webanwendung zum laufe zu bringen, aber Sie will einfach nicht so richtig.

Mein Ziel:

  • Eine Webanwendung mit JSF (JSF 1.2 "Project Mojarra" meines wissens) auf dem JBoss 4.2.2 AS.
  • Verwendung der JPA mit Hibernate, Anbindung an eine MySQL Datenbank (MySQL 5.0.5)
  • IDE unabhängiges Projekt, sprich ich verwende Maven2 für das Projekt.

Derzeit ist mein größtes Problem wohl die EntityManager Injection meiner Controller Klasse. Mit einer NullPointerException ist schon beim einem simplen listing der Datenbankeinträge Schluss wenn der Controller über den EntityManager einen Query ausführen will.

Meine persistence.xml liegt in meiner war Datei in dem Pfad easyscrumdb.war/WEB-INF/classes/META-INF/persistence.xml und schaut wie folgt aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <!--
    <persistence-unit name="easyscrumdb" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/easyscrumDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
    -->
    
    <persistence-unit name="easyscrumdb" transaction-type="RESOURCE_LOCAL">
        <properties>  
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />         
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
            <property name="hibernate.connection.username" value="root" />  
            <property name="hibernate.connection.password" value="passwd" />  
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/easyscrum" />  
            
            <property name="hibernate.hbm2ddl.auto" value="update" />  
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />  
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true" />

        </properties>
    </persistence-unit>
    
</persistence>

Ich würde gerne auf das deployen einer DataSource *-ds.xml die an JNDI gebunden ist verzichten. Meine ManagedBeans sollen ohne Session-Bean Facade schnick-schnack einfach direkt mit dem EntityManager agieren können. Ist es denn überhaupt möglich ohne eine EJB-Container auszukommen? Davon gehe ich bisher aus.

So versucht meine Controller Klasse mit einem EntityManager zu arbeiten:

Code:
public class DeveloperController {

    private int batchSize = 20;
    private int firstItem = 0;
    private Developer developer;
    private DataModel model;
    /**
     *
     */
    @SuppressWarnings("unused")
    @Resource
    private javax.transaction.UserTransaction utx;
    @PersistenceContext(unitName="easyscrumdb")
    private EntityManager em;

    /** Creates a new instance of DeveloperController */
    public DeveloperController() {
    }
    
    private EntityManager getEntityManager(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("easyscrumdb" );
        return emf.createEntityManager();
    }

    public static void addErrorMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
        FacesContext fc = FacesContext.getCurrentInstance();
        fc.addMessage(null, facesMsg);
    }

    public static void addSuccessMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
        FacesContext fc = FacesContext.getCurrentInstance();
        fc.addMessage("successInfo", facesMsg);
    }

    public Developer getDeveloper() {
        return developer;
    }

    public void setDeveloper(Developer developer) {
        this.developer = developer;
    }

    public DataModel getDevelopers() {
        try {
            em = this.getEntityManager();
            Query q = em.createQuery("select object(o) from Developer as o");
            q.setMaxResults(batchSize);
            q.setFirstResult(firstItem);
            model = new ListDataModel(q.getResultList());
            return model;
        } finally {
            em.close();
        }
    }

    public String createSetup() {
        this.developer = new Developer();
        return "developer_create";
    }

    public String create() {
        try {
            utx.begin();
            em.persist(developer);
            utx.commit();
            addSuccessMessage("Developer was successfully created.");

        } catch (Exception ex) {
            try {
                addErrorMessage(ex.getLocalizedMessage());
                utx.rollback();
            } catch (Exception e) {
                addErrorMessage(e.getLocalizedMessage());
            }
        } finally {
            em.close();
        }
        return "developer_list";
    }
}

Der Vollständigkeit halber Auszüge aus der faces-config.xml und der JSP Seite.


Controller:

Code:
<managed-bean>
        <managed-bean-name>developer</managed-bean-name>
        <managed-bean-class>de.twolf.easyscrum.controller.DeveloperController</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

View:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html">
    <jsp:directive.page contentType="text/html" pageEncoding="UTF-8" />
    <f:view>
        <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
        <h1>Listing Developer</h1>
        <h:form>
            <h:commandLink action="#{developer.createSetup}" value="New Developer"/>
            
            <h:dataTable  var="item" value="#{developer.developers}" >
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Id" />
                    </f:facet>
                    <h:outputText value="#{item.id}" />
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Name" />
                    </f:facet>
                    <h:outputText value="#{item.name}" />
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Email" />
                    </f:facet>
                    <h:outputText value="#{item.email}" />
                </h:column>
            </h:dataTable>
            
        </h:form>
    </f:view>
</jsp:root>

Serveroutput nach hot-deploy:

Code:
09:58:33,962 INFO  [config] Initializing Sun's JavaServer Faces implementation (1.2_04-b16-p02) for context '/easyscrum'

Fehler Output nach dem Aufruf des gewünschten Listings der Entities:

Code:
10:00:32,701 ERROR [JBossInjectionProvider] Injection failed on managed bean.
javax.naming.NameNotFoundException: de.twolf.easyscrum.controller.DeveloperController not bound
        at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
        at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
        at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
        at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.apache.catalina.util.DefaultAnnotationProcessor.lookupFieldResource(DefaultAnnotationProcessor.java:203)
        at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:135)
        at org.jboss.web.jsf.integration.injection.JBossInjectionProvider.inject(JBossInjectionProvider.java:104)
        at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:298)
        at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:527)
        at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
        at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:45)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:86)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
        at javax.faces.component.UIData.getValue(UIData.java:582)
        at javax.faces.component.UIData.getDataModel(UIData.java:1063)
        at javax.faces.component.UIData.setRowIndex(UIData.java:417)
        at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
        at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
        at javax.faces.component.UIData.encodeBegin(UIData.java:879)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
        at java.lang.Thread.run(Thread.java:619)
10:00:33,249 INFO  [Version] Hibernate EntityManager 3.2.1.GA
10:00:33,381 INFO  [Version] Hibernate Annotations 3.2.1.GA
10:00:33,424 INFO  [Environment] Hibernate 3.2.4.sp1
10:00:33,453 INFO  [Environment] hibernate.properties not found
10:00:33,461 INFO  [Environment] Bytecode provider name : javassist
10:00:33,479 INFO  [Environment] using JDK 1.4 java.sql.Timestamp handling
10:00:34,610 INFO  [AnnotationBinder] Binding entity from annotated class: de.twolf.easyscrum.model.Developer
10:00:34,649 INFO  [QueryBinder] Binding Named query: Developer.findById => SELECT d FROM Developer d WHERE d.id = :id
10:00:34,649 INFO  [QueryBinder] Binding Named query: Developer.findByName => SELECT d FROM Developer d WHERE d.name = :name
10:00:34,650 INFO  [QueryBinder] Binding Named query: Developer.findByEmail => SELECT d FROM Developer d WHERE d.email = :email
10:00:34,825 INFO  [EntityBinder] Bind entity de.twolf.easyscrum.model.Developer on table DEVELOPER
10:00:35,606 INFO  [DriverManagerConnectionProvider] Using Hibernate built-in connection pool (not for production use!)
10:00:35,606 INFO  [DriverManagerConnectionProvider] Hibernate connection pool size: 20
10:00:35,606 INFO  [DriverManagerConnectionProvider] autocommit mode: true
10:00:35,607 INFO  [DriverManagerConnectionProvider] using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/easyscrum
10:00:35,607 INFO  [DriverManagerConnectionProvider] connection properties: {user=root, password=bendavis, autocommit=true, release_mode=auto}
10:00:37,619 INFO  [SettingsFactory] RDBMS: MySQL, version: 5.0.51b-community-nt
10:00:37,619 INFO  [SettingsFactory] JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.6 ( Revision: ${svn.Revision} )
10:00:37,722 INFO  [Dialect] Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
10:00:37,740 INFO  [TransactionFactoryFactory] Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
10:00:37,751 INFO  [TransactionManagerLookupFactory] No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
10:00:37,979 INFO  [SettingsFactory] Automatic flush during beforeCompletion(): disabled
10:00:37,980 INFO  [SettingsFactory] Automatic session close at end of transaction: disabled
10:00:37,981 INFO  [SettingsFactory] JDBC batch size: 15
10:00:37,981 INFO  [SettingsFactory] JDBC batch updates for versioned data: disabled
10:00:37,984 INFO  [SettingsFactory] Scrollable result sets: enabled
10:00:37,984 INFO  [SettingsFactory] JDBC3 getGeneratedKeys(): enabled
10:00:37,984 INFO  [SettingsFactory] Connection release mode: auto

10:00:37,987 INFO  [SettingsFactory] Maximum outer join fetch depth: 2
10:00:37,987 INFO  [SettingsFactory] Default batch fetch size: 1
10:00:37,988 INFO  [SettingsFactory] Generate SQL with comments: disabled
10:00:37,989 INFO  [SettingsFactory] Order SQL updates by primary key: disabled
10:00:37,989 INFO  [SettingsFactory] Order SQL inserts for batching: disabled
10:00:37,989 INFO  [SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
10:00:38,009 INFO  [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
10:00:38,010 INFO  [SettingsFactory] Query language substitutions: {}
10:00:38,010 INFO  [SettingsFactory] JPA-QL strict compliance: enabled
10:00:38,010 INFO  [SettingsFactory] Second-level cache: enabled
10:00:38,010 INFO  [SettingsFactory] Query cache: disabled
10:00:38,010 INFO  [SettingsFactory] Cache provider: org.hibernate.cache.EhCacheProvider
10:00:38,031 WARN  [lifecycle] executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@17e9134) threw exception
javax.faces.FacesException: org.apache.jasper.el.JspELException: /developer/List.jsp(12,71) '#{developer.developers}' Error reading 'developers' on type de.twolf.easyscrum.controller.DeveloperController
        at javax.faces.component.UIData.getValue(UIData.java:585)
        at javax.faces.component.UIData.getDataModel(UIData.java:1063)
        at javax.faces.component.UIData.setRowIndex(UIData.java:417)
        at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
        at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
        at javax.faces.component.UIData.encodeBegin(UIData.java:879)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.jasper.el.JspELException: /developer/List.jsp(12,71) '#{developer.developers}' Error reading 'developers' on type de.twolf.easyscrum.controller.DeveloperController
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
        at javax.faces.component.UIData.getValue(UIData.java:582)
        ... 34 more
Caused by: java.lang.NullPointerException
        at de.twolf.easyscrum.controller.DeveloperController.getDevelopers(DeveloperController.java:76)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:97)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
        ... 35 more
10:00:38,515 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
        at de.twolf.easyscrum.controller.DeveloperController.getDevelopers(DeveloperController.java:76)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:97)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
        at javax.faces.component.UIData.getValue(UIData.java:582)
        at javax.faces.component.UIData.getDataModel(UIData.java:1063)
        at javax.faces.component.UIData.setRowIndex(UIData.java:417)
        at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
        at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
        at javax.faces.component.UIData.encodeBegin(UIData.java:879)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
        at java.lang.Thread.run(Thread.java:619)

Ich habe echt ne menge gegoogelt, tutorials gelesen usw. Keine Ahnung wie man das mit der Injection bewerkstelligen soll - oder wie man das Packaging richtig anstellt. Beim Deployment einer jar mit nur den Controllern und Entitiy Klassen incl. persistence.xml sieht der Server output jedenfalls weitaus vielversprechender aus sprich: Anlegen des Datenbankschemas usw.

Kann mit wer helfen? :)


MfG

Tobias
 
Zuletzt bearbeitet:
Naja, der Controller Code hätte gereicht. ;) Du wirfst da unheimlich viel durcheinander. Entweder benutzt du einen EntityManager ODER eine EntityManagerFactory. Beides zu benutzen verwirrt und stiftet Unruhe.

EntityManager sind NICHT threadsafe, daher verwendet man sie ausschließlich in gemanagten Umgebungen (SessionBeans z.B.). Ich kenn mich zu wenig mit JSF aus um zu wissen was so ein Controller nun genau ist. Sicher geht man eigentlich immer mit einer EntityManagerFactory. Die muss man sich dann allerdings per @PersistenceUnit injizieren lassen. Grundsätzlich brauchst du aber einen Container, um dir die Ressourcen per DI injizieren zu lassen. D.h. Spring oder EJB ist notwendig.

Gruß
Ollie
 
Hi,

Nun, kann gut sein das ich das etwas durcheinander werfe, dies ist das erste mal das ich mich mit den neuen Konzepten von JEE beschäftige.

Ich habe einmal die Annotation in der Controller Klasse geändert:

Code:
@PersistenceUnit(unitName="easyscrumdb")
 private EntityManagerFactory emf;

...

 private EntityManager getEntityManager(){
        return emf.createEntityManager();
    }

...

public DataModel getDevelopers() {
        EntityManager em = this.getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from Developer as o");
            q.setMaxResults(batchSize);
            q.setFirstResult(firstItem);
            model = new ListDataModel(q.getResultList());
            return model;
        } finally {
            em.close();
        }
    }

Was aber leider nicht viel geholfen hat.

Code:
ERROR [JBossInjectionProvider] Injection failed on managed bean.
...

(Leute mit dem selben Problem im JBoss Forum, ich habe es gerade erst gefunden)
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3993171#3993171

Die JPA ist doch nicht zwangsläufig an einen EJB Container gebunden oder? Also wie gesagt, ich würde ganz gerne im Web-Tier verbleiben, sprich es bei einer simplen Webanwendung belassen (Sollte beispielsweise auch auf Tomcat, Jetty usw laufen).

(Siehe http://java.sun.com/developer/technicalArticles/J2EE/injection/)


Gruß

Tobias
 
Du kannst JPA natürlich auch ohne EJB benutzen. Dann musst du dir die EntityManagerFactory allerdings selbst erzeugen. @PersistenceUnit ist für den Container.

Gruß
Ollie
 

Neue Beiträge

Zurück