Показаны сообщения с ярлыком jdeveloper. Показать все сообщения
Показаны сообщения с ярлыком jdeveloper. Показать все сообщения

среда, 16 марта 2016 г.

Ошибка при создании домена по умолчанию в JDeveloper 12.2.1 на платформе Windows 10

Ошибка:
 wlst >   
 wlst > Initializing WebLogic Scripting Tool (WLST) ...  
 wlst >   
 wlst > Welcome to WebLogic Server Administration Scripting Shell  
 wlst >   
 wlst > Type help() for help on available commands  
 wlst >   
 wlst > Failed to get environment, environ will be empty: (0, u'Failed to execute command ([\'sh\', \'-c\', \'env\']): java.io.IOException: Cannot run program "sh": CreateProcess error=2, \u041D\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044F \u043D\u0430\u0439\u0442\u0438 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0439 \u0444\u0430\u0439\u043B')  
 wlst > Error: ADRS_DOMAIN_PASSWORD environment variable not set.  
 wlst >   
 wlst >   
 wlst > Exiting WebLogic Scripting Tool.  
 wlst >   

Варианты решения:
1. Изменить архиве
%JDEVELOPER_HOME%/wlserver/common/wlst/modules/jython-modules.jar следующий файл \Lib\javashell.py (добавленное выделено красным):
   ...
   os = str(os or sys.registry.getProperty( "python.os" ) or \  
         System.getProperty( "os.name" ))  
   _osTypeMap = (  
     ( "nt", ( 'nt', 'Windows NT', 'Windows NT 4.0', 'WindowsNT',  
          'Windows 2000', 'Windows 2003', 'Windows XP', 'Windows CE',  
          'Windows Vista', 'Windows Server 2008', 'Windows 7', 'Windows 8',   
          'Windows 10', 'Windows Server 2012' )),  
     ( "dos", ( 'dos', 'Windows 95', 'Windows 98', 'Windows ME' )),  
     ( "mac", ( 'mac', 'MacOS', 'Darwin' )),  
     ( "None", ( 'None', )),  
     )
   ...  

2. Открыть сервисный запрос (SR) в поддержку и получить официальный патч.

понедельник, 6 января 2014 г.

Планировщик заданий в Weblogic Server

