powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / jsf & hibernate два вопроса
2 сообщений из 2, страница 1 из 1
jsf & hibernate два вопроса
    #33378995
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю для пробы такую вещь таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 CREATE TABLE `core_variables_categories` (
  `ID_VARIABLE_CATEGORY`  int ( 11 ) NOT  NULL  auto_increment,
  `SYS_NAME_OF_VARIABLE` varchar( 100 )  default   NULL ,
  `FINE_NAME_OF_VARIABLE` varchar( 100 )  default   NULL ,
  PRIMARY KEY  (`ID_VARIABLE_CATEGORY`),
  UNIQUE KEY `SYS_NAME_OF_VARIABLE` (`SYS_NAME_OF_VARIABLE`),
  KEY `FINE_NAME_OF_VARIABLE` (`FINE_NAME_OF_VARIABLE`)
) ENGINE=InnoDB  DEFAULT  CHARSET=cp1251

для нее маппинг в гибернате:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping  PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    < class  name="kolya.db.model.VariablesCategoryRow" table="core_variables_categories">
        <id name="ID_VARIABLE_CATEGORY" type="integer" unsaved-value="null" >
            <column name="ID_VARIABLE_CATEGORY" sql-type="int" not- null ="true"/>
            <generator  class ="native"/>
        </id>
        <property name="SYS_NAME_OF_VARIABLE" type="string">
            <column name="SYS_NAME_OF_VARIABLE" not- null ="true"/>
        </property>
        <property name="FINE_NAME_OF_VARIABLE" type="string">
            <column name="FINE_NAME_OF_VARIABLE"  not- null ="true"/>
        </property>
    </ class >

</hibernate-mapping>

вот конфиг для faces
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
 <?xml version="1.0"?>

<!DOCTYPE faces-config  PUBLIC 
        "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
        "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">


<faces-config>

    <navigation-rule>
        <description>
            Simple navigation rule.
        </description>
        <from-view-id>/login.jsp</from-view-id>
        <navigation- case >
            <description>
                Simple navigation  case .
            </description>
            <from-outcome>ok_login</from-outcome>
            <to-view-id>/index.jsp</to-view-id>
        </navigation- case >
    </navigation-rule>


    <navigation-rule>
        <description>
            Simple navigation rule.
        </description>
        <from-view-id>/index.jsp</from-view-id>
        <navigation- case >
            <description>
                Simple navigation  case .
            </description>
            <from-outcome>manage_varibles_reference</from-outcome>
            <to-view-id>/variables_types.jsp</to-view-id>
        </navigation- case >
    </navigation-rule>



    <managed-bean>
        <description>
            Simple backing bean.
        </description>
        <managed-bean-name>alayerBean</managed-bean-name>
        <managed-bean- class >kolya.db.ConnectionAbstractLayer</managed-bean- class >
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <description>
            Simple backing bean.
        </description>
        <managed-bean-name>LoginBean</managed-bean-name>
        <managed-bean- class >kolya.jsf.ipkmanager.Login</managed-bean- class >
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>alayer</property-name>
            <property- class >kolya.db.ConnectionAbstractLayer</property- class >
            <value>#{alayerBean}</value>
        </managed-property>
    </managed-bean>

    <managed-bean>
        <description>
            Simple backing bean.
        </description>
        <managed-bean-name>dataVariablesList</managed-bean-name>
        <managed-bean- class >kolya.db.model.VariablesCategoryQuery</managed-bean- class >
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>alayer</property-name>
            <property- class >kolya.db.ConnectionAbstractLayer</property- class >
            <value>#{alayerBean}</value>
        </managed-property>
        
    </managed-bean>
</faces-config>

как видно у меня два бина один для проверки доступа входа в систему и второй для вывода данных таблицы имеют одно общее свойство - бин хранящий в себе сессию к гибернату
теперь проблема, на странице которая выводит содержимое таблицы делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<html>
  <head><title>Site Admin</title></head>
  <body>
    <f:view>
        <h:form>
            <h:dataTable value="#{dataVariablesList.query}" var="row">
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Variable Cat ID" />
                    </f:facet>
                     <h:outputText value="#{row.ID_VARIABLE_CATEGORY}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Variable SYS(tem) Name" />
                    </f:facet>
                     <h:inputText size="30" value="#{row.SYS_NAME_OF_VARIABLE}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Variable FINE Name" />
                    </f:facet>
                     <h:inputText size="40" value="#{row.FINE_NAME_OF_VARIABLE}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Check If Delete" />
                    </f:facet>
                    <h:selectBooleanCheckbox value="#{row.MUSTBE_DELETED}"/>
                </h:column>
            </h:dataTable>
            <h:commandButton value="update records"
                    actionListener="#{dataVariablesList.saveDataAction}"
                    />
            <h:commandButton id="btnUpdate" value="Change Data" actionListener="#{dataVariablesList.saveDataAction2}"/>
        </h:form>
    </f:view>
  </body>
