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

Ошибки в при работе с адаптерами при установке J2EE + BPEL

вторник, 16 февраля 2010 г. 0 коммент.

При установке BPEL 10.3.1.1.0 на чистый J2EE, не устанавливаются адаптеры для работы с базой данных, очередями AQ и JMS.

При попытке использовать неустановленные адаптеры, возникают ошибки:

для jms - Missing class: oracle.tip.adapter.jms.outbound.JmsProduceInteractionSpec
для БД - Missing class: oracle.tip.adapter.db.DBStoredProcedureInteractionSpec

Решение можно найти на My Oracle Support:


  • Article: Adapter Modules Missing On SOA Installation [ID 754146.1]

  • Problem: Error Running BPEL Process Using Adapters - Adapters Missing On Install [ID 433524.1]

  • Bug 5935034: BPEL ADAPATER ARE NOT THERE / CANNOT BE PATCHED AFTER CLEAN INSTALL J2EE+BPEL

Для установки адаптеров в ручную необходимо необходимо выполнить следующие шаги:


  1. Проверить, что файл $ORACLE_HOME/j2ee/<bpel container>/config/oc4j-connectors.xml содержит описание адаптеров. <bpel container> – OC4J контейнер, где запускается BPEL, как приложение.

  2. Задеплоить адаптеры используя AS Control. <bpel_container>/Applications/выпадающий список Standalone Resource Adapters. Нажимаем деплой и выбираем необходимые файлы адаптеров из директории $ORACLE_HOME/bpel/system/services/lib.

Соответствие имени файла адаптера и имени адаптера:


Имя файла Имя адаптера
AqAdapter.rar AqAdapter
DBAdapter.rar DbAdapter
fileAdapter.rar FileAdapter
ftpAdapter.rar FtpAdapter
JmsAdapter.rar JmsAdapter
MQSeriesAdapter.rar MQSeriesAdapter

Читать полностью

, ,

Зависающая активити Wait (hanging activity wait)

среда, 25 ноября 2009 г. 0 коммент.

Во время возросшей нагрузки, подвисла активити Wait. Поиск по интернету и чтение документации помогли найти решение.

Необходимо изменить значение параметра com.oracle.bpel.expirationAgent.threadCount с 10 до 150.

Параметр находится в файле resources-quartz.properties по следующему пути ${BPEL_HOME}/bpel/domains/{name of domain}/config.

Подробнее, какие еще параметры можно настроить можно почитать в BPEL Performance Tuning: Quartz Scheduling. Как работает активити Wait можно узнать в BPEL Performance Tuning: Quartz Scheduling.

Читать полностью

, , ,

Как получить доступ к Oracle SOA Suite Worklist’у с помощью удаленного Java-клиента (Часть 2)

пятница, 20 ноября 2009 г. 1 коммент.

В первой части я рассмотрел способ соединения SOAP_CLIENT, теперь рассмотрим способ соединения REMOTE_CLIENT. Собственно все тоже, за исключением некоторых особенностей. В файле wf_client_config.xml необходимо, чтобы содержимое секции ejb было корректным. Почему нужно проверить секцию ejb можно прочитать в Oracle® BPEL Process Manager Developer's Guide, в главе 16.6 Building Clients for Workflow Services.

Следует убедиться, что содержимое элемента serverurl корректное. Правильное значение можно найти в элементе jndi.url в файле:

SOA_Oracle_Home\bpel\utilities\ant-orabpel.properties

Подробнее об этом можно почитать здесь. Секция ejb в файле должна иметь такой вид:

  opmn:ormi://soahost:6006:oc4j_soa/hw_services
oc4jadmin
welcome1
oracle.j2ee.rmi.RMIInitialContextFactory

Также следует изменить способ подключения.
// ...
IWorkflowServiceClient wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.REMOTE_CLIENT);
// ...

На этом все изменения закончены, можно пользоватся новым подключением.
Читать полностью

, , ,

Как получить доступ к Oracle SOA Suite Worklist’у с помощью удаленного Java-клиента (Часть 1)

пятница, 9 октября 2009 г. 0 коммент.

Сначала показалось, что это простая задача: есть примеры в интернете, в руководстве Oracle, на блогах технических специалистов. Но, оказалось, что количество препонов настолько велико, что наскока решить эту задачу не удалось.

Итак существует несколько способов соединения:

  • JAVA_CLIENT – доступ к Workflow сервису напрямую с помощью Java (устаревший способ для версии 11.1.1);
  • LOCAL_CLEINT – доступ к Workflow сервису напрямую с помощью EJB;
  • REMOTE_CLIENT – доступ к Workflow сервису удаленно с помощью EJB;
  • SOAP_CLIENT – доступ к Workflow сервису удаленно с помощью SOAP;
  • WSIF_CLIENT – доступ к Workflow сервису удаленно с помощью WSIF (устаревший способ для версии 11.1.1);

Рассмотрим подробно способ соединения SOAP_CLIENT.

