Сегодня 1 июля, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Записки Oracle-ойда
Записки Oracle-ойда
Голосов: 1
Адрес блога: http://stan1slav.blogspot.com/
Добавлен: 2011-07-16 14:20:30 блограйдером stan1slav
Принадлежит блограйдеру stan1slav
 

Список необходимых патчей для Oracle SOA & BPM Suite 11g PS6 (11.1.1.7)

2014-09-29 13:25:00 (читать в оригинале)

Перечень патчей которые необходимо развернуть для Oracle SOA & BPM Suite 11g PS6 (11.1.1.7):
  • Patch 17294404: XSDCOMPLEXTYPE.GETCHILDELEMENTS() IS NOT THREAD SAFE
  • Patch 18325165: MERGE REQUEST ON TOP OF 11.1.1.7.0 FOR BUGS 16319620 16487002
  • Patch 18609527: SOA BUNDLE PATCH 11.1.1.7.4
  • Patch 18366461: NULLPOINTEREXCEPTION AT WEBSERVICEEXTERNALBINDINGCOMPONENT.GETINVOCATIONMETADATA
Скачать эти патчи можно c support.oracle.com.

P.S. список патчей будет дополняться (при необходимости).
P.P.S. рекомендации по патчам приветствуются :-)

ADF: Ошибка InvalidOwnerException JBO-25030 при одновременном создании master- и detail-записей

2014-05-13 21:00:00 (читать в оригинале)

Ошибка:
При создании Master- и Detail-записи последовательно через ADF Data Binding, например как в следующем коде:
  public String createMasterDetail() {

BindingContainer bindings = getBindings();
OperationBinding operationBinding =
bindings.getOperationBinding("CreateInsertMaster");
Object result = operationBinding.execute();

OperationBinding operationBinding1 =
bindings.getOperationBinding("CreateInsertDetail");
result = operationBinding1.execute();

return null;
}
Причина:
При создании новой строки через ADF Data Binding её статус будет STATUS_INITIALIZED. А когда Detail-запись пытается найти Master-запись в кеше (у которой статус STATUS_INITIALIZED), то будет брошено исключение InvalidOwnerException.

Вариант решения:
  1. Установить флаг Сascade Update Key Attributes в ассоциации между Master- и Detail-сущностями;
  2. Сгенерировать View Row Class (...ViewRowImpl) для Master-сущности и переопределить в нём следующий метод:
      @Override  
    public void setNewRowState(byte b) {
    if (b!=Row.STATUS_INITIALIZED || getNewRowState()!=Row.STATUS_NEW){
    super.setNewRowState(b);
    }
    }
Пример простейшего ADF-приложения здесь.

SoapUI: подстановка вычисляемых значений с помощью вставок на Groovy

2014-01-13 12:11:00 (читать в оригинале)

Целей функционального тестирования композитных приложений иногда используются заглушки и/или SoapUI,EM и прочие средства. Но как правило необходимо отправлять сообщения с отличающимися данными, например: документ на согласование с различными идентификатором и текущей датой отправки. Можно каждый раз перед отправкой менять значения вручную, но удобнее например для числовых идентификаторов использовать случайное число из определённого диапазона, а для даты подставлять например текущую дату. В SoapUI есть поддержка Groovy и подобное поведение делается очень легко (выделено красным):
Итак, в качестве значения поля для генерации:
  • числового значения в диапазоне от 0 до 10000 нужно подставить:
     ${=(int)(Math.random()*10000)}  
  • текущей даты нужно подставить:
     ${=new Date().format(‘yyyy-MM-dd’)}  


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

2014-01-06 21:02:00 (читать в оригинале)

Рассмотрим реализацию на примере создания простейшего приложения (без использования внешних библиотек) с одним заданием, которое выполняется каждые 5 секунд и пишет в лог время выполнения.
  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-архив) и проверяем работоспособность
    1. Задание выполняется после деплоя:
    2. С использованием сервлета остановим выполнение задания (?cmd=cancel):
    3. В логе появилась запись об остановке (отмене) задания:
    4. С использованием сервлета стартуем снова задание (?cmd=start):
    5. В логе появились записи о выполнении задания:
Полезная информация:
  • JavaDoc-и;
  • Timer and Work Manager API (CommonJ) Programmer's Guide for Oracle WebLogic Server;
  • архив приложения описанного в данной статье.


Oracle SOA: управление композитами через WLST

2013-11-08 21:00:00 (читать в оригинале)

Все команды выполняются из wlst.cmd или wlst.sh находящегося в SOA_HOME, у меня например это:
 C:\Apps\Oracle\Weblogic\10.3.6\Oracle_SOA1\common\bin\wlst.cmd  
  • Просмотр развёрнутых композитов и их статусов:
    wls:/offline> 
    sca_listDeployedComposites('bpm-dev.mycompany.com',
    '8001',
    'weblogic',
    'welcome1')
    где weblogic - логин административного пользователя;
    welcome1 - пароль административного пользователя;
    bpm-dev.mycompany.com - хост SOA-сервера;
    8001 - порт SOA-сервера.

    Пример результата:
     Following 4 composites are currently deployed to the platform:  
    1. AsyncProc[1.0], partition=default, mode=active, state=on, isDefault=true, deployedTime=2013-07-25T11:26:03.309+04:00
    2. SimpleApproval[1.0], partition=default, mode=active, state=on, isDefault=true, deployedTime=2012-10-17T18:55:11.333+04:00
    3. SimpleHT[1.0], partition=default, mode=active, state=on, isDefault=true, deployedTime=2012-12-21T13:23:24.345+04:00
    4. AgreementApproversService[1.0], partition=prod, mode=active, state=on, isDefault=true, deployedTime=2013-02-22T17:51:30.971+04:00
  • Старт композита:
    wls:/offline> 
    sca_startComposite('bpm-dev.mycompany.com',
    '8001',
    'weblogic',
    'welcome1',
    'AsyncProc',
    '1.0',
    partition='default')
    где AsyncProc - имя композита;
    1.0 - версия композита;
    default - раздел.

  • Стоп композита:
    wls:/offline> 
    sca_stopComposite('bpm-dev.mycompany.com',
    '8001',
    'weblogic',
    'welcome1',
    'AsyncProc',
    '1.0',
    partition='default')
  • Активация композита:
    wls:/offline> 
    sca_activateComposite('bpm-dev.mycompany.com',
    '8001',
    'weblogic',
    'welcome1',
    'AsyncProc',
    '1.0',
    partition='default')
  • Деактивация композита:
    wls:/offline> 
    sca_retireComposite('bpm-dev.mycompany.com',
    '8001',
    'weblogic',
    'welcome1',
    'AsyncProc',
    '1.0',
    partition='default')


Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»
Изменения рейтинга
Категория «Предметы»
Взлеты Топ 5
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.