jpa - Why is my EntityManager not properly injected? -


i tried build project manages employees using jpa , beans , jsf. started trying manipulated existing user manually created in database. (before tried read data database, worked well) tried in various ways, getting different errors, assume somethinbg wrong. server wildfly 8 , database postgresql.

15:09:43,410 error [io.undertow.request] (default task-14) ut005023: exception handling request /time/modifyuser.jsf: javax.servlet.servletexception: bei der ressourcen-einspeisung auf dem verwalteten bean employeemanagertool ist ein fehler aufgetreten.     @ javax.faces.webapp.facesservlet.service(facesservlet.java:659) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8]     @ io.undertow.servlet.handlers.servlethandler.handlerequest(servlethandler.java:85) [undertow-servlet-1.1.0.final.jar:1.1.0.final]   //... caused by: javax.naming.namingexception: jbas011878: failed lookup env/tbp.wam.tools.employeemanagertool/entitymanager [root exception java.lang.nullpointerexception]     //... caused by: java.lang.nullpointerexception     @ org.jboss.as.jpa.container.extendedpersistencedeepinheritance.findextendedpersistencecontext(extendedpersistencedeepinheritance.java:49) [wildfly-jpa-8.2.0.final.jar:8.2.0.final]     @ org.jboss.as.jpa.injectors.persistencecontextinjectionsource$persistencecontextjndiinjectable.getreference(persistencecontextinjectionsource.java:168) [wildfly-jpa-8.2.0.final.jar:8.2.0.final]     @ org.jboss.as.naming.servicebasednamingstore.lookup(servicebasednamingstore.java:131)     ... 93 more 