Реализовать планировщик заданий можно, как средствами встроенных в операционную систему(ОС) планировщиков заданий так и встроенных СУБД, но при изменении ОС (например, с Windows на AIX) либо изменении СУБД (например, с Oracle на MySQL) потребуется переработка компонента планировщика. Рассмотрим реализацию планировщика заданий работающего внутри Weblogic Server, который не зависит от ОС и СУБД.
Данный планировщик представляет собой простейшее Web-приложение и будет выполнять задачу через каждые 5 секунд, а задача при выполнении будет писать в лог строку с временем выполнения (никто не запрещает сделать более сложную логику). А так же будет создан сервлет для управления заданием (действия - остановить выполнение и запустить выполнение). Более того при создании не будут использоваться внешние библиотеки, только те которые есть в Weblogic Server.
  1. Открываем Oracle JDeveloper и создаём новое приложение (с именем SampleScheduler):
  2. Затем добавляем в проект необходимые библиотеки.
  3. Создаём новый класс для описания задания(с именем HelloWorldJob):
     package com.blogspot.stan1slav.sample.jobs;  
       
     import commonj.timers.CancelTimerListener;  
     import commonj.timers.Timer;  
     import commonj.timers.TimerListener;  
       
     import java.io.Serializable;  
       
     import java.util.Date;  
       
     public class HelloWorldJob implements Serializable, TimerListener,  
                        CancelTimerListener {  
       private Date timerDate = null;  
       
       public HelloWorldJob() {  
         super();  
       }  
       
       public void timerExpired(Timer timer) {  
         timerDate = new Date(timer.getScheduledExecutionTime());  
         System.out.println("HelloWorldJob timer expired called on " +  
                   timerDate);  
       }  
       
       public void timerCancel(Timer timer) {  
         timerDate = new Date(timer.getScheduledExecutionTime());  
         System.out.println("HelloWorldJob timer cancelled called on " +  
                   timerDate);  
       }  
     }  
    
    Следует обратить внимание на выделенное красным, это те классы которые должны быть имплементированы и методы которые должны быть реализованы (один при срабатывании задачи и другой для отмены/остановки задачи). Инициализацию задания можно вынести в конструктор.
  4. Создаём сервлет для старта/остановки задания, а так же автозапуска:
     package com.blogspot.stan1slav.sample;  
       
     import com.blogspot.stan1slav.sample.jobs.HelloWorldJob;  
       
     import commonj.timers.Timer;  
     import commonj.timers.TimerManager;  
       
     import java.io.IOException;  
     import java.io.PrintWriter;  
       
     import java.util.Date;  
       
     import javax.naming.InitialContext;  
       
     import javax.servlet.ServletConfig;  
     import javax.servlet.ServletException;  
     import javax.servlet.http.HttpServlet;  
     import javax.servlet.http.HttpServletRequest;  
     import javax.servlet.http.HttpServletResponse;  
       
     public class JobsServlet extends HttpServlet {  
       private Timer helloWorldJobTimer = null;  
       private TimerManager tm = null;  
       
       public void init(ServletConfig config) throws ServletException {  
         super.init(config);  
         System.out.println("InitJobsServlet is initialized ");  
       
         try {  
           InitialContext ic = new InitialContext();  
           tm = (TimerManager)ic.lookup("java:comp/env/tm/TimerManager");  
           helloWorldJobTimer =  
               tm.schedule(new HelloWorldJob(), new Date(), 5000); //5 seconds  
         } catch (Exception ne) {  
           ne.printStackTrace();  
         }  
       }  
       
       public void service(HttpServletRequest req,  
                 HttpServletResponse res) throws IOException {  
         res.setContentType("text/html");  
         PrintWriter out = res.getWriter();  
         out.println("<h4>JobsServlet is working!</h4>");  
         String cmd = req.getParameter("cmd");  
         if (cmd != null && cmd.equals("cancel") && helloWorldJobTimer != null) {  
           helloWorldJobTimer.cancel();  
           helloWorldJobTimer = null;  
         }  
         if (cmd != null && cmd.equals("start") && helloWorldJobTimer == null) {  
           helloWorldJobTimer =  
               tm.schedule(new HelloWorldJob(), new Date(), 5000);  
         }  
         if (helloWorldJobTimer != null) {  
           out.println("<h6>HelloWorldJob started</h6>");  
         } else {  
           out.println("<h6>HelloWorldJob calceled</h6>");  
         }  
       }  
     }  
    
  5. В web.xml прописать ссылку на ресурс (т.е. на наш TimerManager):
     <?xml version = '1.0' encoding = 'UTF-8'?>  
     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
          version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">  
      <servlet>  
       <servlet-name>JobsServlet</servlet-name>  
       <servlet-class>com.blogspot.stan1slav.sample.JobsServlet</servlet-class>  
       <load-on-startup>100</load-on-startup>  
      </servlet>  
      <servlet-mapping>  
       <servlet-name>JobsServlet</servlet-name>  
       <url-pattern>/jobsservlet</url-pattern>  
      </servlet-mapping>  
      <resource-ref>  
       <res-ref-name>tm/TimerManager</res-ref-name>  
       <res-type>commonj.timers.TimerManager</res-type>  
       <res-auth>Container</res-auth>  
       <res-sharing-scope>Unshareable</res-sharing-scope>  
      </resource-ref>
     </web-app>  
    
  6. Деплоим на сервер (как WAR-архив) и проверяем работоспособность (смотрим в out-лог сервера)
    1. Задание выполняется после деплоя:
    2. С использованием сервлета остановим выполнение задания (для этого при вызове добавляем ?cmd=cancel):
    3. В логе появилась запись об остановке (отмене) задания:
    4. С использованием сервлета стартуем снова задание (для этого при вызове добавляем ?cmd=start):
    5. В логе появились записи о выполнении задания:
