Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据源资源引用名称映射到WildFly中EJB2.x中的JNDI名称?_Java_Jakarta Ee_Jboss_Ejb_Wildfly - Fatal编程技术网

Java 如何将数据源资源引用名称映射到WildFly中EJB2.x中的JNDI名称?

Java 如何将数据源资源引用名称映射到WildFly中EJB2.x中的JNDI名称?,java,jakarta-ee,jboss,ejb,wildfly,Java,Jakarta Ee,Jboss,Ejb,Wildfly,如何将数据源资源引用名称映射到WildFly中EJB中的JNDI名称 我知道在JBoss4.2.3中,它是在JBoss.xml中完成的,但在WildFly中不起作用 这是我的测试: 我正在EclipseLuna中使用Java1.7、XDoclet 1.2.3、WildFly 8.2.1.Final、动态Web模块2.5、EJB2.1 在WildFly中,我有一个名为SchedulerDS的数据源,其JNDI名称为java:jboss/datasources/SchedulerDS。它使用jTDS

如何将数据源资源引用名称映射到WildFly中EJB中的JNDI名称

我知道在JBoss4.2.3中,它是在
JBoss.xml
中完成的,但在WildFly中不起作用

这是我的测试:

我正在EclipseLuna中使用Java1.7、XDoclet 1.2.3、WildFly 8.2.1.Final、动态Web模块2.5、EJB2.1

在WildFly中,我有一个名为
SchedulerDS
的数据源,其JNDI名称为
java:jboss/datasources/SchedulerDS
。它使用jTDS JDBC驱动程序并连接到MS SQL Server 2008 R2数据库

在Eclipse中,我创建了以下项目:

  • 名为Z01_EAR的企业应用程序项目
  • 名为Z01_WAR的动态Web项目
  • 名为Z01_EJB的EJB项目
  • 名为Z01_EJBClient的EJB客户端项目
  • 在Z01_EJB项目中,我创建了一个名为
    SLS01
    的XDoclet无状态会话Bean(EJB2.1)。在其中,我定义了一个名为
    jdbc/chumbo
    的数据源资源Ref。我定义了它到JNDI名称的映射
    java:jboss/datasources/SchedulerDS

    这是
    ejb jar.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar id="ejb-jar_1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1">
       <description><![CDATA[Z01_EJB generated by eclipse wtp xdoclet extension.]]></description>
       <display-name>Z01_EJB</display-name>
       <enterprise-beans>
          <session id="Session_SLS01">
             <description><![CDATA[An EJB named SLS01]]></description>
             <display-name>SLS01</display-name>
             <ejb-name>SLS01</ejb-name>
             <home>com.z01.ejb.SLS01Home</home>
             <remote>com.z01.ejb.SLS01</remote>
             <local-home>com.z01.ejb.SLS01LocalHome</local-home>
             <local>com.z01.ejb.SLS01Local</local>
             <ejb-class>com.z01.ejb.SLS01Session</ejb-class>
             <session-type>Stateless</session-type>
             <transaction-type>Container</transaction-type>
             <resource-ref id="ResRef_1">
                <res-ref-name>jdbc/chumbo</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
             </resource-ref>
          </session>
       </enterprise-beans>
       <assembly-descriptor id="AssemblyDescriptor_1">
       </assembly-descriptor>
       <ejb-client-jar>Z01_EJBClient.jar</ejb-client-jar>
    </ejb-jar>
    
    在EJB中,我编写了一个测试方法

    public void testRetrieve() {
    
        String dataSourceLookupString = null;
        InitialContext initialContext = null;
        DataSource dataSource = null;       
        Connection connection = null;
        String sql = null;
        Statement statement = null;
        ResultSet resultSet = null;
        long employeeId = -1;
    
    
        try {
            dataSourceLookupString = "java:comp/env/jdbc/chumbo";           
            initialContext = new InitialContext();
            dataSource = (DataSource) initialContext.lookup(dataSourceLookupString);
            connection = dataSource.getConnection();
            sql = "select top 1 employee_id from employee";
            statement = connection.createStatement();           
            resultSet = statement.executeQuery(sql);            
            if (resultSet != null && resultSet.next()) {
                employeeId = resultSet.getLong(1);
                System.out.println("testRetrieve(): employeeId=" + employeeId);
            }           
        } catch (NamingException e) {
            e.printStackTrace();            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();                
            }
        }       
    }
    
    它不起作用,我得到了这个错误:

    2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6) org.h2.jdbc.JdbcSQLException:未找到表“EMPLOYEE”;SQL 声明:2015-12-14 18:54:50403错误[stderr](MSC服务线程) 1-6)从员工[42102-173]2015-12-14中选择前1名员工id 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.message.DbException.getJdbcSQLException(DbException.java:331) 2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.message.DbException.get(DbException.java:171)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.message.DbException.get(DbException.java:148)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.readTableOrView(Parser.java:4864)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.readTableFilter(Parser.java:1107)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1713) 2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parseSelectSimple(Parser.java:1821)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parseSelectSub(Parser.java:1707)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parseSelectUnion(Parser.java:1550)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parseSelect(Parser.java:1538)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parsePrepared(Parser.java:405)2015-12-14 18:54:50403错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parse(Parser.java:279)2015-12-14 18:54:50419 错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.parse(Parser.java:251)2015-12-14 18:54:50419 错误[stderr](MSC服务线程1-6)位于 org.h2.command.Parser.prepareCommand(Parser.java:218)2015-12-14 18:54:50419错误[stderr](MSC服务线程1-6)位于 org.h2.engine.Session.prepareLocal(Session.java:428)2015-12-14 18:54:50419错误[stderr](MSC服务线程1-6)位于 org.h2.engine.Session.prepareCommand(Session.java:377)2015-12-14 18:54:50419错误[stderr](MSC服务线程1-6)位于 org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138) 2015-12-14 18:54:50419错误[stderr](MSC服务线程1-6)位于 org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:72) 2015-12-14 18:54:50419错误[stderr](MSC服务线程1-6)位于 org.jboss.jca.adapters.jdbc.WrappedStatement.executeQuery(WrappedStatement.java:344) 2015-12-14 18:54:50419错误[stderr](MSC服务线程1-6)位于 com.z01.ejb.SLS01Bean.testRetrieve(SLS01Bean.java:197)

    现在我将代码更改为直接查找到JNDI名称:

    dataSourceLookupString = "java:jboss/datasources/SchedulerDS";
    
    它工作得很好。这意味着
    jboss.xml
    在我的情况下不起作用。在这种情况下,如何将数据源资源引用名称映射到JNDI名称


    谢谢

    明白了,我必须为WildFly使用
    jboss-ejb3.xml
    而不是
    jboss.xml

    在jboss-ejb3.xml shema中没有元素,可以发布工作文件吗?我有同样的问题,但不能让它工作,只是重命名文件
    dataSourceLookupString = "java:jboss/datasources/SchedulerDS";