摘要: 总觉得Hibernate影响设计思路
发表: 2006年07月23日 08:09
回复
...
阅读全文
我试图连接数据库时的ORA-01034 和 ORA-27101错误信息,它总是显示这样的信息,“ORA-01034 - Oracle not available”和“ORA-27101 - shared memory realm does not exist”。
不能连接到我的Oracle 数据库上。
因为碰到防火墙的问题次数比较多,这次也先看看,发现根本就没什么拦截的。查看了一下监听,数据库实例也是运行着的。
奇怪的事情,刚才还好好的,重启了机器就不行了。上网找了找,问题就解决了。
解决的方法倒是不麻烦...
首先看一下 ORACLE_BASE\ORACLE_HOME\DATABASE 下面的 ORADIM.LOG 文件
如果里边有这个错误
ORA-12640: 验证适配器初始化失败
那么问题就是他了.
到ORACLE_BASE\ORACLE_HOME\NETWORK\ADMIN下面找sqlnet.ora文件
把sqlnet.authentication_services=(NTS) 改成
sqlnet.authentication_services=(NONE)
然后手动重起一下你的哪个数据库服务..在开始->控制面板->管理工具->服务里然后把这个服务的启动帐号改成你的帐号吧...其实不改大概也没有毛病.我就没改。。
看了这个方法,出错的原因大概有两种情况,修改了帐户,实例有些变动等。
在cmd窗口中,使用sqlplus,使用用户名,密码登陆默认的数据库。
The Context element represents a web application, which is run within a particular virtual host. Each web application is based on a Web Application Archive (WAR) file, or a corresponding directory containing the corresponding unpacked contents, as described in the Servlet Specification (version 2.2 or later).
从上述描述看出,Context元素代表的是一个web application。
You may define as many Context elements as you wish. Each such Context MUST have a unique context path, which is defined by the path
attribute. In addition, you MUST define a Context with a context path equal to a zero-length string. This Context becomes the default web application for this virtual host, and is used to process all requests that do not match any other Context's context path.
从上面的描述可以看出Context的数量自己定,但是必须定义一个path属性为空的Context,用来出来匹配不上其它path的用户请求。
In addition to nesting Context elements inside a Host element, you can also store them:
- in the individual
$CATALINA_HOME/conf/context.xml
file: the Context element information will be loaded by all webapps
- in the individual
$CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default
file: the Context element information will be loaded by all webapps of that host
- in individual files (with a ".xml" extension) in the
$CATALINA_HOME/conf/[enginename]/[hostname]/
directory
-
if the previous file was not found for this application, in individual file at
/META-INF/context.xml
inside the application files
以上的文字,是我写这篇文档的根源。
Context element的放置位置:有5个。
1、conf/server.xml的host元素之下。
2、conf/context.xml
中,被所有的应用共享。
3、conf/[enginename]/[hostname]/context.xml中,被所有的应用共享。
4、conf/[enginename]/[hostname]/
directory.xml中,就是以目录名作为文件名的配置文件。
5、/META-INF/context.xml 在应用的目录中。
其中:1、2、3都是全局共享的。
4、5都是针对独立应用的。
最后一种5生效的唯一理由是前面的4的文件找不到,如果有4,则5的配置将会完全被屏蔽掉。
This method allows dynamic reconfiguration of the web application, since the main conf/server.xml
file cannot be reloaded without restarting Tomcat. Please note that for tomcat 5, unlike tomcat 4.x, it is NOT recommended to place <Context> elements directly in the server.xml file. Instead, put them in the META-INF/context.xml directory of your WAR file or the conf directory as described above.
以上的描述可以发现,conf/server.xml file cannot be reloaded without restarting Tomcat。
反之如果配置到其他地方却可以自动reload。自动重载意味着什么我就不多说了。
为了联系配置JNDI,我安装了mysql 5.0.18
在其中建立了一个测试的库,和一张表,插入了一点儿数据。
JNDI的使用,分为两种:全局和局部的。
全局的:
conf/server.xml中配置(注意,配置Resource的方法在Tomcat的以前版本中不是这样的,需要按照这个简化语法来改,否则就和我一样折腾半死也不明白为什么了。)
<
GlobalNamingResources
>
...
<
Resource
name
="student"
type
="javax.sql.DataSource"
driverClassName
="com.mysql.jdbc.Driver"
password
="1"
maxIdle
="2"
maxWait
="5000"
username
="root"
url
="jdbc:mysql://localhost:3306/schoolproject"
maxActive
="4"
/>
...
</
GlobalNamingResources
>
配置完成之后,就是使用它了。
有两个地方,根据前文描述,选择一个。
建立META-INF/context.xml(使用方法5,在局部配置时掩饰使用方法4)
其中的name是程序中引用,其中的global是在全局Resource中定义的name。
写个测试的jsp
index.jsp
<%
@ page language
=
"
java
"
import
=
"
javax.sql.*,java.sql.*,javax.naming.*
"
contentType
=
"
text/html;charset=UTF-8
"
%>
<
html
>
<
head
>
<
title
>
test
</
title
>
<
head
>
<
body
>
Hello olojiang
!<
br
/>
<%
Context initCtx
=
new
InitialContext();
DataSource ds
=
(DataSource)initCtx.lookup(
"
java:comp/env/student
"
);
if
(ds
!=
null
)
...
{
Connection conn
=
ds.getConnection();
Statement st
=
conn.createStatement();
ResultSet rs
=
st.executeQuery(
"
select * from student
"
);
while
(rs.next())
...
{
out.print(rs.getString(
1
)
+
"
"
);
out.print(rs.getString(
2
)
+
"
"
);
out.print(rs.getString(
3
)
+
"
"
);
out.println(rs.getInt(
4
)
+
"
<br/>
"
);
}
st.close();
conn.close();
}
%>
</
body
>
</
html
>
完美输出结果。
局部的:
conf\Catalina\localhost\DBTest.xml(使用方法4,前面演示了使用方法5)
在其中书写可以有动态重载的优势,DBTest时目录名称。
<
Context
path
="/DBTest"
docBase
="DBTest"
debug
="5"
reloadable
="true"
crossContext
="true"
>
<
Resource
name
="jdbc/TestDB"
type
="javax.sql.DataSource"
driverClassName
="com.mysql.jdbc.Driver"
password
="1"
maxIdle
="2"
maxWait
="5000"
username
="root"
url
="jdbc:mysql://localhost:3306/schoolproject"
maxActive
="4"
/>
</
Context
>
配置好了之后,比前面多处一步:需要在应用的WEB-INF/web.xml中写引用。(使用全局的配置不需要作这一部也能成功,这里不作这步我也好像成功了,但是很多地方都写需要这步,不知为何?)
<?
xml version="1.0" encoding="UTF-8"
?>
<
web-app
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/web-app_2_4.xsd"
version
="2.4"
>
<
description
>
MySQL Test App
</
description
>
<
resource-ref
>
<
description
>
DB Connection
</
description
>
<
res-ref-name
>
jdbc/TestDB
</
res-ref-name
>
<
res-type
>
javax.sql.DataSource
</
res-type
>
<
res-auth
>
Container
</
res-auth
>
</
resource-ref
>
</
web-app
>
使用同样的JSP测试之:
<%
@ page language
=
"
java
"
import
=
"
javax.sql.*,java.sql.*,javax.naming.*
"
contentType
=
"
text/html;charset=UTF-8
"
%>
<
html
>
<
head
>
<
title
>
test
</
title
>
<
head
>
<
body
>
Hello olojiang
!<
br
/>
<%
Context initCtx
=
new
InitialContext();
DataSource ds
=
(DataSource)initCtx.lookup(
"
java:comp/env/jdbc/TestDB
"
);
if
(ds
!=
null
)
...
{
Connection conn
=
ds.getConnection();
Statement st
=
conn.createStatement();
ResultSet rs
=
st.executeQuery(
"
select * from student
"
);
while
(rs.next())
...
{
out.print(rs.getString(
1
)
+
"
"
);
out.print(rs.getString(
2
)
+
"
"
);
out.print(rs.getString(
3
)
+
"
"
);
out.println(rs.getInt(
4
)
+
"
<br/>
"
);
}
st.close();
conn.close();
}
%>
</
body
>
</
html
>
运行完美。
两种方法都说了,自己走了很多弯路,配这么点儿东西折腾了一整天,忘后来者能顺利些。
不足处请多包涵。
开心ing!~
在机上装了Oracle 9i,也配好了TNSLISTENER监听程序。启动时,其它服务都启动正常,唯独TNSLISTENER监听服务无法启动。在“控制面板”之“服务”中查看,发现该服务的属性中“可执行文件的路径”一栏为空白,无法指定其真实的执行路径。
在“开始”-“程序”-“Oralce-OraHome92”-“Net Configuration Assistant”中配置监听程序后依然如此。
可在cmd命令下用以下命令来控制监听
snrctl stop
lsnrctl start
lsnrctl service
使用lsnrctl start启动监听时有下面信息:
启动tnslsnr:请稍候...
TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Production
系统参数文件为D:\oracle\ora92\network\admin\listener.ora
写入D:\oracle\ora92\network\log\listener.log的日志信息
监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zhengxibing)(PORT=15
21)))
TNS-12545: 因目标主机或对象不存在,连接失败
TNS-12560: TNS: 协议适配器错误
TNS-00515: 因目标主机或对象不存在,连接失败
32-bit Windows Error: 1001: Unknown error
监听程序未能启动。请参阅上面的错误消息...
原因是机器名修改过后,D:\oracle\ora92\network\admin\listener
.ora文件的机器名没有修改为新的机器名。
select count(*) from wf_flow_instance_info t where t.flow_id = '416'
/*
select count(*) from wf_document_statictis_view t
where t.flow_id='416' and t.writ_form_id = '161'-- t.flow_name like '%増容%'-- and t.writ_form_name like '%不予%'
*/
--select * from wf_flow_info t where t.flow_visible !='0'
/*
select count(*) from wf_flow_writ_ins_info w
where w.writ_form_id = '89'
and w.flow_instance_id in (
select ins.instance_id from wf_flow_instance_info ins where ins.flow_id='390'
)
*/
这是我BlogJava的第一篇日志,非常感谢您的到来!
在这个空间里,我准备将一些主要的Java编程设想和某些技术领域发表一些个人的看法;
也希望来参观我空间的人,参与讨论;
这是一个自由的空间,我们要的是idea,
Please give me some ideas when you have ideal options.
We share More development on the Roma Road;
thank you very much! thanks a lots!