четверг, 26 августа 2010 г.

Подключение публичного Yum-репозитория для Oracle Enterprise Linux

Всё команды выполняются пользователем root:
  1. Перейти в следующую директорию:
     $ cd /etc/yum.repos.d  
    
  2. Скачать описание репозитариев:
    • Для Oracle Enterprise Linux 4 Update 6 и выше:
       $ mv Oracle-Base.repo Oracle-Base.repo.disabled  
       $ wget http://public-yum.oracle.com/public-yum-el4.repo  
      
    • Для Oracle Enterprise Linux 5:
       $ wget http://public-yum.oracle.com/public-yum-el5.repo  
      
    • Для Oracle Enterprise Linux 6:
       $ wget http://public-yum.oracle.com/public-yum-ol6.repo 
      
    • Для Oracle Enterprise Linux 7:
       $ wget http://public-yum.oracle.com/public-yum-ol7.repo 
      
  3. Изменить в файле описания репозитариев (public-yum-el*.repo) enabled=0 на enabled=1 для необходимых секций.
  4. Перезапустить сервис Yum (для Oracle Enterprise Linux 6 не требуется):
     $ /etc/init.d/yum-updatesd restart  
    

пятница, 20 августа 2010 г.

Минимальный список сервисов RHEL/OEL для Oracle e-Business Suite R12

Список сервисов RHEL/OEL, которые необходимы для функционирования Oracle e-Business Suite R12 (и входящих в него продуктов Database, Forms, AppServer...):
  • acpid
  • anacron
  • atd
  • crond
  • gpm
  • haldaemon
  • irqbalance
  • kudzu
  • Im_sensors
  • mdmonitor
  • network
  • rawdevices
  • sshd
  • syslog
  • sysstat
  • xinetd

пятница, 2 июля 2010 г.

Соотношение Port pool и основных портов в Oracle e-Business Suite

Port pool Database port Web Listener Forms port
0 1521 8000 9000
1 1522 8001 9001
2 1523 8002 9002
3 1524 8003 9003
4 1525 8004 9004
5 1526 8005 9005
6 1527 8006 9006
7 1528 8007 9007
8 1529 8008 9008
9 1530 8009 9009
10 1531 8010 9010
11 1532 8011 9011
12 1533 8012 9012
13 1534 8013 9013
14 1535 8014 9014
15 1536 8015 9015
16 1537 8016 9016
17 1538 8017 9017
18 1539 8018 9018
19 1540 8019 9019
20 1541 8020 9020
21 1542 8021 9021
22 1543 8022 9022
23 1544 8023 9023
24 1545 8024 9024
25 1546 8025 9025
26 1547 8026 9026
27 1548 8027 9027
28 1549 8028 9028
29 1550 8029 9029
30 1551 8030 9030
31 1552 8031 9031
32 1553 8032 9032
33 1554 8033 9033
34 1555 8034 9034
35 1556 8035 9035
36 1557 8036 9036
37 1558 8037 9037
38 1559 8038 9038
39 1560 8039 9039
40 1561 8040 9040
41 1562 8041 9041
42 1563 8042 9042
43 1564 8043 9043
44 1565 8044 9044
45 1566 8045 9045
46 1567 8046 9046
47 1568 8047 9047
48 1569 8048 9048
49 1570 8049 9049
50 1571 8050 9050
51 1572 8051 9051
52 1573 8052 9052
53 1574 8053 9053
54 1575 8054 9054
55 1576 8055 9055
56 1577 8056 9056
57 1578 8057 9057
58 1579 8058 9058
59 1580 8059 9059
60 1581 8060 9060
61 1582 8061 9061
62 1583 8062 9062
63 1584 8063 9063
64 1585 8064 9064
65 1586 8065 9065
66 1587 8066 9066
67 1588 8067 9067
68 1589 8068 9068
69 1590 8069 9069
70 1591 8070 9070
71 1592 8071 9071
72 1593 8072 9072
73 1594 8073 9073
74 1595 8074 9074
75 1596 8075 9075
76 1597 8076 9076
77 1598 8077 9077
78 1599 8078 9078
79 1600 8079 9079
80 1601 8080 9080
81 1602 8081 9081
82 1603 8082 9082
83 1604 8083 9083
84 1605 8084 9084
85 1606 8085 9085
86 1607 8086 9086
87 1608 8087 9087
88 1609 8088 9088
89 1610 8089 9089
90 1611 8090 9090
91 1612 8091 9091
92 1613 8092 9092
93 1614 8093 9093
94 1615 8094 9094
95 1616 8095 9095
96 1617 8096 9096
97 1618 8097 9097
98 1619 8098 9098
99 1620 8099 9099
100 1621 8100 9100