</html>

теперь надо сделать обработчик события для изменения данных, делаю в составе класса привязанного к бину dataVariablesList так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
  package  kolya.db.model;

 import  kolya.db.ConnectionAbstractLayer;

 import  org.hibernate.Query;
 import  org.hibernate.HibernateException;
 import  org.hibernate.Session;

 import  java.util.List;
 import  java.util.Iterator;
 import  java.awt.event.ActionEvent;

 import  javax.faces.*;
 import  javax.faces.component.html.*;
 import  javax.faces.event.*;

 public   class  VariablesCategoryQuery {
     public  ConnectionAbstractLayer alayer;

     public  ConnectionAbstractLayer getAlayer() {
         return  alayer;
    }

     public   void  setAlayer(ConnectionAbstractLayer alayer) {
         this .alayer = alayer;
    }
    List m_rows =  null ;
     public  List getQuery() {
         if  (alayer ==  null )
            System.err.println ("alayer is null");
         else 
         if  (alayer.getSession() ==  null )
            System.err.println ("alayer session is null");
         try  {
            Query q = alayer.getSession().createQuery("FROM kolya.db.model.VariablesCategoryRow AS g");
            List list = q.list();
            m_rows = list;
             for  (Iterator iterator = list.iterator(); iterator.hasNext();) {
                Object o =  iterator.next();
                VariablesCategoryRow row = (VariablesCategoryRow) o;
                row.setMasterRowCategory ( this );
            }
             return  list;
        }  catch  (HibernateException e) {
            e.printStackTrace();
        }
         return   null ;
    }

     public  String SaveData (){
        System.out.println("SaveData");
        ConnectionAbstractLayer alayer =  getAlayer();
        Session session  = alayer.getSession();
         for  (Iterator iterator = m_rows.iterator(); iterator.hasNext();) {
            Object o = iterator.next();
            VariablesCategoryRow row = (VariablesCategoryRow) o;
            session.update(row);
            System.out.println("save: " + row.getFINE_NAME_OF_VARIABLE());
        }
         return   null ;
    }


     public   void  saveDataAction (ActionEvent aev){
        System.out.println("Save Data");
        SaveData();
    }
}
фишка в том что saveDataAction - не вызывается, для эксперимента пробовал
делать ссылку на несуществующие имена методов. ноль реакции. томкат исключений тоже не выдает. пробовал давать ссылку через <h:commandButton action="#{dataVariablesList.SaveData}" /> аналогично.
* общий вопрос плоха ли данная методика.
* глюки с русскими буквами -- они отображаются нормально но в коде html кодируюется через #код
* это у меня или только у всех после примерно 20 итераций: перекомпиляции и переразвертывания приложения, томкат дохнет с мессджем нехватка памяти, в диспетчере задач выбрано примерно полторы сотни. плюс каждая обработка запроса занимают порядка 6-10 секунд -> duron1300 + 512mb.
...
Рейтинг: 0 / 0
jsf & hibernate два вопроса
    #33379042
GammiBear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
это у меня или только у всех после примерно 20 итераций: перекомпиляции и переразвертывания приложения, томкат дохнет с мессджем нехватка памяти, в диспетчере задач выбрано примерно полторы сотни. плюс каждая обработка запроса занимают порядка 6-10 секунд -> duron1300 + 512mb.


Это вроде как старая фишка - дело в том, что кошак реально никуда не выгружает приложение, а при перезагрузке просто подменяет ClassLoader. отсюда после Х перезагрузок начинается OutOfMemoryException....

Это эффект точно имеет место (проверено лично) на кошаке версии 5.0.27 и 5.0.30

Лечение эффекта без написания патча и пересборки томкэта :

Увеличение памяти , доступной жабе + периодические рестарты томкэта.

Хинт : реально жаба использует не все из ваших 512mb (точнее - по умолчанию только 64Mb) - детали по поводу жабы и RAM :
0. RTFM жабадок по jvm
1. Поиск по этму форуму - этот вопрос здесь уже поднимался....
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / jsf & hibernate два вопроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]