Weblogic 10.3 的JNDI 配置

Weblogic 10.3 的JNDI 配置

weblogic10.3 这个应用服务器是oracle 收购Bean 公司后新出的版本.今天试用下,发现不错.将JNDI的配置过程一一记录,
1: 启动weblogic 10.3 采用默认密码进入
2:在JDBC-DATASOURCE 中假建一个应用数据源.
3:在 Configuration-->Connection Pool-->Advanced 中的Test Connections On Reserve  一定要沟上,不然会测试通不过
4:填写测试的表名 Test Table Name:   等信息

5:编写测试的JSP文件

<! doctype html  public   " -//w3c//dtd html 4.0 transitional//en "     " http://www.w3.org/TR/REC-html40/strict.dtd " >
<% @ page  import = " java.sql.* " %>
<% @ page  import = " javax.sql.* " %>
<% @ page  import = " javax.naming.* " %>
<% @ page session = " false " %>
< html >
< head >
< meta http - equiv = " Content-Type "  content = " text/html; charset=gb2312 " >
< title > Test JNDI </ title >
</ head >
< body >
    
<%
    out.print(
"   Test Jndi Begin !!     " );
    DataSource ds 
=   null ;
    
try   {
        InitialContext ctx 
= new InitialContext();
        ds 
= (DataSource) ctx.lookup("jdbc/mysql");
        Connection conn 
= ds.getConnection();
        Statement stmt 
= conn.createStatement();
        String strSql 
= " select * from tb_adminuser";
        ResultSet rs 
= stmt.executeQuery(strSql);
        
while (rs.next()) {
            out.println(rs.getString(
4));
        }

        out.print(
"Test is over");
    }
catch  (Exception ex)  {
        out.print(
"ERROR:" + ex.getMessage());
        ex.printStackTrace();
    }

%>
</ body >

</ html >

6:编写 JUNIT
package  com.XXXXXX.framework.datasource;

import  java.sql.Connection;
import  java.sql.ResultSet;
import  java.sql.Statement;
import  java.util.Hashtable;

import  javax.naming.Context;
import  javax.naming.InitialContext;
import  javax.sql.DataSource;

import  junit.framework.TestCase;

public   class  TestJndi  extends   TestCase {

    
    
public void testJndi() throws Exception{
        Hashtable ht 
= new Hashtable();          
        ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
        ht.put(Context.PROVIDER_URL, 
"t3://localhost:7001");
        Context initial 
= new InitialContext(ht);
        DataSource ds 
= (DataSource) initial.lookup("jdbc/mysql");
        Connection connect 
= ds.getConnection();

        Statement stmt 
= connect.createStatement();   
        String strSql 
= " select * from tb_adminuser";   
       
        ResultSet rs 
= stmt.executeQuery(strSql);   
        
while(rs.next()){   
            System.out.println(rs.getString(
2));
          }
  

    }



}

其中在编写JUNIT 的时候,有一个插曲.我在网上看到别人的代码是用t3://localhost:7007

我也照COPY,结果出现错误如下:
javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3: // localhost:7007: Destination unreachable; nested exception is: 
    java.net.ConnectException: Connection refused: connect; No available router to destination]
    at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:
40 )
    at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:
783 )
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:
367 )
    at weblogic.jndi.Environment.getContext(Environment.java:
315 )
    at weblogic.jndi.Environment.getContext(Environment.java:
285 )
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:
117 )
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:
667 )
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:
288 )
    at javax.naming.InitialContext.init(InitialContext.java:
223 )
    at javax.naming.InitialContext.
< init > (InitialContext.java: 197 )
    at com.etong.framework.datasource.TestJndi.testJndi(TestJndi.java:
21 )
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39 )
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25 )
    at java.lang.reflect.Method.invoke(Method.java:
597 )
    at junit.framework.TestCase.runTest(TestCase.java:
168 )
    at junit.framework.TestCase.runBare(TestCase.java:
134 )
    at junit.framework.TestResult$
1 .protect(TestResult.java: 110 )
    at junit.framework.TestResult.runProtected(TestResult.java:
128 )
    at junit.framework.TestResult.run(TestResult.java:
113 )
    at junit.framework.TestCase.run(TestCase.java:
124 )
    at junit.framework.TestSuite.runTest(TestSuite.java:
232 )
    at junit.framework.TestSuite.run(TestSuite.java:
227 )
    at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:
76 )
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
38 )
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38 )
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460 )
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673 )
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386 )
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196 )
Caused by: java.net.ConnectException: t3:
// localhost:7007: Destination unreachable; nested exception is: 
    java.net.ConnectException: Connection refused: connect; No available router to destination
    at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:
203 )
    at weblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:
153 )
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:
352 )
     
27  more
Caused by: java.rmi.ConnectException: Destination unreachable; nested exception is: 
    java.net.ConnectException: Connection refused: connect; No available router to destination
    at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:
464 )
    at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:
315 )
    at weblogic.rjvm.RJVMManager.findOrCreateRemoteInternal(RJVMManager.java:
251 )
    at weblogic.rjvm.RJVMManager.findOrCreate(RJVMManager.java:
194 )
    at weblogic.rjvm.RJVMFinder.findOrCreateRemoteServer(RJVMFinder.java:
225 )
    at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:
188 )
     
29  more


换成 t3://localhost:7001
测试成功.看来不懂就到网上乱COPY代码,还是不行的

 

我已经在配置文件里配置了context.java.naming.factory.initial,而在这里还提示这个错误
关键看这里

Error initializing JtaTransactionConfig while looking up UserTransaction (javax.transaction.UserTransaction). Cause: 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


jvm里加上一个参数,测试一下

-Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory


运行通过

这个参数在:右键项目 --Run as --Open Run Dialog--Arguments VM arguments 中添加即可


你可能感兴趣的:(Weblogic 10.3 的JNDI 配置)