We are trying to migrate from SAS 9.4 M7 to M8 version, we have client running on Windows citrix server (Windows Server 2019 Standard) and RHEL servers (RHEL 😎 for the metadata and application server.
The problem we are having is when we do import of the 'deployedflows' on the servers, it works fine when we import from windows server but when we run the batch tool from linux servers it throws the below error at the end. We get a similar error when we also run the export command, all objects containing flows failed.
Also we noticed that if we run these commands using root access then it runs fine but with the sas user it gives this error.
Could someone help me on this please.
Import Command :
/opt/sas/bin/SASPlatformObjectFramework/9.4/ImportPackage -host "{{ newsasmetadataserver }}" -port 8561 -user "{{ sasadminaccount }}" -password "{{ sasadminpassword }}" -package /opt/sas/SASETL/Packages/ExportAll/ DeployedFlow.spk -target / -includeACL -subprop /opt/sas/SASETL/Packages/ImportProperty.subprop -preservePaths -disableX11 -log /opt/sas/SASETL/Packages/ExportAll/ImportPackage_DeployedFlow.spk.log
Error :
******** Importing Metadata ********
Including access controls during import.
Metadata imported successfully.
******** Importing Properties ********
******** Adjusting Metadata ********
Updating Deployed flow objects.
******** Importing Content ********
Importing content for Deployed flow objects.
The import process has finished successfully.
For more information, view the import log file: /opt/sas/SASETL/Packages/ExportAll/ImportPackage_DeployedFlow.spk.log
java.lang.NoClassDefFoundError: com/platform/LSFJobFlow/api/JFException
at com.sas.scheduler.api.oma.MetaUtilities.getSchedulingServer(MetaUtilities.java:1941)
at com.sas.scheduler.api.oma.MetaUtilities.getSchedulingServer(MetaUtilities.java:1790)
at com.sas.scheduler.api.oma.MetaUtilities.getSchedulingServer(MetaUtilities.java:1764)
at com.sas.scheduler.api.oma.DeployedFlow.initializeFromJFJob(DeployedFlow.java:12270)
at com.sas.scheduler.api.oma.DeployedFlow.<init>(DeployedFlow.java:647)
at com.sas.metadata.logical.scheduler.flow.DeployedFlowImportListener.importContent(DeployedFlowImportListener.java:330)
at com.sas.metadata.promotion.ImportHandler.importContent(ImportHandler.java:1112)
at com.sas.metadata.promotion.ImportHandler.runImport(ImportHandler.java:731)
at com.sas.metadata.promotion.BatchImporter.importPackage(BatchImporter.java:666)
at com.sas.metadata.promotion.BatchImporter.main(BatchImporter.java:861)
Caused by: java.lang.ClassNotFoundException: com.platform.LSFJobFlow.api.JFException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at com.sas.app.AppClassLoader.findClass(AppClassLoader.java:497)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at com.sas.app.AppClassLoader.loadClass(AppClassLoader.java:632)
at com.sas.app.AppClassLoader.loadClass(AppClassLoader.java:611)
Export Command :
/opt/sas/bin/SASPlatformObjectFramework/9.4/ExportPackage -package /opt/sas/SASETL/Packages/ Global_System.spk -objects "Global System(Folder)" -disableX11 -host "{{ sasmetadataserver }}" -port 8561 -user "{{ sasadminaccount }}" -password "{{ sasadminpassword }}" -modified -since 20230601" -before "20231016" -log /opt/sas/SASETL/Global/Lev1/Log/ExportPackage_Global.log
Error:
******** Exporting Metadata ********
Metadata exported successfully.
******** Exporting Content ********
Exporting content for Deployed flow objects.
The export process has finished successfully.
For more information, view the export log file: /opt/sas/SASETL/Global/Lev1/Log/ExportPackage_test.log
java.lang.NoClassDefFoundError: com/platform/LSFJobFlow/api/JFException
at com.sas.scheduler.api.oma.MetaUtilities.getSchedulingServer(MetaUtilities.java:1941)
at com.sas.scheduler.api.oma.MetaUtilities.getSchedulingServer(MetaUtilities.java:1790)
at com.sas.scheduler.api.oma.MetaUtilities.getSchedulingServer(MetaUtilities.java:1764)
at com.sas.scheduler.api.oma.DeployedFlow.initializeFromJFJob(DeployedFlow.java:12270)
at com.sas.scheduler.api.oma.DeployedFlow.<init>(DeployedFlow.java:647)
at com.sas.metadata.logical.scheduler.flow.DeployedFlowExportListener.exportContent(DeployedFlowExportListener.java:91)
at com.sas.metadata.promotion.ExportHandler.exportContent(ExportHandler.java:596)
at com.sas.metadata.promotion.ExportHandler.runExport(ExportHandler.java:519)
at com.sas.metadata.promotion.BatchExporter.exportPackage(BatchExporter.java:684)
at com.sas.metadata.promotion.BatchExporter.main(BatchExporter.java:1181)
Caused by: java.lang.ClassNotFoundException: com.platform.LSFJobFlow.api.JFException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at com.sas.app.AppClassLoader.findClass(AppClassLoader.java:497)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at com.sas.app.AppClassLoader.loadClass(AppClassLoader.java:632)
at com.sas.app.AppClassLoader.loadClass(AppClassLoader.java:611)
Hi @gwootton
We found the problem, thank you for leading us to the right location to check.
The permissions of the jobflow.jar was not proper that's the reason it was running with root user but not the user we were using.
Thank you very much!
Hi, Yes its included
[properties]
MASTERPROP=/opt/sas/bin/sassw.config
[default]
startdir=<WORKINGDIR>
applogloc=
launchercmd=<JREHOME>
mode=console
JavaArgs_1=-Xmx512M
JavaArgs_2=-Dsas.app.class.dirs=<LAUNCHERDIR>
JavaArgs_3=-Dsas.app.class.path=<LAUNCHERDIR>:.:/opt/sas/bin/SASPlatformObjectFramework/9.4/build
JavaArgs_4=-Dsas.services.information.types.path=<LAUNCHERDIR>/plugins
JavaArgs_5=-Dsas.app.launch.picklist=<LAUNCHERDIR>/platform.picklist
JavaArgs_6=-Djava.system.class.loader=com.sas.app.AppClassLoader
JavaArgs_7=-Dsas.ext.config=<SASHOME>/sas.java.ext.config
JavaArgs_8=-Dsas.app.launch.config=picklist
JavaArgs_9=-Dsas.app.repository.path=<VJRHOME>/eclipse
JavaArgs_10=-Dsas.promotion.deployedjob.includesourcecode=false
JavaArgs_11=-Dsas.promotion.columns.deletetargetcolumns=true
JavaArgs_12=
Classpath=-cp <VJRHOME>/eclipse/plugins/sas.launcher.jar
MainClass=com.sas.metadata.promotion.BatchExporter
yes the version matches.
Version from platform.pickup -
name=PlatformComputing_PM
version=12.2.0.c_SAS_20220609144930
This version also exists in /opt/sas/bin/SASVersionedJarRepository/eclipse/plugins/
/opt/sas/bin/SASVersionedJarRepository/eclipse/plugins/PlatformComputing_PM_12.2.0.c_SAS_20220609144930/META-INF> cat MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Export-Package: cryptix.tools,cryptix.util.io,cryptix.provider.mac,cry
ptix.provider.padding,cryptix.util.gui,com.platform.LSFJobFlow.ui,org
.xmlpull.mxp1,cryptix.util.test,org.xmlpull.mxp1_serializer,xjava.lan
g,com.platform.LSFJobFlow.ui.model,javax.xml.namespace,org.xmlpull.v1
.wrapper.classic,org.xmlpull.v1.sax2,org.xmlpull.v1.builder.adapter,o
rg.xmlpull.v1.util,cryptix.test,com.platform.SASLogin,com.platform.LS
FJobFlow.api,org.xmlpull.v1.dom2_builder,cryptix.provider.cipher,com.
platform.LSF.security,netscape.security,cryptix.util.math,org.xmlpull
.v1,org.xmlpull.v1.builder,xjava.security,cryptix.provider.rsa,crypti
x.provider.key,cryptix,xjava.security.interfaces,cryptix.provider.mod
e,cryptix.util.core,cryptix.provider.elgamal,cryptix.util.checksum,cr
yptix.provider.md,cryptix.provider,org.xmlpull.v1.wrapper,org.xmlpull
.v1.parser_pool,com.platform.LSFJobFlow.ui.resources,org.xmlpull.v1.b
uilder.impl,cryptix.util.mime
Eclipse-LazyStart: true
Bundle-ClassPath: jobflow.jar,jobflowui.jar,lsfsecurity.jar,saslogin.j
ar,xpp3-1.1.4c.jar
Bundle-Version: 12.2.0.c_SAS_20220609144930
Eclipse-BuddyPolicy: registered
Bundle-Name: PlatformComputing_PM
Bundle-ManifestVersion: 2
Bundle-SymbolicName: PlatformComputing_PM
Specification-Version: 12.2.0.c_SAS_20220609144930
Hi @gwootton
We found the problem, thank you for leading us to the right location to check.
The permissions of the jobflow.jar was not proper that's the reason it was running with root user but not the user we were using.
Thank you very much!
The error says ClassNotFoundException:.
Please make sure the java is accessible\le to the SAS user running this job. JAVA_HOME must be included in his path.
This can be easily checked by running env in the bash shell.
I'm having this issue only when I try to import/export the objects with type "DeployedFlow". Other import/exports works fine with the SAS user so I guess that concludes that the Java is accessible otherwise all import/exports would have failed.
The SAS Users Group for Administrators (SUGA) is open to all SAS administrators and architects who install, update, manage or maintain a SAS deployment.
SAS technical trainer Erin Winters shows you how to explore assets, create new data discovery agents, schedule data discovery agents, and much more.
Find more tutorials on the SAS Users YouTube channel.