1

I try to create a web application based on MVC structure and by Hibernate JPA .

I want save data form in database . for this job , I get data in servlet and call a method in personManager class in business logic "bl" package .

this method most get data and Saves them but present this error :

10-Dec-2018 11:15:07.463 SEVERE [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [manager] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: javax.persistence.Persistence
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1137)
at util.JPAProvider.<clinit>(JPAProvider.java:13)
at model.bl.PersonManager.<init>(PersonManager.java:24)
at controller.Manager.service(Manager.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

servlet class :

  public void service (HttpServletRequest request , HttpServletResponse response)throws IOException, ServletException
{
    String username= request.getParameter("choose-username");
    String password= request.getParameter("choose-password");
    String repeatPass= request.getParameter("repeat-password");
    String email = request.getParameter("email");
    HttpSession session = request.getSession();

     try {
            PersonManager personManager = new PersonManager();
            personManager.addUser(username , password , email , "female");
            response.sendRedirect("/views/welcome.jsp");
        } catch (Exception e)
        {
            request.getRequestDispatcher("/views/register.jsp").forward(request, response);
        }
    }

JPAProvider class:

public class JPAProvider {

private static final EntityManagerFactory entityManagerFactory;//instate of session for connect to database
static{
    entityManagerFactory  = Persistence.createEntityManagerFactory("MyConnection");
}

public static EntityManagerFactory getEntityManagerFactory() {
    return entityManagerFactory;
}

}

public class PersonManager {

EntityManager entityManager=null;
EntityTransaction entityTransaction=null;

public PersonManager() {
     entityManager = JPAProvider.getEntityManagerFactory().createEntityManager();//session factory
     entityTransaction = entityManager.getTransaction();
}

public Boolean addUser(String username , String password , String email , String sex)
{
    try{
        entityTransaction.begin();
        Person person = new Person();
        person.setUsername(username);
        person.setPassword(password);
        person.setEmail(email);
        person.setSex(sex);
        entityManager.persist(person);
        entityTransaction.commit();
        entityManager.close();

    }catch (Exception e){
        System.out.println(e.getStackTrace());
        System.out.println("addUser failed");
    }
    return true;
}

}

Person class :

package model.entity;
import model.bl.PersonManager;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;

//mapping class to table
@Entity (name = "person")
@Table(name = "USERS")
@EntityListeners(value = PersonManager.class)

public class Person implements Serializable
{

@Id // create id and fill auto by sequence in database
@Column(name="UID" ,columnDefinition = "NUMBER" )
@SequenceGenerator(name = "mySeq" , sequenceName = "DB_MYSEQ")
@GeneratedValue(strategy=GenerationType.AUTO ,generator="mySeq")
private long uId;


@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "FK_PERSON",referencedColumnName = "UID")
private List<Pictures> picturesList;


@Basic
@Column (name = "USERNAME" , columnDefinition = "NVARCHAR2(30)" , nullable = false , unique = true)
private String username ;

@Basic
@Column (name = "USER_PASSWORD" , columnDefinition = "NVARCHAR2(32)" , nullable = false , unique = true)
private String  password ;

@Basic
@Column (name = "EMAIL" , columnDefinition = "NVARCHAR2(40)" , nullable = false)
private String email;


@Basic
@Column (name = "SEX" , columnDefinition = "NVARCHAR2(20)")
private String sex ;

//--------------------------------------------------------

public Person() { }

public Person(String username, String password, String email, String sex, String userPic) {
    this.username = username;
    this.password = password;
    this.email = email;
    this.sex = sex;
    this.userPic = userPic;
}
public Person(String username, String password, String email ,String sex, String userPic,List<Pictures> picturesList ) {
    this.picturesList = picturesList;
    this.sex = sex;
    this.userPic = userPic;
    this.email = email;
    this.password = password;
    this.username = username;
}

//--------------------------------------------------------

public void setUsername(String username) {
    this.username = username;
}

public void setPassword(String password) {
    this.password = password;
}

public void setEmail(String email) {
    this.email = email;
}

public void setUserPic(String userPic) {
    this.userPic = userPic;
}

public void setSex(String sex) {
    this.sex = sex;
}

public void setuId(long uId) {this.uId = uId;}

//--------------------------------------------------------

public String getUsername() {
    return username;
}

public String getPassword() {
    return password;
}

public String getUserPic() {
    return userPic;
}

public String getEmail() {
    return email;
}

public String getSex() {
    return sex;
}

public long getuId() {return uId;}

}
}

persistence.xml :

<persistence-unit name="MyConnection" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>

        <!--<property name="hibernate.transaction.flush_before_completion" value="true"/>-->
        <!--<property name="hibernate.format_sql" value="true"/>-->

        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
        <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="hibernate.connection.username" value="midas"/>
        <property name="hibernate.connection.password" value="midas123"/>
        <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
        <!--<property name="hibernate.hbm2ddl.auto" value="create-drop"/>-->
        <property name="show_sql" value="true"></property>
       <!-- <property name="hibernate.globally_quoted_identifiers" value="true"/>-->
    </properties>
</persistence-unit>

In some cases it was said that the problem was loss javax.persistence.jar . I add new javax.persistence.jar to my libraries but the problem was not resolved .

I use :

tomcat 8 JDK 1.8.0-172 oracle 11g IntellyJ Idea

I used the following libraries :

1)hibernate-enverc-4.2.0.final

2)hibernate-jpa-2.0-api-1.0.1-final.jar

3)tomcat library

project Structure :

src --> controller --> Manager.java

src --> model --> bl --> personManager.java

src --> entity --> person.java

src --> util --> JPAProvider.java

src --> META-INF --> persistence.xml

web --> views --> ...

web --> WEB-INF --> lib

web --> WEB-INF --> web.xml

How can I fix this error?

2 Answers 2

2

For anybody still coming across this problem, I was given a solution that actually worked for me!

Open the project properties (right click > properties) and select "Deployment Assembly". There click "add", select "build path entries", and choose "maven dependencies". This will instruct WTP to send the maven dependencies to the server dir.

Sign up to request clarification or add additional context in comments.

Comments

1

It shouldn't be at the project root, but directly under the source folder.

At runtime, the persistence.xml file is searched in the classpath, under META-INF. So if you want the META-INF folder to be put at the top of the compiled package tree, you need to put it at the top of the source tree. Eclipse copies every non-Java file to its output directory (bin, by default), respecting the package/folder hierarchy.

1 Comment

I move META-INF in web folder and move inside src but The problem was not resolved ! I use intelliJ , not eclipse .

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.