so here bean:

    @stateless(name = "employeemanagertool")             public class employeemanagertool implements employeemanagertoollocal {                  @persistencecontext(type=persistencecontexttype.extended)                 private entitymanager entitymanager;                  public employeemanagertool() {                 }                  public void modifyemployee() {                     employee employee = entitymanager.find(employee.class, 1);                     employee.setfirstname("nnf");                     employee.setlastname("nnl");                     entitymanager.persist(employee);                 } //just trying alter first entry, there 1 id=1     // other crud methods         } 

my entity looks this:

@entity @table(name = "tbl_employee") public class employee implements serializable { private string firstname;     private string lastname;     private string username;     private string password;      @id     @generatedvalue(strategy = generationtype.auto)     private int id;      @version     private int version;      public employee() {} //some getter , setter... } 

my jsf file:

<!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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"     xmlns:f="http://java.sun.com/jsf/core">  <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>ejb-in-ear</title> </head>  <body>  <h:form>     <h:commandbutton value="save user" action="#{employeemanagertool.modifyemployee()}"/> </h:form> </body> </html> 

my persistence.xml :

<?xml version="1.0" encoding="utf-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">     <persistence-unit name="timebudget" transaction-type="jta">         <!-- using hibernate jpa provider -->         <provider>org.hibernate.jpa.hibernatepersistenceprovider</provider>          <!-- datenquelle ist postgres -->         <jta-data-source>java:jboss/datasources/tbpds</jta-data-source>          <properties>             <!-- konfiguration für den postgresql-dialekt -->             <property name="hibernate.dialect" value="org.hibernate.dialect.postgresqldialect" />              <!-- hibernate einstellungen -->             <property name="hibernate.hbm2ddl.auto" value="update" />               <property name="hibernate.show_sql" value="false" />             <property name="hibernate.format_sql" value="false" />             <property name="hibernate.use_sql_comments" value="false" />             <property name="hibernate.archive.autodetection" value="class" />                    </properties>      </persistence-unit> </persistence> 

pleaaase, me. i'm stuck @ whole weekend. don't i'm doing wrong...

standalone.xml:

<?xml version="1.0" ?>  <server xmlns="urn:jboss:domain:2.2">      <extensions>         <extension module="org.jboss.as.clustering.infinispan"/>         <extension module="org.jboss.as.connector"/>         <extension module="org.jboss.as.deployment-scanner"/>         <extension module="org.jboss.as.ee"/>         <extension module="org.jboss.as.ejb3"/>         <extension module="org.jboss.as.jaxrs"/>         <extension module="org.jboss.as.jdr"/>         <extension module="org.jboss.as.jmx"/>         <extension module="org.jboss.as.jpa"/>         <extension module="org.jboss.as.jsf"/>         <extension module="org.jboss.as.logging"/>         <extension module="org.jboss.as.mail"/>         <extension module="org.jboss.as.naming"/>         <extension module="org.jboss.as.pojo"/>         <extension module="org.jboss.as.remoting"/>         <extension module="org.jboss.as.sar"/>         <extension module="org.jboss.as.security"/>         <extension module="org.jboss.as.transactions"/>         <extension module="org.jboss.as.webservices"/>         <extension module="org.jboss.as.weld"/>         <extension module="org.wildfly.extension.batch"/>         <extension module="org.wildfly.extension.io"/>         <extension module="org.wildfly.extension.undertow"/>     </extensions>       <management>         <security-realms>             <security-realm name="managementrealm">                 <authentication>                     <local default-user="$local" skip-group-loading="true"/>                     <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>                 </authentication>                 <authorization map-groups-to-roles="false">                     <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>                 </authorization>             </security-realm>             <security-realm name="applicationrealm">                 <authentication>                     <local default-user="$local" allowed-users="*" skip-group-loading="true"/>                     <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>                 </authentication>                 <authorization>                     <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>                 </authorization>             </security-realm>         </security-realms>         <audit-log>             <formatters>                 <json-formatter name="json-formatter"/>             </formatters>             <handlers>                 <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>             </handlers>             <logger log-boot="true" log-read-only="false" enabled="false">                 <handlers>                     <handler name="file"/>                 </handlers>             </logger>         </audit-log>         <management-interfaces>             <http-interface security-realm="managementrealm" http-upgrade-enabled="true">                 <socket-binding http="management-http"/>             </http-interface>         </management-interfaces>         <access-control provider="simple">             <role-mapping>                 <role name="superuser">                     <include>                         <user name="$local"/>                     </include>                 </role>             </role-mapping>         </access-control>     </management>      <profile>         <subsystem xmlns="urn:jboss:domain:logging:2.0">             <console-handler name="console">                 <level name="info"/>                 <formatter>                     <named-formatter name="color-pattern"/>                 </formatter>             </console-handler>             <periodic-rotating-file-handler name="file" autoflush="true">                 <formatter>                     <named-formatter name="pattern"/>                 </formatter>                 <file relative-to="jboss.server.log.dir" path="server.log"/>                 <suffix value=".yyyy-mm-dd"/>                 <append value="true"/>             </periodic-rotating-file-handler>             <logger category="com.arjuna">                 <level name="warn"/>             </logger>             <logger category="org.apache.tomcat.util.modeler">                 <level name="warn"/>             </logger>             <logger category="org.jboss.as.config">                 <level name="debug"/>             </logger>             <logger category="sun.rmi">                 <level name="warn"/>             </logger>             <logger category="jacorb">                 <level name="warn"/>             </logger>             <logger category="jacorb.config">                 <level name="error"/>             </logger>             <root-logger>                 <level name="info"/>                 <handlers>                     <handler name="console"/>                     <handler name="file"/>                 </handlers>             </root-logger>             <formatter name="pattern">                 <pattern-formatter pattern="%d{yyyy-mm-dd hh:mm:ss,sss} %-5p [%c] (%t) %s%e%n"/>             </formatter>             <formatter name="color-pattern">                 <pattern-formatter pattern="%k{level}%d{hh:mm:ss,sss} %-5p [%c] (%t) %s%e%n"/>             </formatter>         </subsystem>         <subsystem xmlns="urn:jboss:domain:batch:1.0">             <job-repository>                 <in-memory/>             </job-repository>             <thread-pool>                 <max-threads count="10"/>                 <keepalive-time time="30" unit="seconds"/>             </thread-pool>         </subsystem>         <subsystem xmlns="urn:jboss:domain:datasources:2.0">             <datasources>                 <datasource jndi-name="java:jboss/datasources/exampleds" pool-name="exampleds" enabled="true" use-java-context="true">                     <connection-url>jdbc:h2:mem:test;db_close_delay=-1;db_close_on_exit=false</connection-url>                     <driver>h2</driver>                     <security>                         <user-name>sa</user-name>                         <password>sa</password>                     </security>                 </datasource>                 <datasource jta="true" jndi-name="java:jboss/datasources/tbpds" pool-name="tbpds" enabled="true" use-ccm="true">                     <connection-url>jdbc:postgresql://localhost:5432/bank</connection-url>                     <driver-class>org.postgresql.driver</driver-class>                     <driver>postgresql-9.4-1201.jdbc4.jar</driver>                     <security>                         <user-name>bank</user-name>                         <password>bank</password>                     </security>                     <validation>                         <validate-on-match>false</validate-on-match>                         <background-validation>false</background-validation>                     </validation>                     <timeout>                         <set-tx-query-timeout>false</set-tx-query-timeout>                         <blocking-timeout-millis>0</blocking-timeout-millis>                         <idle-timeout-minutes>0</idle-timeout-minutes>                         <query-timeout>0</query-timeout>                         <use-try-lock>0</use-try-lock>                         <allocation-retry>0</allocation-retry>                         <allocation-retry-wait-millis>0</allocation-retry-wait-millis>                     </timeout>                     <statement>                         <share-prepared-statements>false</share-prepared-statements>                     </statement>                 </datasource>                 <drivers>                     <driver name="h2" module="com.h2database.h2">                         <xa-datasource-class>org.h2.jdbcx.jdbcdatasource</xa-datasource-class>                     </driver>                 </drivers>             </datasources>         </subsystem>         <subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">             <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:ee:2.0">             <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>             <concurrent>                 <context-services>                     <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>                 </context-services>                 <managed-thread-factories>                     <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>                 </managed-thread-factories>                 <managed-executor-services>                     <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" core-threads="5" max-threads="25" keepalive-time="5000"/>                 </managed-executor-services>                 <managed-scheduled-executor-services>                     <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" core-threads="2" keepalive-time="3000"/>                 </managed-scheduled-executor-services>             </concurrent>             <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/exampleds" jms-connection-factory="java:jboss/defaultjmsconnectionfactory" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:ejb3:2.0">             <session-bean>                 <stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>                 <singleton default-access-timeout="5000"/>             </session-bean>             <pools>                 <bean-instance-pools>                     <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="minutes"/>                     <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="minutes"/>                 </bean-instance-pools>             </pools>             <caches>                 <cache name="simple"/>                 <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>             </caches>             <passivation-stores>                 <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>             </passivation-stores>             <async thread-pool-name="default"/>             <timer-service thread-pool-name="default" default-data-store="default-file-store">                 <data-stores>                     <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>                 </data-stores>             </timer-service>             <remote connector-ref="http-remoting-connector" thread-pool-name="default"/>             <thread-pools>                 <thread-pool name="default">                     <max-threads count="10"/>                     <keepalive-time time="100" unit="milliseconds"/>                 </thread-pool>             </thread-pools>             <default-security-domain value="other"/>             <default-missing-method-permissions-deny-access value="true"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:io:1.1">             <worker name="default"/>             <buffer-pool name="default"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:infinispan:2.0">             <cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan">                 <local-cache name="passivation" batching="true">                     <file-store passivation="true" purge="false"/>                 </local-cache>                 <local-cache name="persistent" batching="true">                     <file-store passivation="false" purge="false"/>                 </local-cache>             </cache-container>             <cache-container name="ejb" default-cache="passivation" module="org.wildfly.clustering.ejb.infinispan" aliases="sfsb">                 <local-cache name="passivation" batching="true">                     <file-store passivation="true" purge="false"/>                 </local-cache>                 <local-cache name="persistent" batching="true">                     <file-store passivation="false" purge="false"/>                 </local-cache>             </cache-container>             <cache-container name="hibernate" default-cache="local-query" module="org.hibernate">                 <local-cache name="entity">                     <transaction mode="non_xa"/>                     <eviction strategy="lru" max-entries="10000"/>                     <expiration max-idle="100000"/>                 </local-cache>                 <local-cache name="local-query">                     <transaction mode="none"/>                     <eviction strategy="lru" max-entries="10000"/>                     <expiration max-idle="100000"/>                 </local-cache>                 <local-cache name="timestamps">                     <transaction mode="none"/>                     <eviction strategy="none"/>                 </local-cache>             </cache-container>         </subsystem>         <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>         <subsystem xmlns="urn:jboss:domain:jca:2.0">             <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>             <bean-validation enabled="true"/>             <default-workmanager>                 <short-running-threads>                     <core-threads count="50"/>                     <queue-length count="50"/>                     <max-threads count="50"/>                     <keepalive-time time="10" unit="seconds"/>                 </short-running-threads>                 <long-running-threads>                     <core-threads count="50"/>                     <queue-length count="50"/>                     <max-threads count="50"/>                     <keepalive-time time="10" unit="seconds"/>                 </long-running-threads>             </default-workmanager>             <cached-connection-manager/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:jdr:1.0"/>         <subsystem xmlns="urn:jboss:domain:jmx:1.3">             <expose-resolved-model/>             <expose-expression-model/>             <remoting-connector/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:jpa:1.1">             <jpa default-datasource="" default-extended-persistence-inheritance="deep"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:jsf:1.0"/>         <subsystem xmlns="urn:jboss:domain:mail:2.0">             <mail-session name="default" jndi-name="java:jboss/mail/default">                 <smtp-server outbound-socket-binding-ref="mail-smtp"/>             </mail-session>         </subsystem>         <subsystem xmlns="urn:jboss:domain:naming:2.0">             <remote-naming/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:pojo:1.0"/>         <subsystem xmlns="urn:jboss:domain:remoting:2.0">             <endpoint worker="default"/>             <http-connector name="http-remoting-connector" connector-ref="default" security-realm="applicationrealm"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:resource-adapters:2.0"/>         <subsystem xmlns="urn:jboss:domain:sar:1.0"/>         <subsystem xmlns="urn:jboss:domain:security:1.2">             <security-domains>                 <security-domain name="other" cache-type="default">                     <authentication>                         <login-module code="remoting" flag="optional">                             <module-option name="password-stacking" value="usefirstpass"/>                         </login-module>                         <login-module code="realmdirect" flag="required">                             <module-option name="password-stacking" value="usefirstpass"/>                         </login-module>                     </authentication>                 </security-domain>                 <security-domain name="jboss-web-policy" cache-type="default">                     <authorization>                         <policy-module code="delegating" flag="required"/>                     </authorization>                 </security-domain>                 <security-domain name="jboss-ejb-policy" cache-type="default">                     <authorization>                         <policy-module code="delegating" flag="required"/>                     </authorization>                 </security-domain>             </security-domains>         </subsystem>         <subsystem xmlns="urn:jboss:domain:transactions:2.0">             <core-environment>                 <process-id>                     <uuid/>                 </process-id>             </core-environment>             <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:undertow:1.2">             <buffer-cache name="default"/>             <server name="default-server">                 <http-listener name="default" socket-binding="http"/>                 <host name="default-host" alias="localhost">                     <location name="/" handler="welcome-content"/>                     <filter-ref name="server-header"/>                     <filter-ref name="x-powered-by-header"/>                 </host>             </server>             <servlet-container name="default">                 <jsp-config/>                 <websockets/>             </servlet-container>             <handlers>                 <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>             </handlers>             <filters>                 <response-header name="server-header" header-name="server" header-value="wildfly/8"/>                 <response-header name="x-powered-by-header" header-name="x-powered-by" header-value="undertow/1"/>             </filters>         </subsystem>         <subsystem xmlns="urn:jboss:domain:webservices:1.2">             <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>             <endpoint-config name="standard-endpoint-config"/>             <endpoint-config name="recording-endpoint-config">                 <pre-handler-chain name="recording-handlers" protocol-bindings="##soap11_http ##soap11_http_mtom ##soap12_http ##soap12_http_mtom">                     <handler name="recordinghandler" class="org.jboss.ws.common.invocation.recordingserverhandler"/>                 </pre-handler-chain>             </endpoint-config>             <client-config name="standard-client-config"/>         </subsystem>         <subsystem xmlns="urn:jboss:domain:weld:2.0"/>     </profile>      <interfaces>         <interface name="management">             <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>         </interface>         <interface name="public">             <inet-address value="${jboss.bind.address:127.0.0.1}"/>         </interface>         <interface name="unsecure">             <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>         </interface>     </interfaces>      <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">         <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>         <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>         <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>         <socket-binding name="http" port="${jboss.http.port:8080}"/>         <socket-binding name="https" port="${jboss.https.port:8443}"/>         <socket-binding name="txn-recovery-environment" port="4712"/>         <socket-binding name="txn-status-manager" port="4713"/>         <outbound-socket-binding name="mail-smtp">             <remote-destination host="localhost" port="25"/>         </outbound-socket-binding>     </socket-binding-group>      <deployments>         <deployment name="postgresql" runtime-name="postgresql-9.4-1201.jdbc4.jar">             <content sha1="b46544ef0eaf0405504089dcc71f36e3f190ef09"/>         </deployment>         <deployment name="wildfly-ejb-in-ear-ear.ear" runtime-name="wildfly-ejb-in-ear-ear.ear">             <content sha1="eee0b026b1fac8c09a35bc0ef318a237d8d47c6e"/>         </deployment>     </deployments> </server> 

i noticed using extended entity manager (@persistencecontext(type=persistencecontexttype.extended) stateless session bean @stateless, when specify injected entitymanager extended persistence context, should use @stateful session bean, because extended entitymanagers still live beyond scope of jta transaction, have 2 solutions:

  1. change stateless stateful session bean: in case please note extended entity managers create persistence context when stateful session bean instance created lasts until bean removed.
  2. change extended entity manager transaction-scoped entity manager using type=persistencecontexttype.transaction: persistence context of transaction-scoped entity manager begins when transaction begins , lasts until end of transaction, persistence context of extended entity manager last entire length of conversation.

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -