Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Базы данных (JDBC, JPA, Hibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2016, 15:23   #1
Karik_
Пользователь
 
Аватар для Karik_
 
Регистрация: 12.02.2016
Сообщений: 16
По умолчанию Java.sql.SQLRecoverableException: Данные для считывания из сокета отсутствуют

Доброго времени суток! Возникла одна ошибка, с которой не могу разобраться. При разработке модуля на Oracle ADF в среде разработки JDeveloper выходит ошибка при вызове оракловской функции. Лог ошибки:
<15.11.2016 14:10:29 ALMT> <Error> <Default> <INSIS-00000 (***INSIS ERROR MESSAGE***)> <[com.fadata.insis.view.message.Insis MessageService writeMessageToLogger] Данные для считывания из сокета отсутствуют
java.sql.SQLRecoverableException: Данные для считывания из сокета отсутствуют
at oracle.jdbc.driver.T4CMAREngine.unm arshalUB1(T4CMAREngine.java:1204)
at oracle.jdbc.driver.T4CMAREngine.unm arshalSB1(T4CMAREngine.java:1153)
at oracle.jdbc.driver.T4CTTIfun.receiv e(T4CTTIfun.java:312)
at oracle.jdbc.driver.T4CTTIfun.doRPC( T4CTTIfun.java:204)
at oracle.jdbc.driver.T4C8Oall.doOALL( T4C8Oall.java:540)
Truncated. see log file for complete stacktrace
>
<UIXRegion> <_warn> Ошибка при обработке viewId: /CntBlanksTF/CntBlanks URI: /gencnt/taskFlow/CntFormsTF/CntBlanks/CntBlanks.jsff actual-URI: /gencnt/taskFlow/CntFormsTF/CntBlanks/CntBlanks.jsff.
oracle.jbo.SQLStmtException: JBO-27122: SQL error during statement preparation. Statement: SELECT * FROM (SELECT
BEI.EMP_ID AS MAN_ID,
PP.NAME,
BEI.DEPARTMENT_ID,
BEI.RANK_ID
FROM BSO.BSO_EMPLOYEE_INFO BEI JOIN INSIS_CNT_V1.P_PEOPLE PP ON BEI.EMP_ID = PP.MAN_ID) QRSLT WHERE MAN_ID = :Bind_DonorEmpId
at oracle.jbo.server.BaseSQLBuilderImp l.processException(BaseSQLBuilderIm pl.java:3721)

Ошибка возникла после добавления столбца в таблицу с которой работает данная функцию. При этом Commit работает нормально сохраняет введенные данные. А потом после сохранения вызывается функция Оракл и приложение зависает. Выходит окно с ошибкой "Данные для считывания из сокета отсутствуют". В Entity и View Objects добавил данный столбец.
Вызов функции из Java кода:

Код:
public void FixOrder(ActionEvent actionEvent) {                
        FacesContext fctx = FacesContext.getCurrentInstance();
 
        DCBindingContainer dcBindings;
        dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
        DCIteratorBinding orderIterator = (DCIteratorBinding)dcBindings.get("BsoOrderViewIterator");  
        
        String orderIdValue = orderIterator.getCurrentRow().getAttribute("OrderId").toString(); 
        
        String errorMessage = "";
        
        OperationBinding Commit = dcBindings.getOperationBinding("Commit");
        OperationBinding Rollback = dcBindings.getOperationBinding("Rollback");
        
        Commit.execute();
 
        Object[] params = new Object[] { orderIdValue, errorMessage};
        boolean b = DBUtils.callBooleanFunction("BSO.BSO_OPERATIONS.FIX_ORDER_NC(?,?)", params, dbtrans);
        String mess = (String)params[params.length - 1];
        
        Commit.execute();
        
        if (!b) {
            InsisMessageService.addInsisErrorMessage(orderIdValue + "; " + mess);
        } else {
            InsisMessageService.addInsisInfoMessage(orderIdValue + " Накладная создана успешно!!!");
                        
            sbc1.setValue("Y");
            partiallyRefreshUIComponent(sbc1);
            AdfFacesContext.getCurrentInstance().addPartialTarget(sbc1);
        }
    }
А вот и сама функция Оракл:

Код:
FUNCTION Fix_Order(Pi_Order_Id NUMBER, Pio_Message IN OUT Error_Processing.Tab_Errors) RETURN BOOLEAN IS
        l_Order    Bso_Order%ROWTYPE;
        l_Emp_Info Bso_Employee_Info%ROWTYPE;
        l_Order_No VARCHAR2(100);
    BEGIN
        SAVEPOINT Sv_Before_Fix_Order;
        --
        l_Order := Get_Order(Pi_Order_Id => Pi_Order_Id);
        --
        IF l_Order.Order_Id IS NULL THEN
            l_Error_Text    := 'BSO.ORDER_DOES_NOT_EXISTS';
            l_Error_Details := 'ORDER_ID=' || Pi_Order_Id;
            l_Error_Id      := Error_Processing.Add_Error(Pi_Errors => Pio_Message, Pi_Prefix => 'BSO_OPERATION.fix_order',
                                                                                                        Pi_Error_Code => SQLCODE, Pi_Error_Description => l_Error_Text,
                                                                                                        Pi_Error_Details => l_Error_Details);
        
            ROLLBACK TO Sv_Before_Fix_Order;
            RETURN FALSE;
        END IF;
        --
        IF l_Order.Fixed = 'Y' THEN
            l_Error_Text    := 'BSO.ORDER_ALREADY_FIXED';
            l_Error_Details := 'ORDER_ID=' || Pi_Order_Id;
            l_Error_Id      := Error_Processing.Add_Error(Pi_Errors => Pio_Message, Pi_Prefix => 'BSO_OPERATION.fix_order',
                                                                                                        Pi_Error_Code => SQLCODE, Pi_Error_Description => l_Error_Text,
                                                                                                        Pi_Error_Details => l_Error_Details);
        
            ROLLBACK TO Sv_Before_Fix_Order;
            RETURN FALSE;
        END IF;
        --
        IF NOT Check_Order(l_Order, Pio_Message) THEN
            ROLLBACK TO Sv_Before_Fix_Order;
            RETURN FALSE;
        END IF;
        --
        FOR r IN (SELECT *
                                FROM Bso_Operation o
                             WHERE o.Order_Id = Pi_Order_Id
                                 AND o.Fixed != 'C') LOOP
            IF NOT Fix_Operation(Pi_Operation_Id => r.Operation_Id, Pi_Old_Operation_Id => NULL, Pio_Message => Pio_Message) THEN
                ROLLBACK TO Sv_Before_Fix_Order;
                RETURN FALSE;
            END IF;
        END LOOP;
        --
        UPDATE Bso_Order o SET o.Fixed = 'Y' WHERE o.Order_Id = Pi_Order_Id;
        UPDATE Bso_Order o SET o.Closed_Order_Id = Pi_Order_Id WHERE o.Order_Id = l_Order.Linked_Order_Id;
        --
        l_Emp_Info := Pkg_Info.Get_Emp_Info(Pi_Emp_Id => l_Order.Operation_Emp_Id);
        l_Order_No := Get_Order_No(Pi_Office_Id => l_Emp_Info.Department_Id, Pi_Year => TO_CHAR(l_Order.Order_Date, 'yyyy'));
        UPDATE Bso_Order o
             SET o.Order_No = l_Order_No
         WHERE o.Order_Id = Pi_Order_Id
             AND o.Order_No IS NULL;
        --
        RETURN TRUE;
        --
    EXCEPTION
        WHEN OTHERS THEN
            l_Error_Text    := SQLERRM;
            l_Error_Details := 'ORDER_ID=' || Pi_Order_Id;
            l_Error_Id      := Error_Processing.Add_Error(Pi_Errors => Pio_Message, Pi_Prefix => 'BSO_OPERATION.fix_order',
                                                                                                        Pi_Error_Code => SQLCODE, Pi_Error_Description => l_Error_Text,
                                                                                                        Pi_Error_Details => l_Error_Details);
            ROLLBACK TO Sv_Before_Fix_Order;
            RETURN FALSE;
    END;
    ---------------------------------------------------------------------------------------------------
    FUNCTION Fix_Order_Nc(Pi_Order_Id NUMBER, Pio_String_Message IN OUT VARCHAR2) RETURN BOOLEAN IS
        l_Result  BOOLEAN;
        p_Message Error_Processing.Tab_Errors;
    BEGIN
        l_Result := Fix_Order(Pi_Order_Id, p_Message);
        --
        Pio_String_Message := Error_Messages_2_String(p_Message);
        --
        RETURN l_Result;
    END;

Может кто-нибудь сталкивался с такой проблемой.
Karik_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать данные int с помощью сокета gunsoy C/C++ Сетевое программирование 5 06.11.2013 18:27
изменить путь для считывания текста m1zantrop Общие вопросы Delphi 1 06.06.2012 10:33
Программа для считывания информации с сайта BENDER.VII Общие вопросы Delphi 4 09.02.2012 21:10
ip для сокета Solan C/C++ Сетевое программирование 4 07.03.2010 18:05
Как проверить полученны/переданны ли данные от сокета? zotox Помощь студентам 2 17.08.2009 22:29