понедельник, 17 мая 2010 г.

Заметки по Oracle VM

Запуск виртуальной машины:
 $ $ xm create имя_файла_конфига
Например:
 $ xm create /OVS/running_pool/nb/nb.cfg  

Остановка виртуальной машины:
 $ xm shutdown имя_машины
Например:
 $ xm shutdown nb

Запущенные виртуальные машины:
 $ xm list 

Запущенные виртуальные машины (с метриками):
 $ xm top

Для создания новой виртуальной машины выполнить команду и ввести все запрашиваемые конфигурационные данные:
 $ virt-install

Для развертывания виртуальной машины из gz в LVM:
 $  gunzip -d < путь_к_файлу_gz | dd bs=1048576 of=LVM_volume
Например:
 $ gunzip -d < /software/oracle_vm/win2k3_ready_for_apps/ng.20090526.gz | dd bs=1048576 of=/dev/vg0/lv2

Для загрузки виртуальной машины с ISO необходимо изменить конфигурационный файл виртуальной машины:
1. Значение переменной disk:
 disk = [ 'phy:/dev/vg0/lv2,hda,w','file:/путь_к_iso,hdc:cdrom,r']
например:
 disk = [ 'phy:/dev/vg0/lv2,hda,w','file:/software/Acronis/Acronis.iso,hdc:cdrom,r']
2. Добавить параметр boot:
 boot='d' #(если cdrom в параметре disk идёт за hda)
3. Запустить виртуальную машину и подключиться к ней по VNC.

Для уменьшения диска на гостевой Windows-машине расположенной в LVM:
1. Уменьшить раздел так чтобы на диске(внутри гостевой машины) в конце осталась неразмеченная область(не должно быть вообще разделов) - на её размер можно и уменьшать.
2. Выключить виртуальную машину.
3. Зайти в lvm и выполнить изменение раздела:
 $ lvm
 $ lvresize -L итоговый_размер_раздела раздел
Например:
 $ lvresize -L 20G /dev/vg0/lv4
4. Запустить виртуальную машину.

Для увеличения диска на гостевой Windows-машине расположенной в LVM:
1. Выключить виртуальную машину.
2. Зайти в lvm и выполнить изменение раздела:
 $ lvm 
 $ lvresize -L итоговый_размер_раздела раздел
Например:
 $ lvresize -L 90G /dev/vg0/lv4
3. Запустить виртуальную машину.
4. С помощью утилит (например: Paragon Partion Manager или GParted) увеличить существующий раздел за счёт неразмеченного в конце диска.

четверг, 15 апреля 2010 г.

Динамические события в Application Express 4.0 (на пошаговом примере приложения)

Динамические события - одна из новинок Oracle Application Express 4.0. Декларативный интерфейс для JavaScript-событий (например: скрыть и показать элемент, активировать и деактивировать его, выполнить JavaScript-функцию при наступлении определённого события).

  1. Создадим страницу с тремя элементами: textfield, date picker и textarea:
  2. Создадим динамическое событие. Для этого:
  3. Выбираем тип динамического события - Standard:
  4. Назначаем событию имя:
  5. Определяем условие при котором будет выполняться событие:
    где событие (Event) элемента (Selection Type->Item, Region,jQuery Selector, DOM Object) при котором будет выполнено условие (Condition);
  6. Определяем тип события (например: Enable / Disable):
  7. Определяем к какому элементу(региону...) применяем данный тип события и создаем событие:
  8. Запускаем страницу:
  9. Вводим "No" в поле X1 и переходин на другое поле:
    Динамическое событие отработало и поле X2 стало активным.
  10. Аналогично создаем ещё одно динамическое событие, только выбираем тип Advanced (см. шаг 3), имя (например: Action2) и условие при котором будет выполняться событие:
  11. Выбираем тип события (в advanced их несколько больше) - в нашем случае выбираем JavaScript Code:
  12. Вводим имя функции (мы для теста будем использовать стандартную alert()):

  13. Завершаем создание динамического события и запускаем страницу.
  14. Вводим в поле X3 значение "testing..." и переходин на другое поле:
    Динамическое событие отработало и видим сообщение(результат функции alert)

