As a result of implementing EntityManager in NullPointerException

I am writing my first Java EE application (EJB + Servlets, etc.) (note: I am using Eclipse).
I ran into a problem when the EntityManager injection did not work, and with some difficulties I found out why because of my Java EE (and Java in general) noobness.

Here is my file persistence.xml- I think this is mostly correct, since I can start the HSQL database manager from the JMX console and my PUBLIC.USER table will appear correctly.

<?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="MyPu">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/DefaultDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        </properties>
    </persistence-unit>
</persistence>

Here is my servlet code:

[...]
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws      
    String id = request.getParameter("username");
    String password = request.getParameter("password");

    UserManagerBean um = new UserManagerBean();
    um.register(username, password);

    RequestDispatcher dispatcher=getServletContext().getRequestDispatcher("/index.jsp");
    dispatcher.forward(request, response);
}

And here is my UserManagerBean class:

//bunch of imports

import myPackage.UserManager;

public @Stateful class UserManagerBean implements UserManager {
    @PersistenceContext(unitName="MyPu")
    private EntityManager persistManager;

    public void register(String username, String password) {
        User user = new User(userame, password);
        persistManager.persist(user);
        persistManager.flush();
    }
}

persistManager.persist(user) NullPointerException. , , , new() UserManagerBean, @PersistenceContext , persistManager .
, , - EJB.
bean? ? , bean :\

:
,

UserManagerBean um = new UserManagerBean();

@EJB
private UserManagerBean um;

. um - NullPointer.

+3
4

EJB3 Beans -EJB3 Beans JBoss:

JBoss Application Server 4.2.2 EJB3 EJB MBean, JBoss. .

EJB3 EntityManager @EJB EJB . EJB3 MBean JAR, . JAR, WAR (, , JSF beans ..), . Java 5 Enterprise Edition , Bean @EJB, JBoss Application Server 4.2.2.

, Java EE 5 @EJB, JBoss 4.2.2 . JBoss 4.2.2 , Java EE 5.

, :

  • JBoss, JDNI-, Bean - -
  • Swith to JBoss 5 AS, Java 5 Enterprise Edition ( ) - -
  • Swith Java EE 5, GlassFish v2 ( v3) WebLogic 10. GFv3.
+2

@EJB JBoss 4.2.

WAR ( WEB-INF) :

web.xml:

<ejb-local-ref>
        <ejb-ref-name>ejb/UserManager</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <local-home/>
        <local>myPackage.UserManager</local>
</ejb-local-ref> 

JBoss-web.xml:

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.3//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd">
<jboss-web>

  <ejb-local-ref>
    <ejb-ref-name>ejb/UserManager</ejb-ref-name>
    <local-jndi-name>[earname]/UserManagerBean/local</local-jndi-name>
  </ejb-local-ref>

</jboss-web>

EJB, :

UserManagerBean um = (UserManager)new InitialContext().lookup( "java:comp/env/ejb/UserManager" );
+2

, , , . , 3 :

0

, , "beans.xml" .

  • WAR - src/main/webapp/WEB-INF/
  • For JAR and EAR packaging, the location is src / main / resources / META-INF /

If you have multiple maven modules, you should have them on each module.

Additional information beans.xml

0
source

Source: https://habr.com/ru/post/1729368/


All Articles