Oracle8i Java支持测试手记
1、清除系统中的JAVA产品,使得CLASSPATH为空,PATH中也没有vbroker等可能产生干扰的产品。
2、典型安装8.1.6,Home为OraHome81,位置g:\oracle\ora81,全局名ORA.YANGWU。
3、检查默认安装的TNSLISTENER配置:IPC(EXTPROC0)、TCP(1521)、GIOP/TCP(2481),TNSNAME为ORA.YANGWU=TCP(1521)、EXTPROC_CONNECTION_DATA=IPC(EXTPROC0)。
4、测试giop连接:sess_sh -u scott -p tiger -service sess_iiop://localhost:2481:ORA,成功。
5、检查数据库中的JAVA对象:
select dbms_java.longname(object_name),status from user_objects where object_type = 'JAVA CLASS';
select count(*) from user_objects where object_type = 'JAVA CLASS' and status='VALID';
SYS用户:VALID的JAVA对象有8535个。
SCOTT用户:VALID的JAVA对象为0个。
6、检查JAVA对象装入:
1、编写Hello.java:
class Hello { public static String world() { return "Hello world"; } }2、为编译该程序,安装sun jdk 1.2.2,未选JRE,经检查,未修改CLASSPATH和PATH。
3、编译Hello.java,得到Hello.class
4、将类装入数据库:loadjava -user scott/tiger Hello.class ,成功。
5、检查scott用户模式中的JAVA对象:Hello,INVALID。
6、dropjava -user scott/tiger Hello.class。
7、loadjava -user scott/tiger Hello.java,成功。
8、检查scott用户模式中的对象变化情况,增加了Hello/JAVA CLASS和Hello/JAVA SOURCE,均为INVALID。
9、dropjava -user scott/tiger Hello.java,成功。
10、loadjava -user scott/tiger -resolve Hello.java,成功。
11、检查scott用户模式中对象变化情况,增加了Hello/JAVA CLASS和Hello/JAVA SOURCE,均为VALID。
7、测试JAVA存储过程:目前不感兴趣,以后再测试。
8、EJB测试
1、编写HelloWorld的EJB:使用ORACLE自带的G:\Oracle\Ora81\javavm\demo\demo.zip中的examples\ejb\basic\helloworld例子。
2、设定PATH/CLASSPATH,编译各.java文件。
这是我的ejbenv.bat:设置使用Java 2,如果用1.1则classes12.zip改成classes111.zip。
set CLASSPATH=.;g:\oracle\ora81\jdbc\lib\classes12.zip;g:\oracle\ora81\sqlj\lib\translator.zip;g:\oracle\ora81\lib\aurora_client.jar;g:\oracle\ora81\lib\vbjorb.jar;g:\oracle\ora81\lib\vbjapp.jar;G:\Oracle\Ora81\orb\classes\yoj.jar;G:\Oracle\Ora81\orb\classes\share.zip; set PATH=%PATH%;c:\jdk1.2.2\bin;这是我的makeit.bat:(示例中已经有一个makeit.bat,不过用起来实在不爽,还是俺这个简洁。)
call c:\java\ejbenv.bat javac -g hello\Hello.java javac -g hello\HelloHome.java javac -g helloServer\HelloBean.java jar cf0 server.jar hello/Hello.class hello/HelloHome.class helloServer/HelloBean.class javac -g Client.java3、jar -cf0 server.jar ....,打包成server.jar。
4、编写交付脚本,在demo中已经带有现在的hello.ejb:
SessionBean helloServer.HelloBean { BeanHomeName = "test/myHello"; RemoteInterfaceClassName = hello.Hello; HomeInterfaceClassName = hello.HelloHome; AllowedIdentities = { PUBLIC }; RunAsMode = CLIENT_IDENTITY; // TransactionAttribute = TX_SUPPORTS; }5、deploy -republish -temp t -u scott -p tiger -s sess_iiop://localhost:2481:ora -descriptor hello.ejb server.jar,成功。这时目录下多了一个server_generated.jar。
6、检查scott用户模式中的对象变化,增加了17个JAVA CLASS。
7、用sess_sh检查名字空间,/test下增加了myHello对象。
8、用java client sess_iiop://localhost:2481:ora /test/myHello scott tiger试运行客户端,结果:
Exception in thread "main" javax.naming.NamingException: Unknown reasons. Root exception is java.lang.ClassNotFoundException: hello.HelloHomeHelper at java.net.URLClassLoader$1.run(URLClassLoader.java, Compiled Code) at java.lang.Exception.(Exception.java, Compiled Code) at java.lang.ClassNotFoundException. (ClassNotFoundException.java,Compiled Code) at java.net.URLClassLoader$1.run(URLClassLoader.java, Compiled Code) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java, Compiled Code) at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled Code) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java, Compiled Code) at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled Code) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:124) at oracle.aurora.jndi.sess_iiop.SessionCtx._activate(SessionCtx.java:66) at oracle.aurora.jndi.sess_iiop.SessionCtx.activate(SessionCtx.java:304) at oracle.aurora.jndi.sess_iiop.ServiceCtx.lookup(ServiceCtx.java:330) at oracle.aurora.jndi.sess_iiop.sess_iiopURLContext.lookup(sess_iiopURLContext.java:232) at oracle.aurora.jndi.sess_iiop.sess_iiopURLContext.lookup(sess_iiopURLContext.java:218) at javax.naming.InitialContext.lookup(InitialContext.java:349) at Client.main(Client.java:24) 9、以上的信息是在没有加-g参数编译时产生的,加上-g参数则提示找不到helpclass,这是因为Client端访问EJB对象时需要的stub找不到,这个stub就是在deploy时生成的server_generated.jar,把它加到classpath里就ok:
set classpath=%CLASSPATH%;D:\h\server_generated.jar;10、EJB测试结论:这个测试过程中遇到了很多古怪的问题,基本上都是CLASSPATH设置不当引起的,所以在开发机器上尽量不要多装多种JDK,很必要搞清楚哪些CLASSPATH是必要的。
.