正确的JNDI @Resource(name) - java

我有以下用于获取JDBC连接的类:

package util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class OracleConnection implements AutoCloseable{

private final String oracle_DS_CTX = "java:jboss/oracleDS"; 

    //  @Resource(name="java:jboss/oracleDS")
    //  private DataSource ds; //doesn't work   

    private Connection _conn;   

    public OracleConnection() throws SQLException, NamingException{

            Context ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup(oracle_DS_CTX);
            _conn = ds.getConnection();
    }

    @Override
    public void close() throws Exception {
            if(_conn != null){
                    _conn.close();
            }
    }

    public Connection getConnection() throws SQLException {
            return _conn;
    }
}    

我在使用@Resource注释时遇到问题。通过InitialContext获得的数据源可以正常工作,但是我不确定应该在资源名称中输入什么字符串(在代码中注明)。

我努力了:
@Resource(name="java:jboss/oracleDS")@Resource(name="oracleDS")
AS是JBOSS AS7

参考方案

您在standalone.xml中定义了什么名称?

这是您需要在@Resource中定义的名称

但是有一个小技巧,您需要在lookup属性而不是name中进行设置。

这是一个示例,假设我的DS jndi是java:jboss/ExampleDS

@Resource(lookup = "java:jboss/ExampleDS")
private DataSource dataSource;

HIbernate创建数据库表 - java

我正在学习JPA-Hibernate。我正在关注这个article在Dog.java中,它被称为@Table(name = "dog")。 在persistence.xml中,我有以下内容<property name="hibernate.hbm2ddl.auto" value="create"…

使Java中的未处理异常中断程序 - java

假设我们有一个位于调用堆栈深处的函数。该函数执行多项操作,并调用5个引发异常的不同函数。在C#中,我可以保留这些异常,并确保如果抛出任何异常,则程序会中断。这就是我所希望的-这些异常应停止程序。在Java中,编译时会出现错误。据我所知,我有两种选择:处理所有这些并保持程序运行。但正如我所说-我确实想破坏程序,处理所有异常可能只会使代码混乱。使函数重新抛出这些…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…