[JBoss Seam] - failed to lazily initialize a collection
by quilian
Hello again!
I managed to get my other problems working by using a SMPC (thanks pete).
however i now stumble accross the 1:n relationship of my entities Benutzer and Gruppe.
I declared the Benutzer as following:
| @Entity
| @Name("benutzer")
| @Table(name = "benutzer")
| public class BenutzerImpl implements Serializable, Benutzer {
|
| private static final long serialVersionUID = -2113540391643036310L;
| private Long id;
| private Integer version;
| private String name;
|
| GruppeImpl gruppe;
|
| @Logger
| Log log;
|
| @Override
| public boolean equals(Object object) {
| if (object instanceof BenutzerImpl) {
| BenutzerImpl other = (BenutzerImpl) object;
|
| return (this.getId()==other.getId());
| }
| return false;
| }
|
| @Id
| @GeneratedValue
| public Long getId()
| public void setId(Long id)..
| @Version
| public Integer getVersion()...
| @SuppressWarnings("unused")
| private void setVersion(Integer version)..
|
|
| @ManyToOne(optional = true)
| @JoinColumn(name = "gruppe", nullable = true)
| public GruppeImpl getGruppe() {
| return gruppe;
| }
|
| @Transactional
| public void setGruppe(GruppeImpl aGruppe) {
|
| if (gruppe != null)
| {
|
| gruppe.removeBenutzer(this);
|
| gruppe = aGruppe;
|
| if (gruppe != null) {
|
| gruppe.addBenutzer(this);
| }
| }
| else
| {
| gruppe = aGruppe;
| }
| }
| }
|
and the Gruppe like that:
|
| @Entity
| @Name("gruppeImpl")
| @Table(name = "gruppen")
| public class GruppeImpl implements Serializable, Gruppe {
| @Logger
| Log log;
|
| private static final long serialVersionUID = 2106790568007992821L;
|
| private Long id;
| private Integer version;
| private String name;
| private Boolean status;
|
| private List<BenutzerImpl> someBenutzer;
|
|
| @Override
| @Transient
| public boolean equals(Object object) {
| if (object instanceof GruppeImpl) {
| GruppeImpl other = (GruppeImpl) object;
|
| return (this.getId()==other.getId());
| }
| return false;
| }
|
|
| @OneToMany(mappedBy = "gruppe")
| @Transactional
| public List<BenutzerImpl> getBenutzer() {
| return someBenutzer;
| }
|
| public void setBenutzer(List<BenutzerImpl> newBenutzerList) {
|
| this.someBenutzer = newBenutzerList;
| }
|
| @Transactional
| public void addBenutzer(BenutzerImpl benutzer) {
| if (this.someBenutzer == null) {
| this.someBenutzer = new ArrayList<BenutzerImpl>();
| }
| if (!this.someBenutzer.contains(benutzer))
| this.someBenutzer.add(benutzer);
| }
|
| @Transactional
| public void removeBenutzer(BenutzerImpl benutzer) {
| if (this.someBenutzer == null)
| {
| return;
| }
| this.someBenutzer.remove(benutzer);
| }
| ...
| }
|
The whole stuff in english:
If the Benutzer gets a new Gruppe he must update the corresponding List Gruppe.getBenutzer(). Else the java object gruppe doesnt know that something happened to him. Therefore i extended the simple setter Benutzer.setGruppe() to remove/add from old/new Gruppe.Im not sure if hibernate or javax or anything else could possibly do that for me, knowing that i want a 1:n relationship. i only do the update if the property gruppe is already set, because hibernate itself calls the getter on initialization of the Benutzer.
I also annotated the functions setGruppe, addBenutzer and removeBenutzer as @Transactional, because i want the operation to be in one transaction, hence rolled back completely if an error occurs. is that correct?
If i choose another Gruppe and submit the form i get:
| 17:35:52,468 ERROR [LazyInitializationException] failed to lazily initialize a collection of role: com.mobilanten.mowita.werkbank.GruppeImpl.benutzer, no session or session was closed
| org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.mobilanten.mowita.werkbank.GruppeImpl.benutzer, no session or session was closed
| at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
| at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
| ...
|
I debugged and found out that both the new and the old Grupp have a session attribute with two different persistance contexts that referer to the same hibernate.session. By the time of execution of Benutzer.setGruppe() the session of the old Gruppe is marked as closed.
Why are there 2 PCs ? i thought there'd only be this one (components.xml)
| <core:managed-persistence-context name="mowitaEntityManager"
| auto-create="true"
| persistence-unit-jndi-name="java:/mowitaWerkbankEntityManagerFactory"/>
|
injected like that (GruppenManager and BenutzerManager):
| @In
| private EntityManager mowitaEntityManager;
|
I thought the SMPC would be application global....
Thanks for any help!
Tobias Kilian
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040654#4040654
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040654
19 years
[JBoss Seam] - Re: Tutorial EJB3 + JSF + SEAM + ECLIPSE + TOMCAT
by app4you@yahoo.com
Hi,
Here are the steps, very easy actual.
1. Download the Sysdeo Tomcat+Eclipse Plugin
2. Run the Hotel's Ant script with the tomcat-deploy (or something like that) target
3. Go to the Tomcat's webapps folder then copy all the jar files, except the hotelxxx.jar file and paste import into the eclipse project WEB-INF/lib folder
4. Set these jar files to project's build path
5. Done
P.S. Make sure in your src folder, there must the a folder call META-INF that contains all the xml files like persistence.xml and blahblah. Well to do this, extract the hotelxxx.jar (from step 3 above) and copy the META-INF folder from it then paste it into your eclipse src folder. Nice thing is you can see the changes on the fly when you modify your xhtml, java, css or whatever.
Regards
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040653#4040653
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040653
19 years
[JBoss Seam] - Any Help? Run booking example out of container error.
by shaucle
When I run booking example as unit test (out of container), it failed, it cost me two days, I googled that, and only found 2 similar results, but not resolved. (Sorry for my english)
Any advice is appreciate.
Here are some of the logs:
[java] 23:22:54,078 INFO [Initialization] done initializing Seam
[java] 23:22:54,109 INFO [Version] Hibernate EntityManager 3.2.0.CR1
[java] 23:22:54,140 INFO [Version] Hibernate Annotations 3.2.0.CR1
[java] 23:22:54,140 INFO [Environment] Hibernate 3.2 cr2
[java] 23:22:54,156 INFO [Environment] hibernate.properties not found
[java] 23:22:54,156 INFO [Environment] Bytecode provider name : cglib
[java] 23:22:54,156 INFO [Environment] using JDK 1.4 java.sql.Timestamp handling
[java] 23:22:54,593 FATAL [Ejb3Configuration] jndi.propertiesO-:-Ofalse
[java] 23:22:54,593 FATAL [Ejb3Configuration] META-INF/ejb-jar.xmlO-:-Ofalse
[java] 23:22:54,593 FATAL [Ejb3Configuration] META-INF/jboss-beans.xmlO-:-Ofalse
[java] 23:22:54,593 FATAL [Ejb3Configuration] META-INF/MANIFEST.MFO-:-Ofalse
[java] 23:22:54,609 FATAL [Ejb3Configuration] META-INF/persistence.xmlO-:-Ofalse
[java] 23:22:54,640 FATAL [Ejb3Configuration] org/jboss/seam/example/booking/test/testng.xmlO-:-Ofalse
[java] 23:22:54,734 INFO [AnnotationBinder] Binding entity from annotated class: org.jboss.seam.example.booking.User
[java] 23:22:54,796 INFO [EntityBinder] Bind entity org.jboss.seam.example.booking.User on table Customer
[java] 23:22:54,828 INFO [AnnotationBinder] Binding entity from annotated class: org.jboss.seam.example.booking.Bookin
[java] 23:22:54,828 INFO [EntityBinder] Bind entity org.jboss.seam.example.booking.Booking on table Booking
[java] 23:22:54,843 INFO [AnnotationBinder] Binding entity from annotated class: org.jboss.seam.example.booking.Hotel
[java] 23:22:54,843 INFO [EntityBinder] Bind entity org.jboss.seam.example.booking.Hotel on table Hotel
[java] 23:22:55,031 INFO [NamingHelper] JNDI InitialContext properties:{}
[java] 23:22:55,062 ERROR [NamingHelper] Could not obtain initial context
[java] javax.naming.NamingException: Local server is not initialized
[java] at org.jnp.interfaces.LocalOnlyContextFactory.getInitialContext(LocalOnlyContextFactory.java:45)
[java] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
[java] at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
[java] at javax.naming.InitialContext.init(InitialContext.java:223)
[java] at javax.naming.InitialContext.(InitialContext.java:175)
[java] at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28)
[java] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)
[java] at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:1
[java] at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
[java] at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:61)
[java] at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1928)
[java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1211)
[java] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:631)
[java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:760)
[java] at org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.java:151)
[java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:205)
[java] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:114)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:27)
[java] at org.jboss.seam.example.booking.test.BookingUnitTest.testHotelSearching(BookingUnitTest.java:46)
[java] at org.jboss.seam.example.booking.test.BookingUnitTest.main(BookingUnitTest.java:28)
[java] Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: Could not f
rce
[java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:217)
[java] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:114)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:27)
[java] at org.jboss.seam.example.booking.test.BookingUnitTest.testHotelSearching(BookingUnitTest.java:46)
[java] at org.jboss.seam.example.booking.test.BookingUnitTest.main(BookingUnitTest.java:28)
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040646#4040646
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040646
19 years
[JBoss Seam] - Re: <s:selectItems> problem
by jquery@interia.pl
The stack trace is following
|
| javax.faces.convert.ConverterException: java.lang.ClassCastException: javax.faces.model.SelectItem
| at javax.faces.convert.CharacterConverter.getAsString(CharacterConverter.java:74)
| at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:544)
| at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:555)
| at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderSelectOptions(HtmlRendererUtils.java:398)
| at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:298)
| at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:252)
| at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:54)
| at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:536)
| at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:442)
| at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:216)
| at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:98)
| at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:536)
| at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:252)
| at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:249)
| at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:249)
| at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:249)
| at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:573)
| at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:101)
| at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:221)
| at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63)
| at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:60)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:79)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:75)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:213)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
| at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
| at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
| at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
| at java.lang.Thread.run(Thread.java:595)
| Caused by: java.lang.ClassCastException: javax.faces.model.SelectItem
| at javax.faces.convert.CharacterConverter.getAsString(CharacterConverter.java:70)
| ... 56 more
|
|
anonymous wrote : ou can't, thats not what a converter does.
So I guess that in
| public String getAsString(FacesContext context,
| UIComponent component,
| Object target)
|
method, "target" represents only a value of selectItem in selectOneMenu which has to be converted into string?
Thanks.
jquery
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040644#4040644
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040644
19 years