您的位置:首页 > 编程语言 > Java开发

Weblogic操作数据源NameNotFoundException解决办法

2016-03-16 11:39 573 查看
Weblogic提供了对各种数据库的支持,你可以通过Weblogic建立数据源,通过数据源访问数据库对象。

可以通过如下JAVA代码实现(假设我的数据源叫“AB”,数据库名称叫users,其中有id,name,password三个字段)

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Hashtable;

/**
* Created by Administrator on 2016/3/16.
*/
public class TestJndi {
public static void main(String[] args) throws Exception{
DataSource ds=null;
Context context;
Connection connection=null;

//      初始化一个Context对象
Hashtable hashtable = new Hashtable();
hashtable.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
context=new InitialContext(hashtable);
//        通过Context对象查找数据源
ds= (DataSource) context.lookup("AB");
connection= ds.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
//        遍历
while (resultSet.next()){
System.out.println("id="+resultSet.getString("id"));
System.out.println("name="+resultSet.getString("name"));
System.out.println("password="+resultSet.getString("password"));

}

}
}
这时直接运行将会报错,出现一个NameNotFoundException

Exception in thread "main" javax.naming.NameNotFoundException: Unable to resolve 'AB'. Resolved '' [Root exception is javax.naming.NameNotFoundException: Unable to resolve 'AB'. Resolved '']; remaining name 'AB'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1180)
at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:270)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:187)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:210)
at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:701)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:231)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:527)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:523)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
Caused by: javax.naming.NameNotFoundException: Unable to resolve 'AB'. Resolved ''
at weblogic.utils.StackTraceDisabled.unknownMethod()


因为,我们没有配置数据源,所以找不到一个叫‘AB’的数据源。
为了解决这个问题,我们需要在Weblogic中对数据源进行相关的配置

(这里,我用的是weblogic12c版本,不同版本页面可能不一样,但是都差不多)

1)打开http://localhost:7001/console,登陆管理员账号,在下面,我们找到 一个叫数据源的选项



2)然后我们打开新建选项,新建一个一般数据源



3)接下来配置数据源



这里,要注意的是JNDI的名称是作为被访问的名称,还有数据库驱动程序选择你自己用的数据库驱动程序(Webloigc自带的)

3)一直下一步,你会看到这个选项,填写数据库名称,主机名,端口,登陆口令等等



4)一直next,到最后一步



这一步你要记得勾选AdminServer这个选项,说明也很清楚,如果你没有勾选这个选项,将不会部署数据源,那么你就会依然访问不了数据源,依然发生

javax.naming.NameNotFoundException。

以上事情完成之后,你就能正常访问数据源了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息