Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Tomcat+EclipseLink


Автор: Atum 22.11.2012, 09:42
добрый день ! 
возник такой вот вопрос - как заставить работать связку 

Tomcat + EclipseLink (ORM) ?   без спринга ! Помогите разобраться !

ошибка в сервлете при вызове 

 em = emf.createEntityManager(); - emf = null ! 

не видит Tomcat что есть PersistenceUnit



что есть : 

 tomcat - servlet - model bean - mysql 

Entity  созданный по таблице :

Код


@Entity
@Table(name = "USER", catalog = "db", schema = "")
@XmlRootElement
@NamedQueries({....})
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;
....

get 
set 
}




сервлет 

Код


WebServlet(name = "ListPersonServlet", urlPatterns = {"/ListPersonServlet"})
public class ListPersonServlet extends HttpServlet {

   @PersistenceUnit(unitName="WebPU" , name="persistence/em")
    private EntityManagerFactory emf;

....

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


....
 EntityManager em = null;
   
    try {
        
        
        List persons = Collections.EMPTY_LIST;
        em = emf.createEntityManager();
         persons =  em.createNamedQuery("SELECT t FROM User t").getResultList();

....




в em = emf.createEntityManager(); - emf = null ! 


persistence  


Код


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
  <persistence-unit name="WebPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>model.User</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db"/>
      <property name="javax.persistence.jdbc.password" value="123456"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="eclipselink.session.customizer" value="util.EclipseLinkSessionCustomizer" />
    </properties>
  </persistence-unit>
</persistence>



EclipseLinkSessionCustomizer 

Код


import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.sessions.JNDIConnector;
import org.eclipse.persistence.sessions.Session;


public class EclipseLinkSessionCustomizer implements SessionCustomizer{

    @Override
    public void customize(Session session) throws Exception {
      JNDIConnector connector = (JNDIConnector) session.getLogin().getConnector();
      connector.setLookupType(JNDIConnector.STRING_LOOKUP);
    }
    
}



Автор: Vasay 26.11.2012, 16:40
Atum, 

А если попробовать получить EntityManagerFactory без аннотаций:

EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("WebPU");

Что будет? 

Автор: xalez 27.11.2012, 16:25
Если есть возможность замените сервер приложений на Glassfish или Weblogic и используйте сервачные Persistence unit. Persistence unitы типа RESOURCE_LOCAL используются только в клиентских приложениях, а если это web то лучше JTA

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)