Возможности командной разработки в Application Express 4.0

Разработчик отслеживает features, to do's, milestones и bugs. Конечный пользователь оставляет feedbacks, которые могут быть собираться и конвертироваться в features, to do's и bugs.

Основные компоненты:

  • News (Новости)
  • Features
  • Milestones (Контрольные точки)
  • To do's (Задачи)
  • Feedback (Отзывы)
  • Bugs (Баги)

News (Новости)



News предоставляет место для общедоступной информации в Workspace. Новости отображаются на домашней странице Workspace. Разработчик может как просмотривать, так и проводить поиск по новостям.

Features


Features отслеживают имплементацию функциональности приложения. Features могут быть организованны по релизам, назначенны на разработчика, теггированны (tagged) и ассоциированны с контрольными точками. Все изменения в features логгируются, так что можно посмотреть «Что изменено?», «Кто изменил?», «Когда изменил?», старое и новое значение(-я).
  • Отслеживание features по релизам
  • Назначениие features на разработчиков
  • Ассоциация статуса с контрольными точками
  • Ассоциация features с задачами (to do’s)

Milestones (Контрольные точки)

Milestones (контрольные точки) используются для определения сроков(дат) в каждой фазе проекта. Контрольные точки являются опциональными, но однако являются крайне полезными средствам для отслеживания прогресса разработки. To do’s, bugs и features могут быть ассоциированны с milestones.
  • Огранизация контрольных точек каждой фазы проекта и проекта в целом
  • Ассоциация и отслеживание контрольных точек совмесно с bugs, features и to do’s

To do's (Задачи)

Задачи – это элементы, которые могут быть назначенны, приоритизированны (prioritized), тэггированны(tagged) и отслеживаемы.
  • Назначение и отслеживание задач по разработчикам
  • Ассоциация задач по страницам приложения
  • Управление задачами требуется для завершения feature

Feedback (Отзывы)


  • Интегрирован в APEX приложения
  • Автоматически сохраняет session state пользователя написавшего feedback
  • Трансформация в Features, To-Dos или Bugs
 

Bugs (Баги)



Встроенный в APEX багтрекер.
  • Отслеживание багов по разработчикам, релизам, контрольным точкам и страницам приложения
  • Создание багов на основе feedback предоставляемых конечными пользователями
  • Управление и отчетность по багам

воскресенье, 11 апреля 2010 г.

Создание плагина в Oracle Application Express 4.0

