标签: jndi

如何使用给定的JNDI名称连接到Websphere数据源?

我正在使用Websphere Portal 7.0并使用RAD 8.0创建一个portlet.我的portlet正在尝试与远程服务器建立db2连接.我在本地编写了一个java程序来与服务器建立基本的JDBC连接,并从表中获取记录.代码工作正常; 但是,当我将代码添加到我的portlet以及db2jcc4.jar时,连接不起作用.我正在使用基本的:

Connection connection = DriverManager.getConnection("jdbc:db2://server:port/db:user=user;password=pw;");
Run Code Online (Sandbox Code Playgroud)

我认为使用Websphere数据源是正确的方法.我知道数据源的JNDI名称,但我没有找到关于如何建立连接的明确示例.有几个例子使用了一个DataSource类(我输入了这个类,这看起来好像它来自一个原生的java包,所以我在这里使用什么导入?)加上一个Context.我遇到过如下代码:

Context ctx = new InitialContext();
ctx.lookup("jdbc/xxxx");
Run Code Online (Sandbox Code Playgroud)

...有人可以为我打破这个吗?

编辑1

我根据列出的答案更新了我的代码.我真的觉得我越来越近了.这是我的getConnection()方法:

private Connection getConnection() throws SQLException {
    javax.naming.InitialContext ctx = null;
    javax.sql.DataSource ds = null;
    System.out.println("Attempting connection..." + DateUtil.now() );
    try {
        ctx = new javax.naming.InitialContext();
        ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/db");
        connection = ds.getConnection();
    } catch (NamingException e) {
        System.out.println("peformanceappraisalstatus: COULDN'T CREATE CONNECTION!");
        e.printStackTrace();
    }       
    System.out.println("connection: " + connection.getClass().getName() + " at " + DateUtil.now());
    return connection;
}
Run Code Online (Sandbox Code Playgroud)

我的整个web.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app …
Run Code Online (Sandbox Code Playgroud)

java db2 websphere jndi ibm-rational

21
推荐指数
1
解决办法
11万
查看次数

如何在context.xml中存储字符串值

我想将连接URL存储在我的Tomcat应用程序的JNDI绑定中.由于Tomcat context.xml用于JNDI资源定义,我需要找出存储String(或多个连接的多个字符串)的属性方法context.xml.

我这样做的原因是我可以为不同的环境定义不同的字符串,并通过JNDI加载它们.

通常,我看到这样的条目:

<Context ...>
    <Resource name="someName" auth="Container"
            type="someFullyQualifiedClassName"
            description="Some description."/>
</Context>
Run Code Online (Sandbox Code Playgroud)

这真的很简单:

<Context ...>
    <Resource name="myConnectionURL" auth="Container"
            type="java.lang.String"
            description="A connection URL string."/>
</Context>
Run Code Online (Sandbox Code Playgroud)

如果是这样,我在哪里实际存储String值?!?!如果它不正确,那么我存储的正确方法是什么,例如" amqp:5272//blah.example.com&param1=4",context.xml所以我可以这样查找:

Context ctx = new InitialContext();
String connectionURL = (String)ctx.lookup("myConnectionURL");
Run Code Online (Sandbox Code Playgroud)

提前致谢!

java string tomcat jndi context.xml

21
推荐指数
2
解决办法
2万
查看次数

Junit在应用程序服务器外部测试JNDI InitialContext

Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/multiDS");
connection = dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)

请帮我模仿上面的代码.

嗨汤姆安德森

我尝试了下面的代码

 @BeforeClass
 public static void setUpClass() throws Exception {
        // rcarver - setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                "org.apache.naming.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES, 
                "org.apache.naming");            
            Context ic = new InitialContext();

            ic.createSubcontext("java:");
            ic.createSubcontext("java:comp");
            ic.createSubcontext("java:comp/env");
            ic.createSubcontext("java:comp/env/jdbc");
            ic.createSubcontext("java:comp/env/jdbc/multiDS");
            // Construct DataSource
            OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
            ds.setURL("jdbc:oracle:thin:@g9u0696.houston.hp.com:1525:CRNAD");
            ds.setUser("uname");
            ds.setPassword("pwd");
        } catch (NamingException ex) {
            ex.printStackTrace();
        }
 }
Run Code Online (Sandbox Code Playgroud)

但它给出的错误是:

com.hp.corona.common.exception.CacheException: org.apache.naming.NamingContext cannot be cast to javax.sql.DataSource …
Run Code Online (Sandbox Code Playgroud)

java junit jndi

20
推荐指数
2
解决办法
3万
查看次数

独立Java程序中的Initialcontext

我正在使用JNDI来创建tomcat连接池.它在Web应用程序中运行良好.我相信InitialContext是由tomcat服务器提供的.

Context initContext  = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/testdb");
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从独立的Java程序调用相同的实用程序时,initContext对象为null.如何显式提供Context对象所期望的所有必需属性.

错误:javax.naming.NoInitialContextException:需要在环境或系统属性或applet参数或应用程序资源文件中指定类名:java.naming.factory.initial

java tomcat jndi connection-pooling java-ee

20
推荐指数
2
解决办法
3万
查看次数

如何从Web容器外部查找JNDI数据源?

我有以下环境设置:

  • Java 1.5
  • Sun Application Server 8.2
  • Oracle 10 XE
  • Struts 2
  • 过冬

