[jboss-user] [EJB 3.0] - illegal access to loading collection
grafl
do-not-reply at jboss.com
Fri Feb 2 09:37:48 EST 2007
Hi
Reading the Hibernate ref. I decided to try a small example, the weblog.
I am using JBOSS-4.0.4.GA, EJB3 and hibernate-3.2.
These are the Java sources:
- the Blogs.java (ENTITY)
| package weblog;
|
| import java.util.HashSet;
| import java.util.Set;
| import javax.persistence.CascadeType;
| import javax.persistence.Column;
| import javax.persistence.Entity;
| import javax.persistence.FetchType;
| import javax.persistence.Id;
| import javax.persistence.OneToMany;
| import javax.persistence.Table;
| import javax.persistence.UniqueConstraint;
|
| @Entity
| @Table(name = "weblog.blogs", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }) })
| public class Blogs implements java.io.Serializable {
|
| private static final long serialVersionUID = 255571063365822285L;
| private int blogId;
| private String name;
| private Set<BlogItems> blogItemses = new HashSet<BlogItems>(0);
|
| public Blogs() {}
|
| public Blogs(int blogId) {
| this.blogId = blogId;
| }
|
| public Blogs(int blogId, String name) {
| this.blogId = blogId;
| this.name = name;
| }
|
| public Blogs(int blogId, String name, Set<BlogItems> blogItemses) {
| this.blogId = blogId;
| this.name = name;
| this.blogItemses = blogItemses;
| }
|
| @Id
| @Column(name = "blog_id", unique = true, nullable = false, insertable = true, updatable = true)
| public int getBlogId() { return this.blogId; }
| public void setBlogId(int blogId) { this.blogId = blogId; }
|
| @Column(name = "name", unique = true, nullable = false, insertable = true, updatable = true, length = 50)
| public String getName() { return this.name; }
| public void setName(String name) { this.name = name; }
|
| @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "blogs")
| public Set<BlogItems> getBlogItemses() { return this.blogItemses; }
| public void setBlogItemses(Set<BlogItems> blogItemses) { this.blogItemses = blogItemses; }
|
| @Override
| public int hashCode() {
| final int PRIME = 31;
| int result = 1;
| result = PRIME * result + blogId;
| result = PRIME * result + ((blogItemses == null) ? 0 : blogItemses.hashCode());
| result = PRIME * result + ((name == null) ? 0 : name.hashCode());
| return result;
| }
|
| @Override
| public boolean equals(Object obj) {
| if (this == obj)
| return true;
| if (obj == null)
| return false;
| if (getClass() != obj.getClass())
| return false;
| final Blogs other = (Blogs) obj;
| if (blogId != other.blogId)
| return false;
| if (blogItemses == null) {
| if (other.blogItemses != null)
| return false;
| } else if (!blogItemses.equals(other.blogItemses))
| return false;
| if (name == null) {
| if (other.name != null)
| return false;
| } else if (!name.equals(other.name))
| return false;
| return true;
| }
|
| }
|
- the BlogItems (ENTITY)
| package weblog;
|
| import java.util.Date;
| import javax.persistence.Column;
| import javax.persistence.Entity;
| import javax.persistence.FetchType;
| import javax.persistence.Id;
| import javax.persistence.JoinColumn;
| import javax.persistence.ManyToOne;
| import javax.persistence.Table;
| import javax.persistence.Temporal;
| import javax.persistence.TemporalType;
|
| @Entity
| @Table(name = "weblog.blog_items", uniqueConstraints = {})
| public class BlogItems implements java.io.Serializable {
|
| private static final long serialVersionUID = 288936795343606406L;
| private int blogItemId;
| private Blogs blogs;
| private String title;
| private String text;
| private Date datetime;
|
| public BlogItems() { }
|
| public BlogItems(int blogItemId, String title) {
| this.blogItemId = blogItemId;
| this.title = title;
| this.text = title;
| this.datetime = new Date();
| }
|
| public BlogItems(int blogItemId, Blogs blogs, String title, String text,
| Date datetime) {
| this.blogItemId = blogItemId;
| this.blogs = blogs;
| this.title = title;
| this.text = text;
| this.datetime = datetime;
| }
|
| @Id
| @Column(name = "blog_item_id", unique = true, nullable = false, insertable = true, updatable = true)
| public int getBlogItemId() {
| return this.blogItemId;
| }
|
| public void setBlogItemId(int blogItemId) {
| this.blogItemId = blogItemId;
| }
|
| @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
| @JoinColumn(name = "blog", unique = false, nullable = false, insertable = true, updatable = true)
| public Blogs getBlogs() {
| return this.blogs;
| }
|
| public void setBlogs(Blogs blogs) {
| this.blogs = blogs;
| }
|
| @Column(name = "title", unique = false, nullable = false, insertable = true, updatable = true, length = 50)
| public String getTitle() {
| return this.title;
| }
|
| public void setTitle(String title) {
| this.title = title;
| }
|
| @Column(name = "text", unique = false, nullable = false, insertable = true, updatable = true, length = 50)
| public String getText() {
| return this.text;
| }
|
| public void setText(String text) {
| this.text = text;
| }
|
| @Temporal(TemporalType.DATE)
| @Column(name = "datetime", unique = false, nullable = false, insertable = true, updatable = true, length = 4)
| public Date getDatetime() {
| return this.datetime;
| }
|
| public void setDatetime(Date datetime) {
| this.datetime = datetime;
| }
|
| @Override
| public int hashCode() {
| final int PRIME = 31;
| int result = 1;
| result = PRIME * result + blogItemId;
| result = PRIME * result + ((blogs == null) ? 0 : blogs.hashCode());
| result = PRIME * result + ((datetime == null) ? 0 : datetime.hashCode());
| result = PRIME * result + ((text == null) ? 0 : text.hashCode());
| result = PRIME * result + ((title == null) ? 0 : title.hashCode());
| return result;
| }
|
| @Override
| public boolean equals(Object obj) {
| if (this == obj)
| return true;
| if (obj == null)
| return false;
| if (getClass() != obj.getClass())
| return false;
| final BlogItems other = (BlogItems) obj;
| if (blogItemId != other.blogItemId)
| return false;
| if (blogs == null) {
| if (other.blogs != null)
| return false;
| } else if (!blogs.equals(other.blogs))
| return false;
| if (datetime == null) {
| if (other.datetime != null)
| return false;
| } else if (!datetime.equals(other.datetime))
| return false;
| if (text == null) {
| if (other.text != null)
| return false;
| } else if (!text.equals(other.text))
| return false;
| if (title == null) {
| if (other.title != null)
| return false;
| } else if (!title.equals(other.title))
| return false;
| return true;
| }
|
| }
|
and the STATELESS beans:
| package weblog;
|
| import javax.ejb.Stateless;
| import javax.persistence.EntityManager;
| import javax.persistence.PersistenceContext;
| import org.apache.commons.logging.Log;
| import org.apache.commons.logging.LogFactory;
|
| @Stateless
| public class BlogsBean implements BlogsRemote, BlogsLocal, java.io.Serializable {
|
| private static final long serialVersionUID = 2078312303442351155L;
| private static final Log log = LogFactory.getLog(BlogsBean.class);
|
| @PersistenceContext(unitName="webloan")
| private EntityManager entityManager;
|
| public void persist(Blogs transientInstance) {
| log.debug("persisting Blogs instance");
| try {
| entityManager.persist(transientInstance);
| log.debug("persist successful");
| } catch (RuntimeException re) {
| log.error("persist failed", re);
| throw re;
| }
| }
|
| public void remove(Blogs persistentInstance) {
| log.debug("removing Blogs instance");
| try {
| entityManager.remove(persistentInstance);
| log.debug("remove successful");
| } catch (RuntimeException re) {
| log.error("remove failed", re);
| throw re;
| }
| }
|
| public Blogs merge(Blogs detachedInstance) {
| log.debug("merging Blogs instance");
| try {
| Blogs result = entityManager.merge(detachedInstance);
| log.debug("merge successful");
| return result;
| } catch (RuntimeException re) {
| log.error("merge failed", re);
| throw re;
| }
| }
|
| public Blogs findById(int id) {
| log.debug("getting Blogs instance with id: " + id);
| try {
| Blogs instance = entityManager.find(Blogs.class, id);
| log.debug("get successful");
| return instance;
| } catch (RuntimeException re) {
| log.error("get failed", re);
| throw re;
| }
| }
|
| public void addItem(int blog_id, int blogitem_id, String text) {
| log.debug("1");
| try {
| Blogs instance = entityManager.find(Blogs.class, blog_id);
| BlogItems bi = new BlogItems(blogitem_id, text);
| instance.getBlogItemses().add(bi);
| Blogs result = entityManager.merge(instance);
| log.debug("merge successful");
| } catch (RuntimeException re) {
| log.error("merge failed", re);
| throw re;
| }
| }
|
| }
|
| package gl.weblog;
|
| import javax.ejb.Stateless;
| import javax.persistence.EntityManager;
| import javax.persistence.PersistenceContext;
| import org.apache.commons.logging.Log;
| import org.apache.commons.logging.LogFactory;
|
| @Stateless
| public class BlogItemsBean implements BlogItemsRemote, BlogItemsLocal, java.io.Serializable {
|
| private static final long serialVersionUID = -6463759247311226709L;
| private static final Log log = LogFactory.getLog(BlogItemsBean.class);
|
| @PersistenceContext(unitName="webloan")
| private EntityManager entityManager;
|
| public void persist(BlogItems transientInstance) {
| log.debug("persisting BlogItems instance");
| try {
| entityManager.persist(transientInstance);
| log.debug("persist successful");
| } catch (RuntimeException re) {
| log.error("persist failed", re);
| throw re;
| }
| }
|
| public void remove(BlogItems persistentInstance) {
| log.debug("removing BlogItems instance");
| try {
| entityManager.remove(persistentInstance);
| log.debug("remove successful");
| } catch (RuntimeException re) {
| log.error("remove failed", re);
| throw re;
| }
| }
|
| public BlogItems merge(BlogItems detachedInstance) {
| log.debug("merging BlogItems instance");
| try {
| BlogItems result = entityManager.merge(detachedInstance);
| log.debug("merge successful");
| return result;
| } catch (RuntimeException re) {
| log.error("merge failed", re);
| throw re;
| }
| }
|
| public BlogItems findById(int id) {
| log.debug("getting BlogItems instance with id: " + id);
| try {
| BlogItems instance = entityManager.find(BlogItems.class, id);
| log.debug("get successful");
| return instance;
| } catch (RuntimeException re) {
| log.error("get failed", re);
| throw re;
| }
| }
| }
|
When I want to create a new BlogItems object, by adding it to the list of BlogItems, wich belongs to Blogs entity, I get the
| illegal access to loading collection
|
error message.
My client source looks like this:
| package weblog;
|
| import java.util.List;
| import java.util.Properties;
| import javax.naming.InitialContext;
|
| public class Test01 {
| Blogs ablogok;
| BlogItems ablogitemek;
|
| Test01(String blog_id, String blogitem_id, String blogitem_title) {
| System.out.println("- 0:"+blog_id);
| System.out.println("- 1:"+blogitem_id);
| System.out.println("- 2:"+blogitem_title);
| }
|
| public void addItemToBlog(String blog_id, String blogitem_id, String blogitem_title) {
| Integer BLOG_ID = new Integer(blog_id);
| Integer BLOGITEM_ID = new Integer(blogitem_id);
| try {
| Properties properties = new Properties();
| properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
| properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
| properties.put("java.naming.provider.url","192.1xx.1xx.1xx:1099");
| InitialContext ctx = new InitialContext();
| BlogsInterface bf = (BlogsInterface) ctx.lookup("BlogsBean/remote");
| bf.addItem(BLOG_ID.intValue(), BLOGITEM_ID.intValue(), blogitem_title);
| } catch(Exception ex) {
| System.out.println("ERROR: "+ex.getMessage()+"\n");
| //ex.printStackTrace();
| }
| }
|
| public static void main(String[] args) {
| Test01 t1 = new Test01(args[0], args[1], args[2]);
| t1.addItemToBlog(args[0], args[1], args[2]);
| t1 = null;
| }
| }
|
and the error stack
| 15:27:50,075 ERROR [LazyInitializationException] illegal access to loading collection
| org.hibernate.LazyInitializationException: illegal access to loading collection
| at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
| at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
| at org.hibernate.collection.PersistentSet.hashCode(PersistentSet.java:355)
| at weblog.Blogs.hashCode(Blogs.java:58)
| at weblog.BlogItems.hashCode(BlogItems.java:101)
| at java.util.HashMap.put(HashMap.java:372)
| at java.util.HashSet.add(HashSet.java:200)
| at java.util.AbstractCollection.addAll(AbstractCollection.java:238)
| at org.hibernate.collection.PersistentSet.endRead(PersistentSet.java:273)
| at org.hibernate.engine.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:183)
| at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:268)
| at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:249)
| at org.hibernate.loader.Loader.endCollectionLoad(Loader.java:866)
| at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:853)
| at org.hibernate.loader.Loader.doQuery(Loader.java:717)
| at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
| at org.hibernate.loader.Loader.loadCollection(Loader.java:1919)
| at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
| at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:541)
| at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
| at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1705)
| at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
| at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
| at org.hibernate.collection.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:142)
| at org.hibernate.collection.PersistentSet.add(PersistentSet.java:162)
| at weblog.BlogsBean.addItem(BlogsBean.java:69)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:589)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
| at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
| at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
| at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
| at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
| at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
| at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
| at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
| at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
| at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
| 15:27:50,081 ERROR [BlogsBean] merge failed
| org.hibernate.LazyInitializationException: illegal access to loading collection
| at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
| at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
| at org.hibernate.collection.PersistentSet.hashCode(PersistentSet.java:355)
| at weblog.Blogs.hashCode(Blogs.java:58)
| at weblog.BlogItems.hashCode(BlogItems.java:101)
| at java.util.HashMap.put(HashMap.java:372)
| at java.util.HashSet.add(HashSet.java:200)
| at java.util.AbstractCollection.addAll(AbstractCollection.java:238)
| at org.hibernate.collection.PersistentSet.endRead(PersistentSet.java:273)
| at org.hibernate.engine.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:183)
| at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:268)
| at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:249)
| at org.hibernate.loader.Loader.endCollectionLoad(Loader.java:866)
| at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:853)
| at org.hibernate.loader.Loader.doQuery(Loader.java:717)
| at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
| at org.hibernate.loader.Loader.loadCollection(Loader.java:1919)
| at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
| at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:541)
| at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
| at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1705)
| at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
| at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
| at org.hibernate.collection.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:142)
| at org.hibernate.collection.PersistentSet.add(PersistentSet.java:162)
| at weblog.BlogsBean.addItem(BlogsBean.java:69)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:589)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
| at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
| at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
| at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
| at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
| at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
| at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
| at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
| at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
| at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
|
Please help me.
Thank you
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4010048#4010048
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4010048
More information about the jboss-user
mailing list