我在Neon Eclipse中有Enterprise Appilcation Solution,它包含EJB和Servlet项目并部署到Wildfly 10服务器。
Servlet为访问DB调用EJB
如果我把JDBC驱动程序放在Servlet项目的WEB-INF文件夹中,一切进展顺利,但如果我将代码移到EJB并将驱动程序作为外部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;
}
答案 0 :(得分:0)
在Java EE服务器中执行此操作的方法是定义DataSource,然后使用它来获取JDBC连接:
将mysql-connector-java-5.1.40-bin.jar移动到WildFly安装的standalone\deployments
目录中。
启动WildFly服务器并在http://localhost:9990打开管理控制台。您可能需要按照一些说明在此处设置一些安全性。
点击Configuration
标签,然后点击:
一个。子系统
湾数据源
℃。非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配置也可以从命令行脚本完成。