Для проекта мне понадобились библиотеки (вроде бы порядок важен):

  • bpm-infra.jar
  • orabpel-common.jar
  • orabpel-thirdparty.jar
  • orabpel.jar
  • oc4jclient.jar
  • jazncore.jar
  • xml.jar
  • xmlparserv2.jar
  • orasaaj.jar
  • soap.jar
  • orabpel-boot.jar
  • bpm-services.jar
  • wsclient_extended.jar (это файл надо взять с OTN)

Кроме библиотек понадобиться файл wf_client_config.xml. Данный файл необходимо включить в class-path вашего приложения. Файл можно скопировать с сервера, где установлен BPEL по следующему пути:

SOA_Oracle_Home\bpel\system\services\config\wf_client_config.xml

Следует убедиться, что содержимое элемента taskService корректное, указанный url доступен, и открывается форма для вызова веб-сервиса:

SOA_Oracle_Home\bpel\utilities\ant-orabpel.properties

Подробнее об этом можно почитать здесь. Секция taskService в файле должна иметь такой вид:



http://soahost:7777/integration/services/TaskService/TaskServicePort

Одного файла wf_client_config.xml достаточно для запуска приложения, но при этом будут выдаваться предупреждения:

<::> ORABPEL-30028
<::>
<::> Invalid configuration file wf_config.xml
<::> The configuration file wf_config.xml not be read.
<::> Make sure that the configuration file wf_config.xml is available and is a valid XML document. Contact oracle support if error is not fixable.

Чтобы избежать не нужных предупреждений необходимо в приложение добавить следующие файлы, и включить их в class-path:

  • SOA_Oracle_Home\bpel\system\services\config\wf_config.xml
  • SOA_Oracle_Home\bpel\system\services\schema\wf_config.xsd

При соединение к сервису workflow необходимо правильно указать параметры аутентификации. В моем случае это:

  • Логин: bpeladmin
  • Пароль: welcome1
  • Рилм(Realm): myrealm

Правильно значение realm можно подсмотреть в атрибуте realmName элемента configuration секции ISConfigaration\configurations файле:

SOA_Oracle_Home\bpel\system\services\config\is_config.xml

При запуске программы можно получить ошибку:

java.lang.SecurityException: class "com.collaxa.cube.LoggerException"'s signer information does not match signer information of other classes in the same package

или

java.lang.SecurityException: class "com.collaxa.cube.ExceptionIndex"'s signer information does not match signer information of other classes in the same package

или похожую.

Все дело в версии Java. Ошибка возникает только в версии 1.5 и связано с багом, возникающим, когда классы в одном пакете подписаны по разному или не подписаны вообще. Для запуска необходимо использовать версию 1.4 или 1.6.

Ну вот наконец-то добрались до самого кода:

package wl_test;

import java.util.ArrayList;
import java.util.List;

import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.task.model.Task;

import java.util.Iterator;

import oracle.bpel.services.workflow.repos.Ordering;
import oracle.bpel.services.workflow.repos.Column;
import oracle.bpel.services.workflow.repos.Predicate;
import oracle.bpel.services.workflow.repos.TableConstants;
import oracle.bpel.services.workflow.repos.table.WFTaskConstants;
import oracle.bpel.services.workflow.task.ITaskService;

import oracle.bpel.services.workflow.task.model.IdentityType;
import oracle.bpel.services.workflow.verification.IWorkflowContext;

