EJB, JPA, eclipselink, MySQL соединить в месте

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


@Entity
@NamedQuery(name = Book01.FIND_ALL, query = "SELECT b FROM Book01 b")
@Table(name = "ex01_book")
public class Book01 {
    public static final String FIND_ALL = "Book01.findAllBooks";
    @Id
    @GeneratedValue
    private Long id;
    @NotNull
    private String title;
    private Float price;
    @Size(max = 2000)
    private String description;
    private String isbn;
    private Integer nbOfPage;
    private Boolean illustrations;

    public Book01() {
    }

    public Book01(String title, Float price, String description, String isbn, Integer nbOfPage, Boolean illustrations) {
        this.title = title;
        this.price = price;
        this.description = description;
        this.isbn = isbn;
        this.nbOfPage = nbOfPage;
        this.illustrations = illustrations;
    }

    public Long getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getIsbn() {
        return isbn;
    }


    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public Integer getNbOfPage() {
        return nbOfPage;
    }

    public void setNbOfPage(Integer nbOfPage) {
        this.nbOfPage = nbOfPage;
    }

    public Boolean getIllustrations() {
        return illustrations;
    }

    public void setIllustrations(Boolean illustrations) {
        this.illustrations = illustrations;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("Book01");
        sb.append("{id=").append(id);
        sb.append(", title='").append(title).append('\'');
        sb.append(", price=").append(price);
        sb.append(", description='").append(description).append('\'');
        sb.append(", isbn='").append(isbn).append('\'');
        sb.append(", nbOfPage=").append(nbOfPage);
        sb.append(", illustrations=").append(illustrations);
        sb.append('}');
        return sb.toString();
    }
}

2 файл

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.SynchronizationType;
import javax.persistence.TypedQuery;
import java.util.List;


@Stateless
public class BookEJB01 {


    @PersistenceContext(unitName = "chapter07PU",synchronization = SynchronizationType.UNSYNCHRONIZED)
    private EntityManager em;

//    public List<Book01> findBooks() {
//        TypedQuery<Book01> query = em.createNamedQuery(Book01.FIND_ALL, Book01.class);
//        em.joinTransaction();
//        return query.getResultList();
//    }

    public String firstEJB(){
        return "first";
    }

//    public Book01 findBookById(Long id) {
//        return em.find(Book01.class, id);
//    }
//
    public Book01 createBook(Book01 book) {
        em.persist(book);
        return book;
    }

//    public void deleteBook(Book01 book) {
//        em.remove(em.merge(book));
//    }
//
//    public Book01 updateBook(Book01 book) {
//        return em.merge(book);
//    }
}

3 файл

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/Sasha")
public class EJBServlet extends HttpServlet {

    @EJB
    BookEJB01 bookEJB01;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        bookEJB01.createBook(new Book01("Книга", 12F, "про книгу", "1213-124389", 355,true));
//        System.out.println(bookEJB01.firstEJB()); получилось запустить
    }
}

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence 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"
             version="2.1">
    <persistence-unit name="chapter07PU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/__default</jta-data-source>     <!--        новая для меня строчка подозреваю онибка там-->
        <properties>
            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/chapter07?serverTimezone=Europe/Moscow"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="1Ntktajy"/>
            <property name="eclipselink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
</persistence>

ошибка

org.apache.catalina.LifecycleException: An invalid Lifecycle transition was attempted ([before_destroy]) for component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/untitled86_war_exploded]] in state [STARTING_PREP]

использую eclipselink.jar, MySQL-connector-java-8.0.19, javaee-api-8.0-3.jar, jsp-api.jar, servlet-api.jar. В неудаче запуска подозреваю свой мозг и persistence.xml


Ответы (0 шт):