【问题标题】:Database Connectivity my with EJB and JSP Error with GlassFish Server数据库连接我的 EJB 和 GlassFish Server 的 JSP 错误
【发布时间】:2015-09-18 06:03:16
【问题描述】:

我是 Java EE 开发的新手。我创建了一个新的企业应用程序项目,其中包含两个模块: TestDbEJB 和 TestDbWeb。

在 TestDbEJB 中,我创建了一个包 book,其中包含两个类 Book 和 BookManager。以下代码如下:

图书

package book;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Book {

    private int isbn;
    private String title;

    @Id
    public int getIsbn() {
        return isbn;
    }

    public void setIsbn(int isbn) {
        this.isbn = isbn;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }

}

BookManager.java

 package book;
 import java.sql.*;
 import java.util.ArrayList;
 public class BookManager {

String url = "jdbc:mysql://localhost:3306/Esd";
String user = "root";
String password = "root";

public int createBook(int isbn, String title) throws SQLException, ClassNotFoundException{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, password);

String insert = "INSERT INTO book VALUES (?,?)";
PreparedStatement ptt = con.prepareStatement(insert);
ptt.setInt(1, isbn);
ptt.setString(2, title);

int ins = ptt.executeUpdate();

con.close();
ptt.close();

return ins;
}

  public ArrayList<Book> getAllBooks() throws SQLException,     ClassNotFoundException{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, password);

String sqlSelect = "SELECT * from book";
Statement stt = con.createStatement();
ResultSet rs = stt.executeQuery(sqlSelect);
ArrayList<Book> Books = new ArrayList<Book>();

while(rs.next()){
    int isbn = rs.getInt("isbn");
    String title = rs.getString("title");
    Book b1 = new Book();
    b1.setIsbn(isbn);
    b1.setTitle(title);
    Books.add(b1);
}

con.close();
stt.close();
rs.close();

return Books;
 }

}

现在在我的 TestDbWeb 中,我创建了一个 JSP 文件 - addBook.jsp。

addBook.jsp

        <jsp:useBean id = "bm" class="book.BookManager" scope="session"/>

    <%
    try{
        int isbn = Integer.parseInt(request.getParameter("isbn"));
        String title = request.getParameter("title");

        bm.createBook(isbn, title);
    }catch(Exception e){

    }

    %>

    <h1> Welcome to ABC Library</h1>

    <form>
    <table>
        <tr>
            <td> Enter Details </td>
            <td><input type="text" name="isbn"></td>
            <td><input type="text" name="isbn"></td>
            <td><input type="submit" name="add" value="add"></td>
    </tr>
    </table>
</form> 

现在真正的问题是,当我运行应用程序时,会显示一个对话框并显示以下错误:

无法部署 TestDb 部署失败=部署期间发生错误:部署应用程序时出现异常 [TestDb]:无效的 ejb jar [TestDbEJB.jar]:它包含零个 ejb。

注意:

  1. 有效的 ejb jar 至少需要一个会话、实体(1.x/2.x 样式)或消息驱动 bean。

  2. EJB3 实体 bean (@Entity) 是 POJO,请将它们打包为库 jar。

  3. 如果 jar 文件包含使用 EJB 组件级别注解(@Stateless、@Stateful、@MessageDriven、@Singleton)注解的有效 EJB,请检查 server.log 以查看注解是否被正确处理。有关详细信息,请参阅 server.log。

出现此错误: 无法部署 TestDb 部署失败=名称为 [TestDb] 的应用程序未部署

还请注意,以前,当上述错误未显示时。但在我的浏览器上,我收到错误“找不到资源”

非常感谢您的帮助。由于我在谷歌上的搜索并没有帮助我自己解决这个问题。谢谢和问候..

【问题讨论】:

    标签: java jsp jakarta-ee jdbc glassfish


    【解决方案1】:

    您无法访问您的应用程序,因为它尚未部署到 Glassfish。而且您的 TestDbEJB 不包含 EJB bean,Glassfish 拒绝将其识别为 EJB 模块。您为什么不尝试使用 @Stateless 注释您的 BookManager.java?

    【讨论】:

    • 您能否将您的答案范围扩大为您的解决方案如何以及为何处理该问题
    • 你好!是的,我用@Stateless 对其进行了注释。但是,当我输入值时,它告诉我 javax.servlet.ServletException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 根本原因 java.lang.ClassNotFoundException: com.mysql。 jdbc.Driver 我已经在我的 TestDbEJB 文件夹中添加了 mysql 驱动程序,但徒劳无功!请帮忙
    • James,您应该尝试将您的库放在 Glassfish 的 lib 文件夹中。 Kumar,当您将您的 java 类注释为无状态、有状态或 ManagedBean 时,它将是 EJB,那么您的 jar 将被视为 EJB 模块
    • @fangdi 有时,我从 Glassfish 收到以下错误。您能提供什么帮助? HTTP 状态 404 - 未找到类型状态报告消息未找到描述请求的资源不可用。
    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2012-03-26
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多