Подробный, пошаговый пример создания простого плагина в Apex 4.0.

  1. Создать новое Database-приложение:
  2. Выбрать тип создаваемого приложения From Scratch:
  3. Вводим имя приложения (например: SimpleGoogleMapPlugin):
  4. Добавляем страницу в приложение:
  5. Создаём приложение:
  6. Перейти в Shared Components\User Interface\Plug-ins и нажать Create:
  7. Ввести имя плагина (например: Simple Google Map), внутреннее имя (например: com.yourcompany.apex.simple_google_map) и тип плагина (в нашем случае - Region). После этого нажать Create:
  8. Создать аттрибут:
  9. Ввести следующие значения:
    Scope: Application
    Attribute: 1
    Label: API Key
    Type: Text
    Required: Yes
    Translatable: No
    Display Length: 90
    Max Length: 120
    Default Value: Get key at http://code.google.com/apis/maps

  10. Нажать Create and Create Another.
  11. Аналогичным образом создать ещё 4 аттрибута:
    • Scope: Component
      Attribute: 1
      Label: Width
      Type: Integer
      Required: Yes
      Display Width: 4
      Maximum Width: 4
      Default Value: 600
    • Scope: Component
      Attribute: 2
      Label: Height
      Type: Integer
      Required: Yes
      Display Length: 4
      Max Length: 4
      Default Value: 400
    • Scope: Component
      Attribute: 3
      Prompt: Page Item containing Location
      Type: Page Item
      Required: Yes
      Default Value: P1_LOCATION
    • Scope: Component
      Attribute: 4
      Prompt: Page Item containing Tooltip
      Type: Page Item
      Required: No
  12. Перейти на вкладку Source и ввести в поле PL/SQL Code следующее:
     procedure render_simple_google_map (  
       p_region     in apex_plugin.t_region,  
       p_plugin     in apex_plugin.t_plugin,  
       p_is_printer_friendly in boolean )  
     is  
       -- It's better to have named variables instead of using the generic ones,  
       -- makes the code more readable  
       l_api_key  apex_appl_plugins.attribute_01%type  := p_plugin.attribute_01;  
       l_width  apex_application_page_regions.attribute_01%type := p_region.attribute_01;  
       l_height  apex_application_page_regions.attribute_02%type := p_region.attribute_02;  
       l_location apex_application_page_regions.attribute_03%type := v(p_region.attribute_03);  
       l_tooltip  apex_application_page_regions.attribute_04%type := v(p_region.attribute_04);  
     begin  
       -- During plug-in development it's very helpful to have some debug information  
       if wwv_flow.g_debug then  
        apex_plugin.debug_region (  
          p_plugin     => p_plugin,  
          p_region     => p_region,  
          p_is_printer_friendly => p_is_printer_friendly );  
       end if;  
       -- ***********************************  
       -- Here starts the actual plug-in code  
       -- ***********************************  
       apex_javascript.add_library (  
        p_name    => 'maps?file=api&v=2&key='||l_api_key,  
        p_directory  => 'http://maps.google.com/',  
        p_version   => null,  
        p_skip_extension => true );  
       -- Output the placeholder for the Google Map which is used by the Javascript code  
       sys.htp.p('<div id="'||p_region.static_id||'_map" style="width:'||l_width||'px; height:'||l_height||'px"></div>');     
       -- Initialize the Google map with location stored in the specified location page item.  
       -- The Javascript code is executed when the page has been rendered in the browser.  
       -- apex_javascript.escape are used to make sure that the values are properly escaped,  
       -- otherwise a " in the concatenated strings would break our Javascript code.  
       apex_javascript.add_onload_code (  
        p_code => '  
          if (GBrowserIsCompatible()) {    
          var lBounds = new GLatLngBounds();  
          var lMap = new GMap2($x("'||p_region.static_id||'_map"));  
          lMap.addControl(new GSmallMapControl());  
          lMap.addControl(new GMapTypeControl());  
          var lPoint = new GLatLng('||apex_javascript.escape(l_location)||');  
          lBounds.extend(lPoint);  
          lMap.setCenter(lPoint);  
          lMap.setZoom(lMap.getBoundsZoomLevel(lBounds)-4);'||  
          case when l_tooltip is not null then  
           ' var lTitle = "'||apex_javascript.escape(l_tooltip)||'";  
            var lMarker = new GMarker(lPoint);  
            lMap.addOverlay(lMarker);  
            lMarker.openInfoWindowHtml("<div class=\"tiny\">" + lTitle.replace(/~/g,"<br />") + "</div>");'  
          end||  
          '}' );  
     end render_simple_google_map;  
    
  13. Переходим в закладку "Callbacks" и в поле "Render Function Name" вводим "render_simple_google_map":
  14. Переходим в закладку "Settings". Заходим на http://code.google.com/apis/maps/signup.htm и запрашиваем API Key. Его значение вводим в поле API Key:
  15. Создаём новый регион:
  16. Выбирает тип региона - Plug-Ins:
  17. Выбираем доступный плагин:
  18. Вводим наименование региона (в нашем случае - Maps):
  19. Вводим значения аттрибутов (Width=600,Height=400,P1_LOCATION,P1_TOOLTIP):
  20. Создаём регион:
  21. Создаём новый элемент:
  22. Выбираем тип элемента - Text:
  23. Оставляем по-умолчанию:
  24. Вводим наименование элемента - P1_LOCATION:
  25. Вводим наименование поля на странице:
  26. Завершаем создание элемента. Аналогично создаем элемент P1_TOOLTIP.
  27. Создаем кнопку:
  28. Завершаем создание кнопки:
  29. Запускаем страницу:

четверг, 8 апреля 2010 г.

Application Express: создание CSS-кнопки

Создание три кнопки вместо cтандартных в Apex:

  1. Home -> Application Builder -> Application 101 -> Shared Components -> Templates -> Button:

     1.1  Definition (для первой кнопки):
     <span class="buttons">  
     <a href="#LINK#" class="positive">  
      <img src="#IMAGE_PREFIX#themes/ThemeName/img/positive.png" alt=""/>  
       #LABEL#</a>  
     <span>  
    
     1.2 Definition (для второй кнопки):
     <span class="buttons">  
     <a href="#LINK#" class="negative">  
       <img src="#IMAGE_PREFIX#themes/ThemeName/img/negative.png" alt=""/>  
       #LABEL#</a>  
     </span>  
    
     1.3 Definition (для третьей кнопки):
     <span class="buttons">  
       <a href="#LINK#" class="regular">  
       #LABEL#</a>  
     </span>  
    
  2. Создать css-файл для описания кнопки:
     .buttons a, .buttons button{  
       display:block;  
       float:left;  
       margin:0 7px 0 0;  
       background-color:#f5f5f5;  
       border:1px solid #dedede;  
       border-top:1px solid #eee;  
       border-left:1px solid #eee;  
       font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif;  
       font-size:12px;  
       line-height:130%;  
       text-decoration:none;  
       font-weight:bold;  
       color:#565656;  
       cursor:pointer;  
       padding:5px 10px 6px 7px; /* Links */  
     }  
     .buttons button{  
       width:auto;  
       overflow:visible;  
       padding:4px 10px 3px 7px; /* IE6 */  
     }  
     .buttons button[type]{  
       padding:5px 10px 5px 7px; /* Firefox */  
       line-height:17px; /* Safari */  
     }  
     *:first-child+html button[type]{  
       padding:4px 10px 3px 7px; /* IE7 */  
     }  
     .buttons button img, .buttons a img{  
       margin:0 3px -3px 0 !important;  
       padding:0;  
       border:none;  
       width:16px;  
       height:16px;  
     }  
     /* STANDARD */  
     button:hover, .buttons a:hover{  
       background-color:#dff4ff;  
       border:1px solid #c2e1ef;  
       color:#336699;  
     }  
     .buttons a:active{  
       background-color:#6299c5;  
       border:1px solid #6299c5;  
       color:#fff;  
     }  
     /* POSITIVE */  
     button.positive, .buttons a.positive{  
       color:#529214;  
     }  
     .buttons a.positive:hover, button.positive:hover{  
       background-color:#E6EFC2;  
       border:1px solid #C6D880;  
       color:#529214;  
     }  
     .buttons a.positive:active{  
       background-color:#529214;  
       border:1px solid #529214;  
       color:#fff;  
     }  
     /* NEGATIVE */  
     .buttons a.negative, button.negative{  
       color:#d12f19;  
     }  
     .buttons a.negative:hover, button.negative:hover{  
       background:#fbe3e4;  
       border:1px solid #fbc2c4;  
       color:#d12f19;  
     }  
     .buttons a.negative:active{  
       background-color:#d12f19;  
       border:1px solid #d12f19;  
       color:#fff;  
     }  
     /* REGULAR */  
     button.regular, .buttons a.regular{  
       color:#336699;  
     }  
     .buttons a.regular:hover, button.regular:hover{  
       background-color:#dff4ff;  
       border:1px solid #c2e1ef;  
       color:#336699;  
     }  
     .buttons a.regular:active{  
       background-color:#6299c5;  
       border:1px solid #6299c5;  
       color:#fff;  
     }  
    
  3. Загрузить данный файл на Web server (аналогично, тому как делается в Интеграции Oracle ApEx и extJS ).
  4. Загрузить следующие картинки в #IMAGE_PREFIX#themes/ThemeName/img:
    positive.png
    negative.png
  5. Получаются такие кнопки: