Привет всем, и спасибо, что нашли время посмотреть на мою проблему.
Я все еще начинающий разработчик, и я пытаюсь пройти несколько уроков по созданию простого приложения JavaEE7, которое использует EclipseLinkкак поставщик постоянства и пытается включить EJB / CDI.
Среда:
- WebLogic 12.2.1.2
- База данных Oracle XE (11 г)
- EclipseLink 2.6.4
- JavaEE7
Проблема, с которой я сталкиваюсь:
Мой EntityManager не внедряется и имеет нулевое значение (в MyAppService.java).
Попытка внедрить EJB или CDI не работает, и мне приходится создавать экземпляры классов с помощью команды "new".
Я пытался сделатьэтот пример настолько прост, насколько это возможно, и я не понимаю, почему это не работает.
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
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">
<persistence-unit name="myApp" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>MyAppsDataSource</jta-data-source>
</persistence-unit>
</persistence>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>MyApp</display-name>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
</web-app>
лица-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
MyBean.java
package com.example.myapp;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "bookBean")
@RequestScoped
public class BookBean{
private Book book;
private int bookId;
private String name;
@EJB
private MyAppService myAppService;
/* getters and setters all go here */
public void addBook(){
book = new Book();
book.setName(name);
myAppService = new MyAppService ();
myAppService.addBook(book);
}
myAppService.java
package com.example.myapp;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.example.myapp.Book;
@Stateless
public class MyAppService {
@PersistenceContext
private EntityManager em;
public MyAppService(){
}
public void addBook(Book book){
em.persist(book);
}
}
Book.java
package com.example.myapp;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "book")
public class Book implements Serializable {
static final long serialVersionUID = 5423333547663264823L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int bookId;
private String name;
public Book() {
}
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
}
ЕслиВы хотите любую другую информацию, пожалуйста, дайте мне знать!
Спасибо!