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