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.java

3、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是必要的。

.