如何 link JDBC 驱动到 EJB 项目缺少 WEB-INF 文件夹
How to link JDBC driver to EJB project missing WEB-INF folder
我在 Neon Eclipse 中有企业应用程序解决方案,它封装了 EJB 和 Servlet 项目并部署到 Wildfly 10 服务器。
Servlet调用EJB访问DB。
如果我将 JDBC 驱动程序放在 Servlet 项目的 WEB-INF 文件夹中,一切顺利,但如果我将代码移动到 EJB 并将 link 驱动程序作为外部 JAR(见屏幕截图),我会收到错误消息:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [Module "deployment.NeoflexBank.ear.Neoflex.jar:main" from Service Module Loader]
这是我用来访问数据库的代码:
public String test() {
String output = "";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
e.printStackTrace();
}
String url="jdbc:mysql://localhost:3306/neoflex";
String username="root";
String password="";
String query="select * from clients";
Connection conn;
try {
conn = (Connection) DriverManager.getConnection(url, username, password);
Statement stmt = (Statement) conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
output += rs.getInt("id");
output += rs.getString("username");
output += rs.getString("birth_date");
output += rs.getString("name");
output += rs.getString("surename");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
return e.toString();
}
return output;
}
在 Java EE 服务器中执行此操作的方法是定义一个数据源,然后使用它来获取 JDBC 连接:
将 mysql-connector-java-5.1.40-bin.jar 移动到 WildFly 安装的 standalone\deployments
目录中。
启动您的 WildFly 服务器并在 http://localhost:9990 打开管理控制台。您可能需要按照一些说明在此处设置一些安全措施。
单击 Configuration
选项卡,然后单击:
一个。子系统
b。数据源
c。非 XA
单击蓝色 Add
按钮并按照提示进行操作。
现在,您的 EJB 中的代码看起来有点像:
@Stateless
public class SomeEJB {
@Resource(name="java:/MySqlDS")
private DataSource ds;
public String test() {
String output = "";
String query="select * from clients";
try {
try (Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query)) {
while(rs.next())
{
output += rs.getInt("id");
output += rs.getString("username");
output += rs.getString("birth_date");
output += rs.getString("name");
output += rs.getString("surename");
}
}
} catch (SQLException e) {
return e.toString();
}
return output;
}
}
这将您的应用程序与数据库配置分离。 DataSource 配置也可以通过命令行脚本完成。
我在 Neon Eclipse 中有企业应用程序解决方案,它封装了 EJB 和 Servlet 项目并部署到 Wildfly 10 服务器。
Servlet调用EJB访问DB。
如果我将 JDBC 驱动程序放在 Servlet 项目的 WEB-INF 文件夹中,一切顺利,但如果我将代码移动到 EJB 并将 link 驱动程序作为外部 JAR(见屏幕截图),我会收到错误消息:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [Module "deployment.NeoflexBank.ear.Neoflex.jar:main" from Service Module Loader]
这是我用来访问数据库的代码:
public String test() {
String output = "";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
e.printStackTrace();
}
String url="jdbc:mysql://localhost:3306/neoflex";
String username="root";
String password="";
String query="select * from clients";
Connection conn;
try {
conn = (Connection) DriverManager.getConnection(url, username, password);
Statement stmt = (Statement) conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
output += rs.getInt("id");
output += rs.getString("username");
output += rs.getString("birth_date");
output += rs.getString("name");
output += rs.getString("surename");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
return e.toString();
}
return output;
}
在 Java EE 服务器中执行此操作的方法是定义一个数据源,然后使用它来获取 JDBC 连接:
将 mysql-connector-java-5.1.40-bin.jar 移动到 WildFly 安装的
standalone\deployments
目录中。启动您的 WildFly 服务器并在 http://localhost:9990 打开管理控制台。您可能需要按照一些说明在此处设置一些安全措施。
单击
Configuration
选项卡,然后单击:一个。子系统
b。数据源
c。非 XA
单击蓝色
Add
按钮并按照提示进行操作。
现在,您的 EJB 中的代码看起来有点像:
@Stateless
public class SomeEJB {
@Resource(name="java:/MySqlDS")
private DataSource ds;
public String test() {
String output = "";
String query="select * from clients";
try {
try (Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query)) {
while(rs.next())
{
output += rs.getInt("id");
output += rs.getString("username");
output += rs.getString("birth_date");
output += rs.getString("name");
output += rs.getString("surename");
}
}
} catch (SQLException e) {
return e.toString();
}
return output;
}
}
这将您的应用程序与数据库配置分离。 DataSource 配置也可以通过命令行脚本完成。