Как вызвать эту Java-программу на PL/SQL

У меня есть Java-программа, которая показывает список портов, доступных в моей системе.

Эта программа работает нормально в командной строке. Но теперь я хочу использовать эту программу Java через PL/SQL.

Но я сталкиваюсь с ошибкой, как прилагается.

Потратьте много времени, но не можете добиться успеха.

Ниже моя программа Java.

import javax.comm.*;
import java.util.*;

/** List all the ports available on the local machine. **/
public class TestPorts
{
public static void main (String args[])
{

Enumeration port_list = CommPortIdentifier.getPortIdentifiers();

while (port_list.hasMoreElements())
{
CommPortIdentifier port_id = (CommPortIdentifier)port_list.nextElement();

if (port_id.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
System.out.println ("Serial port: " + port_id.getName());
}
else if (port_id.getPortType() == CommPortIdentifier.PORT_PARALLEL)
{
System.out.println ("Parallel port: " + port_id.getName());
}
else
System.out.println ("Other port: " + port_id.getName());
}
} // main
} // class PortList[enter image description here][1]

D:\>loadjava -u hr1/hr1@orcl -v -resolve TestPorts.java
arguments: '-u' 'hr1/hr1@orcl' '-v' '-resolve' 'TestPorts.java'
creating : source TestPorts
loading  : source TestPorts
resolving: source TestPorts
errors   : source TestPorts
    ORA-29535: source requires recompilation
    TestPorts:10: cannot resolve symbol
    symbol  : variable CommPortIdentifier
    location: class TestPorts
    Enumeration port_list = CommPortIdentifier.getPortIdentifiers();
                            ^
    TestPorts:14: cannot resolve symbol
    symbol  : class CommPortIdentifier
    location: class TestPorts
    CommPortIdentifier port_id = (CommPortIdentifier)port_list.nextElement();
    ^
    TestPorts:14: cannot resolve symbol
    symbol  : class CommPortIdentifier
    location: class TestPorts
    CommPortIdentifier port_id = (CommPortIdentifier)port_list.nextElement();
                                  ^
    TestPorts:16: cannot resolve symbol
    symbol  : variable CommPortIdentifier
    location: class TestPorts
    if (port_id.getPortType() == CommPortIdentifier.PORT_SERIAL)
                                 ^
    TestPorts:20: cannot resolve symbol
    symbol  : variable CommPortIdentifier
    location: class TestPorts
    else if (port_id.getPortType() == CommPortIdentifier.PORT_PARALLEL)
                                      ^
    5 errors
The following operations failed
    source TestPorts: resolution
exiting  : Failures occurred during processing

D:\>

3 ответа

javax.comm не является частью стандартного JDK, поэтому вам нужно добавить его вручную, используя ojvmtc инструмент перед запуском loadjava, смотрите документацию ojvmtc

Сначала давайте проверим CommPortIdentifier.class в базе данных.

Как SYS: SELECT имя_объекта, состояние ОТ dba_objects  WHERE тип_объекта, например, "%JAVA%" и dbms_java.longname(имя_объекта), например, "% CommPortIdentifier%";

Если не выбрано ни одной строки, вы можете попробовать загрузить нужную библиотеку jar, которая содержит CommPortIdentifier.class, используя loadjava? Затем скомпилируйте ваш код снова в базе данных.

Можете ли вы попробовать запустить файл.class вместо.java

  • сначала скомпилируйте ваш класс java, используя javac TestPorts.java (его вывод - TestPorts.class)
  • loadjava -u hr1 / hr1 @ orcl -v -resolve TestPorts.class
Другие вопросы по тегам