我很想知道如何编写可以引用应用程序服务器提供的JNDI数据源的Java客户端(即Web应用程序之外)的代码.

Sun Application Server的端口都是默认端口.在服务器配置中有一个名为jdbc/xxxx的JNDI数据源,但我注意到Web应用程序的Hibernate配置使用名称java:comp/env/jdbc/xxxx.

到目前为止,我见过的大多数例子都涉及代码

Context ctx = new InitialContext();
ctx.lookup("jdbc/xxxx");
Run Code Online (Sandbox Code Playgroud)

但似乎我要么使用错误的JNDI名称,要么我需要配置jndi.properties或其他配置文件来正确指向监听器?我有来自Sun Application Server的appserv-rt.jar,里面有一个jndi.properties,但似乎没什么帮助.

这里有一个类似的问题,但它没有给出任何代码/指的是让iBatis自动获取JNDI数据源:从Web容器外部访问数据源(通过JNDI)

java jndi datasource jdbc

19
推荐指数
1
解决办法
6万
查看次数

使用用户名和密码的Java LDAP身份验证

我有一个工作代码片段,我可以通过它来验证用户dn和密码.我的要求是用户将输入他的用户名(sAMAccountName),我想使用sAMAccountName和密码进行身份验证.如何修改此代码才能实现?

    String userName = "John P R-Asst General Manager";
    String passWord = "asdfgh123";
    String base ="OU=SOU,DC=example,DC=com";
    String dn = "cn=" + userName + "," + base;

    String ldapURL = "ldap://mdsdc3.example.com:389";
    authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    authEnv.put(Context.PROVIDER_URL, ldapURL);
    authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
    authEnv.put(Context.SECURITY_PRINCIPAL, dn);
    authEnv.put(Context.SECURITY_CREDENTIALS, password);

    try {
        DirContext authContext = new InitialDirContext(authEnv);
        return true;

    } catch (NamingException namEx) {
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

authentication jndi ldap

19
推荐指数
2
解决办法
6万
查看次数

"javax.naming.NoInitialContextException"是什么意思?

正如标题所暗示的那样,"javax.naming.NoInitialContextException"在非技术术语中意味着什么?有什么一般建议来解决它?

编辑(从控制台):

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.java:25)
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.java:10)
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:30)
    at cepars.review.Test.main(Test.java:43)
java.lang.NullPointerException
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:31)
    at cepars.review.Test.main(Test.java:43)
cepars.app.DAOException
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:39)
    at cepars.review.Test.main(Test.java:43)
Run Code Online (Sandbox Code Playgroud)

java jndi jdbc

18
推荐指数
3
解决办法
10万
查看次数

连接池,jdbc和jndi的差异

我需要知道我对上述内容的理解是否正确.

在连接池中,使用java.sql.Datasource设置多个连接.

在jdbc中,我们直接指定连接url和oracle.jdbc.driver.OracleDriver,它始终是一个连接,其中另一个请求必须等到连接完成处理.

使用JNDI,它类似于直接jdbc,我们通过名称引用jdbc设置,以便我们可以在应用程序服务器中指定连接URL和其他设置,而不是将它们绑定到应用程序,对吧?

java jndi jdbc

18
推荐指数
2
解决办法
3万
查看次数

什么是更快:JDBC还是JNDI?

我有两个选项来配置我的应用程序数据库连接 - 一个使用JDBC,另一个使用JNDI.就这些连接类型与数据库的工作速度而言,最佳选择是什么.

我理解这些是使用不同原则的两种不同类型的数据库连接(JDBC是直接数据库连接,JNDI是应用程序服务器端的数据库连接池配置).但是否有其他一般的JDBC/JNDI优缺点可能比运行速度更重要?如果是的话,他们是什么?

java mysql database jndi jdbc

17
推荐指数
2
解决办法
2万
查看次数

无法将连接强制转换为oracle.jdbc.OracleConnection

为什么java.sql.Connection无法在下面的代码中强制转换为oracle.jdbc.OracleConnection?

我的主要目标是传递给Oracle连接新用户名并将其保存在例如'osuser'列的'SESSION'表中,因为我想跟踪数据库用户更改并将其显示在表中.

@Repository
public class AuditLogDAOImpl implements AuditLogDAO {

    @PersistenceContext(unitName="myUnitName")
    EntityManager em;

    @Resource(name = "dataSource")
    DataSource dataSource;

    public void init() {

        try {
            Connection connection = DataSourceUtils.getConnection(dataSource);
            OracleConnection oracleConnection = (OracleConnection) connection; //Here I got cast exception!

            String metrics[] = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX];
            metrics[OracleConnection.END_TO_END_CLIENTID_INDEX] = "my_new_username";

            oracleConnection.setEndToEndMetrics(metrics, (short) 0);

            java.util.Properties props = new java.util.Properties();
            props.put("osuser", "newValue");

            oracleConnection.setClientInfo(props);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错误日志:

10:42:29,251 INFO  [STDOUT] org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@bcc8cb
10:42:51,701 ERROR [STDERR] java.lang.ClassCastException: $Proxy286 cannot be cast to oracle.jdbc.OracleConnection …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate jndi jdbc

16
推荐指数
2
解决办法
6万
查看次数