Создание буферного файла из Java с указанным именем задания в iSeries

Есть ли способ указать имя JOB при создании буферного файла? Так что мой созданный с.ф. не имеет значения по умолчанию "QPRTJOB".

Мой метод, который создает буферный файл с заданием QPRTJOB по умолчанию:


   public static SpooledFile createSpoolFile( com.ibm.as400.access.AS400 as, PrinterFile pPrinterFile,
         OutputQueue outq, String msg ) {
      SpooledFile result = null;
      try {
         PrintParameterList parms = new PrintParameterList();

         // create a PrintParameterList with the values that we want
         // to override from the default printer file...we will override
         // the output queue and the copies value.
         parms.setParameter( PrintObject.ATTR_PRINTER_FILE, pPrinterFile.getPath() );
         parms.setParameter( PrintObject.ATTR_JOBUSER, AS400.getUser().getUserProfileName() );
         parms.setParameter( PrintObject.ATTR_JOBNAME, "NASAOBRJVA" );
         parms.setParameter( PrintObject.ATTR_OUTPUT_QUEUE, outq.getPath() );
         parms.setParameter( PrintObject.ATTR_CHAR_ID, "*SYSVAL" );

         SpooledFileOutputStream spool = new SpooledFileOutputStream( as, parms, pPrinterFile,
               outq );


         SCS5256Writer scsWtr = new SCS5256Writer( spool, pPrinterFile.getSystem().getCcsid(), pPrinterFile.getSystem() );

         String[] redovi = msg.split( "\n" );
         for ( int i = 0; i < redovi.length; i++ ) {
            if (redovi[i].equals( "" ) || redovi[i].equals( " " )) {
               continue;
            }
            scsWtr.write( redovi[i].trim() );
            if (i < redovi.length - 1) {
               scsWtr.newLine();
            }
         }

         scsWtr.close();
         result = spool.getSpooledFile();
         System.out.println("Spool is in Job: " + result.getJobNumber() + "/" + result.getJobUser() + "/" + result.getJobName());
      }
      catch ( Exception e ) {
         LOG.error( e );
      }
      return result;
   }  

person davorp    schedule 12.08.2009    source источник
comment
Обратите внимание, что в ЛЮБОЙ момент, когда вы используете объект AS400, вы, по сути, общаетесь с предварительно запущенными заданиями, к которым не применяются атрибуты вашего собственного задания. Единственное исключение - локальное использование собственного кода, И вы должны делать это в потоке. Мы обнаружили, что это хрупко.   -  person Thorbjørn Ravn Andersen    schedule 22.07.2011


Ответы (2)


ATTR_JOBUSER и ATTR_JOBNAME являются атрибутами буферного файла только для чтения. Я заметил, что всякий раз, когда мои Java-программы взаимодействуют с AS/400 — даже те, которые изначально выполняются в AS/400, — они обращаются к заданиям хост-сервера, а не обязательно к заданию, отправившему вызов Java. В этом случае вы общаетесь с заданием сервера печати на 400, и все ваши буферные файлы получат имя задания QPRTJOB.

Сложный обходной путь может состоять в том, чтобы ваша Java-программа отправила новое задание с именем NASAOBRJVA с командой для вызова какой-нибудь простой RPG-программы с текстом сообщения в качестве параметра. Это, вероятно, большие усилия для имени задания в буферном файле, но вы достаточно знаете свой проект, чтобы понять, стоит ли оно таких усилий.

person Tracy Probst    schedule 12.08.2009
comment
Вы предполагаете, что программа RPG создает файл спула? - person davorp; 13.08.2009
comment
Создание буферных файлов — то, для чего изначально была разработана RPG. :) Вы должны отправить программу RPG на новое задание с указанным именем задания. Это неэстетичное решение, но оно даст вам буферный файл с нужным вам именем задания. - person Tracy Probst; 13.08.2009
comment
Попрошу коллегу написать простенькую RPG и попробовать с Command Call из Java. - person davorp; 13.08.2009
comment
Убедитесь, что вызов команды является командой SBMJOB с указанием нужного имени задания. - person Tracy Probst; 13.08.2009
comment
Я отказался от попыток иметь такое же имя задания таким образом... я узнаю другой способ: SBMJOB CMD( RUNJVA CLASS('/myJar.jar') PROP((java.version '1.6')) JOB(NASAJAVA) OUTPUT( *PRINT)) JOB(NASAJAVA) JOBQ(QBATCH) Отправляет два задания с одинаковым именем задания в подсистему QBATCH. Созданный буферный файл из Java попадает в согласованную OUTPUT QUEUE, поэтому мы смотрим его там. - person davorp; 17.08.2009

Задание, пользователь и номер задания назначаются системой и не могут быть изменены. Во всяком случае, насколько мне известно.

person Mike Wills    schedule 13.08.2009
comment
размещенный мной код должен работать в iSeries, поэтому я планирую запустить программу Java следующим образом: RUNJVA CLASS('/home/username/myJar.jar') PROP((java.version '1.6')) JOB(MYJOBNAME) OUTPUT(*PRINT) Итак, я хотел бы, чтобы мой файл спула получил имя задания JOB, которое запустило программу. В данном случае ИМЯ_РАБОТЫ - person davorp; 13.08.2009