我们访问用户:问题注入。
-
23-09-2019 - |
题
我是新来的Java EE。我试图得到一些第一个例子运行(访问用户).我使用我们v3。麻烦的是,我没有得到应用程序服务器中注入 中。.听到的是一个例子 http://www.adam-bien.com/roller/abien/entry/ejb_3_persistence_jpa_for 这是我的扩展JSP客户。
实体:
package beans;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
private String subtitle;
public Book() {
}
public Book(String title) {
this.title = title;
}
}
BookService的界面:
package beans;
import javax.ejb.Local;
@Local
public interface BookService {
Book createOrUpdate(Book book);
void remove(Book book);
Book find(Object id);
}
BookServiceBean:
package beans;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class BookServiceBean implements BookService {
@PersistenceContext
private EntityManager em;
public Book createOrUpdate(Book book) {
return em.merge(book);
}
public void remove(Book book) {
em.remove(em.merge(book));
}
public Book find(Object id) {
return em.find(Book.class, id);
}
}
persistence.xml:
<persistence>
<persistence-unit name="sample" transaction-type="JTA">
<jta-data-source>jdbc/MarcelsDataSource</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
索引。jsp:
<%@ page import="beans.BookServiceBean" %>
<%@ page import="beans.Book" %>
<html>
<body>
<%
BookServiceBean bs = new BookServiceBean();
Book b = new Book("Superman");
bs.createOrUpdate(b);
%>
</body>
</html>
如果我跑的如我得到一个java。郎。异常在向数据库中存储一个()方法,以便的。是 很明显不注正确。我试图找到一个补救的天现在 一些帮助将受到高度赞赏。
感谢
Marcel
解决方案
你会得到一个 NullPointerException
因为你是你的实例 BookService
与 new()
-这基本上是错误的和没有得到注射在EJB。EJB是组成管理的容器,应当得到无论是通过注射或与查找。
在这里,而JSP规格允许任何代码运行在scriptlet,呼吁EJB从JSP是实际上不是真正的鼓励和Jsp不支持注射。换句话说,只有使用查询:
<%@ page import="beans.BookService" %>
<%@ page import="beans.Book" %>
<html>
<body>
<%
BookService bs = (BookService) new InitialContext().lookup("java:module/BookServiceBean")
Book b = new Book("Superman");
bs.createOrUpdate(b);
%>
</body>
</html>
但你应该打电话给你的EJB从Servlet或一个JSF管理豆(和你EJB可以注射,在这样的组件)。
如果你需要一些样品,看一看 Java EE代码样本和应用程序.
更新: 看看 我怎么访问本地EJB组从一只? 在EJB常见问题的更多详细信息JNDI(尤其是新的 便携式全球JNDI名称所定义的EJB3.1规范).
其他提示
尝试:
@PersistenceContext(unitName = "sample")
private EntityManager em;
您直接实例化的服务豆,当你真正需要的是具有容器注入它(通过@EJB)。这不是在JSP支持的,虽然如此,你必须切换到一个servlet为好。
不隶属于 StackOverflow