public class app {

private static final String WF_MANAGER = "bpeladmin";
private static final String WF_PASSWORD = "welcome1";
private static final String WF_REALM = "myrealm";

public static void main(String[] args) {

try {
System.out.println("Пытаемся создать WorkflowServiceClient");
IWorkflowServiceClient wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.SOAP_CLIENT);
System.out.println("Создали WorkflowServiceClient");

System.out.println("Получаем TaskQueryService");
ITaskQueryService querySvc = wfSvcClient.getTaskQueryService();
System.out.println("Получили TaskQueryService");

System.out.println("Пытаеся пройти аутенсификацию");
IWorkflowContext ctx = querySvc.authenticate
(WF_MANAGER, // администратор
WF_PASSWORD,// пароль
WF_REALM, // realm, ldap каталог
null); // Работать из под другого пользователя

//Задаем колонки для выборки
List displayColumnsList = new ArrayList();
displayColumnsList.add("TASKNUMBER");
displayColumnsList.add("TITLE");
displayColumnsList.add("PRIORITY");
displayColumnsList.add("STATE");
displayColumnsList.add("OUTCOME");
displayColumnsList.add("EXPIRATIONDATE");
displayColumnsList.add("UPDATEDDATE");
displayColumnsList.add("UPDATEDBY");
displayColumnsList.add("CREATEDDATE");
displayColumnsList.add("CREATOR");
displayColumnsList.add("ASSIGNEEUSERS");
displayColumnsList.add("ASSIGNEEGROUPS");
displayColumnsList.add("ACQUIREDBY");
displayColumnsList.add("IDENTIFICATIONKEY");
displayColumnsList.add("PROCESSNAME");


//Сериализуем предикаты
Predicate.enableXMLSerialization(true);
// Добавляем условия
// 1. Ищем по названию процесса
Predicate filterPredicate = new Predicate(
TableConstants.WFTASK_PROCESSNAME_COLUMN,
Predicate.OP_EQ,
"test_wf");
// 2. Ищем по номеру задачи
filterPredicate.addClause(
Predicate.AND,
TableConstants.WFTASK_TASKNUMBER_COLUMN,
Predicate.OP_EQ,
"10431");

// Добавляем условия для сортировки
Column sortFieldColumn = Column.getColumn(WFTaskConstants.TEXTATTRIBUTE2_COLUMN);
boolean isAscending = false;
// Nulls в конец...
boolean isNullFirst = false;
Ordering taskOrdering = new Ordering(sortFieldColumn,isAscending,isNullFirst);

// Запрашиваем задачи
List tasks = querySvc.queryTasks
(ctx, // workflow context
displayColumnsList, // колонки для выборки
null, // Не запрашивать доп. информацию
ITaskQueryService.ASSIGNMENT_FILTER_ADMIN,
null, // Нет ключевого слова
filterPredicate, // Условия для выборки
taskOrdering, // Условие сортировки
0, // Не задаем сколько записей хотим получить
0 // Не задаем сколько записей хотим получить
);

// Получить доступ к сервису задач
ITaskService taskSvc = wfSvcClient.getTaskService();

// Посмотрим сколько у нас записей
System.out.println("tasks.size()=" + tasks.size() + "=");
for (int i=0;i<tasks.size();i++)
{
Task thisTask = (Task) tasks.get(i);
List assigneeUsers = thisTask.getSystemAttributes().getAssigneeUsers();
Iterator valueUsers = (assigneeUsers).iterator();

// Перезапросим задачу, чтобы получить полную информацию о задаче
thisTask = querySvc.getTaskDetailsById(ctx, thisTask.getSystemAttributes().getTaskId());

// Посмотрим результат
System.out.println("getSystemAttributes().getOutcome()="+
thisTask.getSystemAttributes().getOutcome() + "=" );
// Посмотрим состояние
System.out.println("getSystemAttributes().getState()="+
thisTask.getSystemAttributes().getState() + "=" );
// Посмотрим ID задачи
System.out.println("getSystemAttributes().getTaskId()="+
thisTask.getSystemAttributes().getTaskId() + "=" );
// Посмотрим номер задачи
System.out.println("getSystemAttributes().getTaskNumber()="+
thisTask.getSystemAttributes().getTaskNumber() + "=" );
// Посмотри название процесса
System.out.println("getProcessName()="+
thisTask.getProcessInfo().getProcessName()+ "=" );

// Посмотрим пользователей, которые участвуют в этой задаче
while (valueUsers.hasNext())
{
String listItem = ((IdentityType) valueUsers.next()).getId();
System.out.println("User=" + listItem);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

За дополнительной информацией можно обратиться сюда:


Читать полностью

, , , ,

Таймаут при вызове bpel-процесса

среда, 18 марта 2009 г. 0 коммент.

При вызове сервиса в Oracle BPEL cтолкнулся с такой ошибкой "java.lang.IllegalStateException: Cannot call setRollbackOnly() current thread is NOT associated with a transaction".

Ошибку также можно найти в логе по следующему пути:
"SOA_Oracle_Home\opmn\logs\".
Смотрим файл лога для контейнера в котором крутиться BPEL.

Поиск по документации привел к следующему решению.
A.1.1 Setting Properties for BPEL Processes to Successfully Complete and Catch Exception Errors

Следует обратить внимание не следующие особенности:
1. Параметр transaction-timeout в файле "SOA_Oracle_Home\j2ee\home\config\transaction-manager.xml".
1.1. На самом деле необходимо изменять файл, который повлияет на контейнер в котором крутиться bpel, т.е. правильный путь будет "SOA_Oracle_Home\j2ee\КОНТЕЙНЕР_ГДЕ_КРУТИТЬСЯ_BPEL\config\transaction-manager.xml"
1.2. Для исталяции одинокого Oracle BPEL Process Manager файл надо искать здесь "SOA_Oracle_Home\bpel\system\appserver\oc4j\j2ee\home\config".
2. Параметр transaction-timeout в файле "SOA_Oracle_Home\j2ee\home\application-deployments\orabpel\ejb_ob_engine\orion-ejb-jar.xml".
2.1. Также надо искать по другому пути.
"SOA_Oracle_Home\j2ee\КОНТЕЙНЕР_ГДЕ_КРУТИТЬСЯ_BPEL\application-deployments\orabpel\ejb_ob_engine\orion-ejb-jar.xml".
2.2. Обязательно поменять параметр во всем файле, он встречается несколько раз, для каждого бина.
3. Параметр syncMaxWaitTime в "SOA_Oracle_Home\bpel\domains\domain_name\config\domain.xml"
3.1. Не забываем поменять параметр для каждого домена.

Перестартовываем Application Server.

Иногда при длительном ожидании ответа от bpel-процесса, можно поймать ошибку "500 Server Error". В данном случае ругается Apache.
Что бы увеличить таймаут ожидания, находим параметр Timeout в файле "SOA_Oracle_Home\Apache\Apache\conf\httpd.conf" и увеличиваем значение. Перестартовываем Apache. Читать полностью