如何将JDBC驱动程序链接到缺少WEB-INF文件夹的EJB项目
我在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]
这是我用来访问DB的代码:
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服务器中执行此操作的方法是定义DataSource,然后使用它来获取JDBC连接:
-
将mysql-connector-java-5.1.40-bin.jar移动到WildFly安装的
standalone\deployments
目录中。 -
启动WildFly服务器并在http:// localhost:9990打开管理控制台。 您可能必须按照一些说明在此处设置一些安全性。
-
单击“
Configuration
选项卡,然后单击:一个。 子系统
湾 数据源
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配置也可以从命令行脚本完成。