我是新来的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 因为你是你的实例 BookServicenew() -这基本上是错误的和没有得到注射在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为好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top