Java在Oracle中运行-导入的JAR
我正在尝试将一个小java类加载到Oracle11g中,以便运行它并从PL/SQL调用它。我在本地机器上用eclipse编写并编译了这个类,它编译得很好。我将它打包到一个jar中(它依赖于jar中的其他jar文件)。他们说我试着把我的罐子装进Oracle11g。不幸的是,当它加载我的自定义java类时,它仍然无效,当我试图在Oracle中编译它时,它说它找不到这些类的引用(这些类是我在jar中随类打包的) 是否需要配置其他类型的设置 以下是我的自定义类代码:Java在Oracle中运行-导入的JAR,java,oracle11g,Java,Oracle11g,我正在尝试将一个小java类加载到Oracle11g中,以便运行它并从PL/SQL调用它。我在本地机器上用eclipse编写并编译了这个类,它编译得很好。我将它打包到一个jar中(它依赖于jar中的其他jar文件)。他们说我试着把我的罐子装进Oracle11g。不幸的是,当它加载我的自定义java类时,它仍然无效,当我试图在Oracle中编译它时,它说它找不到这些类的引用(这些类是我在jar中随类打包的) 是否需要配置其他类型的设置 以下是我的自定义类代码: import com.flashli
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
任何想法都会有帮助 因此,如果我执行以下操作,几乎可以解决我所有的问题: 编辑Oracle用户配置文件,以设置并导出类路径、路径、LD_库路径、Oracle_HOME、JAVA_HOME以及正确的路径 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
唯一悬而未决的问题是,出于某种原因,它仍然无法定位/解析某些Oracle OER类(应该都在client.rex*.jar中,我打开并在那里看到了它们。如果我能解决这一部分,我就可以开始了。我已经尝试在我的操作系统中设置类路径,我的DB所在的位置,我也在一本手册中看到在extproc.ora文件中设置类路径,所以我也尝试了。到目前为止,它们都没有起作用。
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