To moje początki z aplikacjami webowymi i jak widać nie wszystko jeszcze rozumiem. Mam prosty formularz dodający zgłoszenia do bazy danych. Problem pojawia się gdy pracuje kilku użytkowników jednocześnie na róznych requestach aplikacji. Dla każdeo z użytkowników tworzony jest obiekt Request (tutaj wszystko jest ok). Dla każdego z nich również tworzę listę obiektów: RequestEntity której częścia id jest id wcześniej utworzonego Request (niżej formularz uzupełniania właśnie tych obiektów). I tutaj pojawia się mój problme w chwili gdy 2 bądz więcej użytkowników pracje jednocześnie w aplikacjie wszyscy otrzymują taką sama listę obiektów: RequestEntity (w formularzach widać różne dane ale do bazy danych trafiają takie same - tej osoby która pierwsza wywoła metode zapisu do bazy). Nie rozumiem dlaczego tak się dzieje nie potrafie odszukać błędu, będe wdzięczny za wskazówki.
<ui:composition>
<p:wizard id="addRequestWizard" widgetVar="wiz" flowListener="#{addRequestBean.onFlowProcess}" >
...
<p:tab id="address" title="Formularz urlopowy" >
<p:panel header="Proszę o udzielenie urlopu:" >
<p:messages />
<h:panelGrid columns="7" cellpadding="5">
<p:selectBooleanCheckbox value="#{addRequestBean.re0.mark}" >
<p:ajax event="change" update="cal1" />
<p:ajax event="change" update="cal2" />
</p:selectBooleanCheckbox>
<h:outputText value="wypoczynkowego " />
<p:outputLabel style="white-space: pre-wrap; word-wrap: break-word;"/>
<p:outputLabel value="od Dnia:" />
<p:calendar id="cal1" disabled="#{addRequestBean.re0.mark==false}" value="#{addRequestBean.re0.fromDate}" pattern="dd.MM.yyyy" pages="2" maxlength="10"/>
<p:outputLabel value="do Dnia:" />
<p:calendar id="cal2" disabled="#{addRequestBean.re0.mark==false}" value="#{addRequestBean.re0.toDate}" pattern="dd.MM.yyyy" pages="2" maxlength="10"/>
...
</p:tab>
</p:wizard>
</ui:composition>
<ui:composition>
<p:dialog header="Potwierdzenie: " widgetVar="wigetAddRequestDialog" >
<p:commandButton id="wyslijButton" value="Wyślij" action="#{addRequestBean.addRequest()}" />
</p:dialog>
</ui:composition>
I teraz metody w bean:
@ManagedBean
@ViewScoped
public class AddRequestBean{
Request request;
RequestEntity re0, re1, re2, re3, re4, re5, re6;
ArrayList<RequestEntity> lista;
RequestEntityEmbeddable ree;
public AddRequestBean() {
request = new Request();
lista = new ArrayList();
lista.clear();
re0 = new RequestEntity();
lista.add(re0);
re1 = new RequestEntity();
lista.add(re1);
re2 = new RequestEntity();
lista.add(re2);
re3 = new RequestEntity();
lista.add(re3);
re4 = new RequestEntity();
lista.add(re4);
re5 = new RequestEntity();
lista.add(re5);
re6 = new RequestEntity();
lista.add(re6);
for(int i=0; i<lista.size(); i++){
ree = new RequestEntityEmbeddable(1, i);
lista.get(i).setRequestEntityEmbeddable(ree);
}
}
public void addRequest() throws IOException, MessagingException, NamingException{
DAO.RequestDAO.addRequest(request, lista);
}
I zapis do bazy:
public static void addRequest(Request r, ArrayList<RequestEntity>list) throws IOException{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx=null;
try{
tx = session.beginTransaction();
session.save(r);
tx.commit();
for(int i=0; i<list.size(); i++){
RequestEntity re = list.get(i);
RequestEntityEmbeddable ree = new RequestEntityEmbeddable(r.getId(), i);
re.setRequestEntityEmbeddable(ree);
DAO.RequestEntityDAO.addRequestEntity(re);}
}
catch (Exception e) {if (tx!=null) tx.rollback();e.printStackTrace();}
finally {session.close();}
}