如何将JDBC驱动程序链接到缺少WEB-INF文件夹的EJB项目

时间:2016-11-09 12:12:28

标签: java eclipse jdbc 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]

以下是我用于访问数据库的代码:

    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;
    }

Troubles on JDBC linking

1 个答案:

答案 0 :(得分:0)

在Java EE服务器中执行此操作的方法是定义DataSource,然后使用它来获取JDBC连接:

  1. 将mysql-connector-java-5.1.40-bin.jar移动到WildFly安装的standalone\deployments目录中。

  2. 启动WildFly服务器并在http://localhost:9990打开管理控制台。您可能需要按照一些说明在此处设置一些安全性。

  3. 点击Configuration标签,然后点击:

    一个。子系统

    湾数据源

    ℃。非XA

  4. 点击蓝色Add按钮,然后按照提示进行操作。

  5. 现在,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配置也可以从命令行脚本完成。