我在弄清楚是否可以在不采用 HttpServletRequest 和 HttpServletResponse 参数的方法中实际调用 session bean 的方法时遇到一些问题?
意识到代码在 doGet 和 doPost 方法中工作后,我修改了一个自定义方法来获取请求和响应的参数,突然它开始工作了。
我的目标是让方法正常工作(调用 session bean 方法),而无需在方法参数中包含请求和响应。
但是,这里是有问题的版本的代码,它在 itemRegistrationSession.openConnection(); 上授予 NullPointerException;
package web;
import java.io.IOException;
import java.util.ArrayList;
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 auction.itemRegistrationRemote;
import auction.userRegistrationRemote;
/**
* Servlet implementation class processItem
*/
@WebServlet("/processItem")
public class processItem extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB itemRegistrationRemote itemRegistrationSession;
@EJB userRegistrationRemote processRegistrationSession;
/**
* @see HttpServlet#HttpServlet()
*/
public processItem() {
super();
getCategories();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//ArrayList<String> categories = getCategories(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected ArrayList<String> getCategories() {
System.out.println("Hello from getCategories()");
itemRegistrationSession.openConnection();
System.out.println("Hello2 from getCategories()");
ArrayList<String> categories = itemRegistrationSession.getCategories();
itemRegistrationSession.closeConnection();
return categories;
}
}
<小时/>
package auction;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
/**
* Session Bean implementation class itemRegistration
*/
@Singleton
public class itemRegistration implements itemRegistrationRemote {
Connection con;
PreparedStatement prepStat;
ResultSet resultSet;
final String ITEM_NAME = "ITEM_NAME";
final String CATEGORY_NAME = "CATEGORY_NAME";
final String USER_NAME = "USER_NAME";
final String ITEM_MODEL = "ITEM_MODEL";
final String ITEM_DESCRIPTION = "ITEM_DESCRIPTION";
/**
* Default constructor.
*/
public itemRegistration() {
// TODO Auto-generated constructor stub
}
@Override
public void openConnection() {
System.out.println("Openning connection for itemRegistration");
try {
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
Class.forName(driver).newInstance();
} catch (InstantiationException e) {
System.out.println("Openning database connection - Instantiation Exception " + e.getMessage());
} catch (IllegalAccessException e) {
System.out.println("Openning database connection - IllegalAccessException " + e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("Openning database connection - ClassNotFoundException " + e.getMessage());
}
try {
con = DriverManager.getConnection("jdbc:derby:C:/Users/Adrian/MyDB;upgrade=true", "adrian", "testero");
} catch (SQLException e) {
System.out.println("Openning database connection - SQLException " + e.getMessage());
}
} // End of openConnection method
@Override
public void closeConnection() {
try {
resultSet.close();
prepStat.close();
con.close();
} catch (SQLException e) {
System.out.println("Closing database connection - SQLException " + e.getMessage());
}
} // End of closeConnection method
@Override
public ArrayList<String> getCategories() {
ArrayList<String> categories = new ArrayList<String>();
try {
prepStat = con.prepareStatement("SELECT * FROM CATEGORY");
resultSet = prepStat.executeQuery();
int i = 1;
while (resultSet.next()) {
categories.add(resultSet.getString(i));
i++;
}
} catch (SQLException e) {
System.out.println("getCategories SQLException - " + e.getMessage());
}
return categories;
}
}
最佳答案
听起来像是
的依赖注入(inject)@EJB itemRegistrationRemote itemRegistrationSession
不工作。尝试添加一条显示 itemRegistrationSession 对象值的日志语句,以查看该成员是否已正确初始化。
关于java - 在 doGet 或 doPost 之外调用 EJB session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974838/