Полезная информация:

пятница, 27 апреля 2012 г.

Автоматизация бэкапа проекта в JDeveloper

Пояснение: иногда требуется забэкапить текущий проект (это более актуально при SOA и BPM приложениям), но коммитить в систему контроля версии ещё нельзя (например, если сервер непрерывной интеграции слушает систему контроля версии и по изменениям запускается сборка, развертывание и тесты).
  • Настройка:
    1. Запустить JDeveloper;
    2. В меню "Tools" выбрать "External Tools...":
    3. Выбрать тип "External Program":
    4. Далее заполнить поля аналогично:
      В данном случае бэкапы будут складываться в директорию C:\JDeveloper\backups, если требуется то изменить на другую.
    5. Переименовать метку на кнопке:
    6. Поставить галку "Main Toolbar":
  • Проверка:
    1. Нажать на созданную кнопку "Backup Project" - появится окно с запросом ввода метки для данного бэкапа:
    2. В JDeveloper можно увидеть лог выполнения бэкапа:
    3. В директории указанной для бэкапа появится zip-архив проекта с меткой в имени файла:

вторник, 19 апреля 2011 г.

Проблема в Oracle JDeveloper 11.1.1.4 при автогенерации HumanTask...

Описание: создадим простой BPM-проект с двумя HumanTask-ами и одной ролью (с несколькими ролями ситуация подобна этой).

1. Запустим JDeveloper.
2. Создадим новый BPM Application.

     Введите наименование проекта. Далее "Next":

     Далее "Finish":


     Далее предлагается создать BPM-процесс:


     Далее "Next":

3. Сгенерировался BPM-процесс.


4. Добавим ещё один UserTask.


5. Создадим определение UserTask-ов.

     UserTask1:

     UserTask2:

6. Сгенерируем формы пользовательского интерфейса с помощью автогенератора.

     UserTask1:


     UserTask2: аналогично UserTask1.

7. Получилось три проекта в нашем TestApplication: собственно BPM-проект и два Taskflow-проекта(HumanTask-проекта).

8. Задеплоим TestApplication на сервер BPM Suite.


     Далее "Next":

     Выбираем все TaskFlow-проекты. Далее "Next":

     Далее "Finish"

9. Заходим в BPM Workspace
9.1. Инициируем процесс.

Отправляем дальше:

Получаем первую ошибку:

9.2. Переходим на вторую задачу и получаем ошибку:

В чём причина этих ошибок???
Первая ошибка: автоматически не создалась страница Empty1.jspx
Вторая ошибка: при автогенерации форм для HumanTask-ов они создаются в одном и том же пакете и при деплое приложения возникает конфликт, который проявляется как "Error 500--Internal Server Error"

10. Исправление ошибок.
10.1. Первая ошибка:
10.1.1. Перейти в первый TaskFlow-проект в "Web Content"->"Page Flows"->"adfc-config".


10.1.2. Создайте Empty1.jspx дважды кликнув на эту страницу.


10.1.3. Аналогично с вторым TaskFlow-проектом.

10.2. Вторая ошибка:

10.2.1. Перейти в первый TaskFlow-проект в "Application Sources".


10.2.2. Провести рефакторинг пакета.


     Далее:

10.2.3. Открыть DataBindings.cpx и перейти на закладку "Source"


10.2.4. Изменить данный файл (см. выделение красным)


10.2.5. Удалить сгенерированные классы с прошлой сборки (удалить все внутри папки classes).

10.2.6. Аналогично с вторым TaskFlow-проектом.

11. Передеплоить TestApplication на сервер BPM Suite.