4

小さなJavaクラスをOracle 11gにロードして、実行してPL/SQLから呼び出すことができるようにしようとしています。eclipse のローカル マシンでクラスをコーディングしてコンパイルしたところ、正常にコンパイルされました。私はそれをjarにパッケージ化しました(jarで依存する他のjarファイルとともに)。彼らは私のjarをOracle 11gにロードしようとしました。すべてがロードされますが、残念ながらカスタムJavaクラスをロードすると無効のままになり、Oracle内でコンパイルしようとすると、クラスへの参照が見つからないと言われます(クラスでjarにパッケージ化したもの)。

構成する必要がある他の種類の設定はありますか?

カスタム クラスのコードは次のようになります。

import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.*;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
import javax.xml.rpc.ServiceException;
import java.net.URL;
import java.rmi.RemoteException;
import org.apache.log4j.Logger;
import java.net.MalformedURLException;

public class AssetExtractor {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

}


   static Logger LOG;
   static AuthToken authToken = null;

   static FlashlineRegistry repository = null;
   static URL repoURL;


    public static FlashlineRegistry getRepository()
    {
        if(repository == null)
            try
            {
                try{
                    repoURL = new URL("https://myserver/oer/services/FlashlineRegistry");
                }catch(MalformedURLException mue)
                {
                    LOG.error(mue);
                }

                repository = (new FlashlineRegistryServiceLocator()).getFlashlineRegistry(repoURL);
                LOG.debug((new StringBuilder()).append("Created repository at URL=").append(repoURL.toString()).toString());
            }
            catch(ServiceException e)
            {
                LOG.error(e, e);
            }
        return repository;
    }

    public static AuthToken getAuthToken()
    {
        if(authToken == null)
            try
            {
                authToken = getRepository().authTokenCreate("user", "password");
                LOG.debug("Created auth token.");
            }
            catch(OpenAPIException e)
            {
                LOG.error(e, e);
            }
            catch(RemoteException e)
            {
                LOG.error(e, e);
            }
        else
            try
            {
                getRepository().authTokenValidate(authToken);
            }
            catch(OpenAPIException e)
            {
                LOG.info("Auth token was invalid.  Recreating auth token");
                authToken = null;
                return getAuthToken();
            }
            catch(RemoteException re)
            {
                LOG.error("Remote exception occured during creation of suth token after determined to be invalid", re);
                re.printStackTrace();
                authToken = null;
            }
        return authToken;
    }

    public static String getAssetXML(String strAssetID)
    {
        String strAsset = null;
        try
        {
            strAsset = getRepository().assetReadXml(getAuthToken(), Long.parseLong(strAssetID));
        }
        catch(OpenAPIException e)
        {
            e.printStackTrace();
        }
        catch(RemoteException e)
        {
            e.printStackTrace();
        }
        return strAsset;
    }

}

インポート用のすべての *.jar ファイルは、私の AssetExtractor.jar 内にあります。

jarをoracleにロードするために使用したコマンドは次のとおりです。

loadjava -v -f -resolve -resolver "((* OER) (* PUBLIC))" -user oer/***** AssetExtractor.jar

どんなアイデアも役に立ちます!

4

1 に答える 1

3

したがって、次のことを行うと、ほぼすべての問題が解決するようです。

Oracle ユーザーの .profile を編集して、正しいパスで CLASSPATH、PATH、LD_LIBRARY_PATH、ORACLE_HOME、JAVA_HOME を SET および EXPORT します。

SQLPlus を sys として sysdba として

EXEC dbms_java.grant_permission( 'OER', 'SYS:java.util.PropertyPermission', 'java.class.path', 'write' );

oracle ユーザーとしての OS コマンドライン:

loadjava –v –grant PUBLIC <jar> -user oer/****** for all jars

OER ユーザーとしての SQLPlus

DECLARE
   v_classpath VARCHAR2(4000);
   v_path VARCHAR2(4000);
BEGIN
   v_classpath := DBMS_JAVA.set_property('java.class.path',    '/opt/oracle/102/jdk/lib:/mnt/hgfs/vmshare/rex_lib/aler-axis-   1.2.1.jar:/mnt/hgfs/vmshare/rex_lib/aler-axis-jaxrpc-1.2.1.jar:/mnt/hgfs/vmshare/rex_lib/client.rex-   11.1.1.5.0.jar:/mnt/hgfs/vmshare/rex_lib/commons-httpclient-3.0rc2-   flashline.jar:/mnt/hgfs/vmshare/rex_lib/log4j-1.2.8.jar');
   v_path := DBMS_JAVA.set_property('java.path', '/opt/oracle/102/jdk/bin');
END;
/

alter java source "AssetExtractor" compile;
show errors

唯一の未解決の問題は、何らかの理由で Oracle OER クラスの一部を特定/解決できないことです (これらはすべて client.rex*.jar にあるはずです。私はそれらを開いてそこで見ました。この部分を解決できればそれから私は行ってもいいです。

于 2012-06-12T14:19:35.043 に答える