Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Bug: Smartgwt is trying to serialize hyibernates proxy classes

    Hello,

    I currently evaluating Smartgwt enterprise edition 3.1d (2012/10/11) and get the following error:

    Code:
    === 2012-10-14 11:24:48,097 [70-4] WARN  JSTranslater - org.hibernate.internal.SessionFactoryImpl contains a (potentially indirect) looping reference to itself.  Returning null for recursed value.
    === 2012-10-14 11:24:48,131 [70-4] WARN  HibernateTransaction - Attempted to commit inactive transaction
    === 2012-10-14 11:24:48,133 [70-4] ERROR IDACall - Error executing operation: item_update
    com.isomorphic.js.UnconvertableException: com.isomorphic.js.UnconvertableException: com.isomorphic.js.UnconvertableException: com.isomorphic.js.UnconvertableException: java.lang.UnsupportedOperationException
    	at org.hibernate.internal.util.collections.IdentityMap.keySet(IdentityMap.java:140)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1013)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1053)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1053)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1053)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1053)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1053)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
    	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1215)
    	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1166)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1053)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
    	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1215)
    	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1166)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
    	at com.isomorphic.js.JSTranslater.toJS(JSTranslater.java:561)
    	at com.isomorphic.rpc.RPCManager.completeResponse(RPCManager.java:1316)
    	at com.isomorphic.rpc.RPCManager.send(RPCManager.java:586)
    	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:173)
    	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:138)
    	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:74)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
    	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
    	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
    	at java.lang.Thread.run(Thread.java:662)
    It seems that smartgwt is trying to serialize some proxies generated by hiberanet (4.1.7.Final)

    Here is the code I used:

    Code:
    package test.server;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import java.util.Collection;
    
    @Entity
    public class OrderEntity {
    	@Id
    	private long orderNumber;
    	private double total;
    	@OneToMany(mappedBy = "theOrder", cascade = CascadeType.ALL)
    	private Collection<ItemEntity> items;
    
    	/* getter + setter */
    }
    Code:
    package test.server;
    
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    
    @Entity
    public class ItemEntity {
    
    	@Id
    	@GeneratedValue(generator = "uuid")
    	@GenericGenerator(name = "uuid", strategy = "uuid2")
    	private String id;
    	private String name;
    	private int quantity;
    	private double price;
    	@ManyToOne(fetch = FetchType.LAZY)
    	private OrderEntity theOrder;
    	
    	/* getter + setter */
    }
    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <DataSource ID="order"
                serverType="hibernate"
                dropExtraFields="true"
                beanClassName="test.server.OrderEntity">
        <fields>
            <field name="orderNumber" type="integer" primaryKey="true"/>
            <field name="total" type="float"/>
        </fields>
    </DataSource>
    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <DataSource ID="item"
                serverType="hibernate"
                dropExtraFields="true"
                beanClassName="test.server.ItemEntity">
        <fields>
            <field name="id" type="text" primaryKey="true" autoGenerated="true" hidden="true"/>
            <field name="name" type="text"/>
            <field name="quantity" type="integer"/>
            <field name="price" type="float"/>
            <field name="theOrder" canEdit="true" foreignKey="order.orderNumber"/>
        </fields>
        <serverObject className="test.server.DMITest" lookupStyle="new"/>
    </DataSource>
    Code:
    package test.server;
    
    import com.isomorphic.datasource.DSRequest;
    import com.isomorphic.datasource.DSResponse;
    import com.isomorphic.datasource.DataSource;
    import com.isomorphic.hibernate.HibernateTransaction;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    public class DMITest {
    
    	public DSResponse update(DSRequest request) throws Exception {
    		return handleItem(request);
    	}
    
    	public DSResponse add(DSRequest request) throws Exception {
    		return handleItem(request);
    	}
    
    	private DSResponse handleItem(DSRequest request) throws Exception {
    		DSResponse response = request.execute();
    		ItemEntity item = (ItemEntity) response.getData();
    		double total = 0;
    
    		OrderEntity order = item.getTheOrder();
    		if (!order.getItems().contains(item)){
    			order.getItems().add(item);
    		}
    
    		for (ItemEntity itemEntity : order.getItems()) {
    			total += itemEntity.getPrice() * itemEntity.getQuantity();
    		}
    		order.setTotal(total);
    
    		// don't use this http://forums.smartclient.com/showthread.php?t=23970
    		Session session = HibernateTransaction.getTransactionSession((Transaction) request.getDataSource().getTransactionObject(request));
    		session.update(order);
    
    		DSResponse updateResponse = new DSResponse(DataSource.forName("order", null), order);
    		updateResponse.setOperationType(DataSource.OP_UPDATE);
    		response.addRelatedUpdate(updateResponse);
    
    		return response;
    	}
    }
    Code:
    package test.client;
    
    import com.google.gwt.core.client.EntryPoint;
    import com.smartgwt.client.data.DataSource;
    import com.smartgwt.client.types.ListGridComponent;
    import com.smartgwt.client.widgets.events.ClickEvent;
    import com.smartgwt.client.widgets.events.ClickHandler;
    import com.smartgwt.client.widgets.form.fields.SelectItem;
    import com.smartgwt.client.widgets.grid.ListGrid;
    import com.smartgwt.client.widgets.grid.ListGridField;
    import com.smartgwt.client.widgets.layout.HLayout;
    import com.smartgwt.client.widgets.toolbar.ToolStrip;
    import com.smartgwt.client.widgets.toolbar.ToolStripButton;
    
    public class Entry implements EntryPoint {
    
    	public void onModuleLoad() {
    		DataSource orderDs = DataSource.get("order");
    
    		final ListGrid orderGrid = new ListGrid();
    		orderGrid.setDataSource(orderDs);
    		initGrid(orderGrid);
    
    		final ListGrid itemGrid = new ListGrid();
    		itemGrid.setDataSource(DataSource.get("item"));
    
    		SelectItem selectItem = new SelectItem("theOrder");
    		selectItem.setOptionDataSource(orderDs);
    		ListGridField infoListGridField = new ListGridField("theOrder");
    		infoListGridField.setEditorType(selectItem);
    		itemGrid.setFields(infoListGridField);
    
    		initGrid(itemGrid);
    
    		HLayout mainLayout = new HLayout();
    		mainLayout.setWidth100();
    		mainLayout.setHeight100();
    		mainLayout.addMember(orderGrid);
    		mainLayout.addMember(itemGrid);
    
    		mainLayout.draw();
    
    	}
    
    	private void initGrid(final ListGrid grid) {
    		grid.setAutoFetchData(true);
    		grid.setAutoSaveEdits(false);
    		grid.setCanEdit(true);
    		grid.setUseAllDataSourceFields(true);
    
    
    		ToolStrip strip = new ToolStrip();
    		ToolStripButton save = new ToolStripButton("save");
    		save.addClickHandler(new ClickHandler() {
    			@Override
    			public void onClick(ClickEvent clickEvent) {
    				grid.saveAllEdits();
    			}
    		});
    		strip.addButton(save);
    		ToolStripButton add = new ToolStripButton("add");
    		add.addClickHandler(new ClickHandler() {
    			@Override
    			public void onClick(ClickEvent clickEvent) {
    				grid.startEditingNew();
    			}
    		});
    		strip.addButton(add);
    		grid.setGridComponents(ListGridComponent.HEADER, ListGridComponent.BODY, strip);
    	}
    }
    To reproduce do the follwoing:
    1. add + save an order
    2. add + save two items (for the Order) (here the DMI works as expected)
    3. modify an item and save it.

    btw.: Why is SmartGwt trying to access the items of the order, I configured dropExtraFields="true" in the order.ds.xml

    #2
    We've made a change which should address this issue in the 3.1 branch.
    This will be present in the 3.1 final release

    Regards
    Isomorphic Software

    Comment


      #3
      Is there also a nightly build of this fix?

      Comment


        #4
        I've retested the TestCase with the 3.1d nightly build (2012/10/17). The problem disappeared for the case you don't use the Hibernate InstrumentTask.
        In latter case, I now get an OutOfMemoryError. Smartgwt is still trying to access Fields / Methods it should ignore. For the example above I get this Error:

        Code:
        === 2012-10-19 14:33:05,808 [70-1] DEBUG DataTools - Bean inspection: invocation of org.hibernate.internal.SessionFactoryImpl$1.getInterceptor() while trying to obtain property 'interceptor' threw an exception: java.lang.IllegalAccessException: Class com.isomorphic.util.DataTools can not access a member of class org.hibernate.internal.SessionFactoryImpl$1 with modifiers "public"
        	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
        	at java.lang.reflect.Method.invoke(Method.java:588)
        	at com.isomorphic.util.DataTools.getProperties(DataTools.java:2670)
        	at com.isomorphic.util.DataTools.getProperties(DataTools.java:2617)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:701)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
        	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1228)
        	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1179)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
        	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1228)
        	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1179)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
        	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1066)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
        	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1228)
        	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1179)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
        	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
        	at com.isomorphic.js.JSTranslater.toJS(JSTranslater.java:561)
        	at com.isomorphic.rpc.RPCManager.completeResponse(RPCManager.java:1327)
        	at com.isomorphic.rpc.RPCManager.send(RPCManager.java:586)
        	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:173)
        	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:138)
        	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:74)
        	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
        	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
        	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
        	at java.lang.Thread.run(Thread.java:662)
        
        Setting value to the error string and continuing
        === 2012-10-19 14:33:05,810 [70-1] WARN  JSTranslater - org.hibernate.internal.TransactionEnvironmentImpl contains a (potentially indirect) looping reference to itself.  Returning null for recursed value.
        === 2012-10-19 14:33:05,840 [70-1] WARN  JSTranslater - test.server.OrderEntity_$$_javassist_2 contains a (potentially indirect) looping reference to itself.  Returning null for recursed value.
        I can not attach any zip files, otherwise I would have attached the whole project including the maven pom. Let me know if you need any support to reproduce this problem.

        Comment


          #5
          I figured out a little bit better way to show that SmartGwt is trying to access methods it should ignore. Just replace the content of the class Order with this.

          Code:
          package test.server;
          
          import org.hibernate.bytecode.internal.javassist.FieldHandled;
          import org.hibernate.bytecode.internal.javassist.FieldHandler;
          
          import javax.persistence.CascadeType;
          import javax.persistence.Entity;
          import javax.persistence.Id;
          import javax.persistence.OneToMany;
          import java.util.Collection;
          
          @Entity
          public class OrderEntity implements FieldHandled {
          	@Id
          	private long orderNumber;
          	private double total;
          	@OneToMany(mappedBy = "theOrder", cascade = CascadeType.ALL)
          	private Collection<ItemEntity> items;
          
          	public long getOrderNumber() {
          		return orderNumber;
          	}
          
          	public void setOrderNumber(long orderNumber) {
          		this.orderNumber = orderNumber;
          	}
          
          	public double getTotal() {
          		return total;
          	}
          
          	public void setTotal(double total) {
          		this.total = total;
          	}
          
          	public Collection<ItemEntity> getItems() {
          		return items;
          	}
          
          	public void setItems(Collection<ItemEntity> items) {
          		this.items = items;
          	}
          
          	private String getTest(){
          		throw new RuntimeException("don't call this method");
          	}
          
          	private transient FieldHandler handler;
          
          	@Override
          	public void setFieldHandler(FieldHandler handler) {
          		this.handler = handler;
          	}
          
          	@Override
          	public FieldHandler getFieldHandler() {
          		return handler;
          	}
          }
          and update an item in the listgrid. Now you should see plenty of exceptions in the log.

          btw: The hibernate InstrumentTask enhances the Entity to implement org.hibernate.bytecode.internal.javassist.FieldHandled. This can also happen at runtime if Hibernate Returns a Proxy (these Proxies also implements FieldHandled).
          This is the source of the Interface FieldHandled:

          Code:
          public interface FieldHandled {
          	public void setFieldHandler(FieldHandler handler);
          	public FieldHandler getFieldHandler();
          }
          So as you can see, an enhanced class has a getter to return a FieldHandler. The implementation of this FieldHandler has references to hibernates SessionFactory. An because smartgwt is trying to access (and perhaps serialize) every getter, it tries to access also the SessionFactory and all its members. This looks like a bug.

          Comment


            #6
            We don't really think of this as our bug - java assist is inserting new public bean properties into the bean, which makes it no longer really a POJO at runtime (one of the main goals of modern ORM), and this will break any introspection-based system, including other serializers like XStream and many other UI frameworks.

            Nevertheless we're implementing some workarounds to automatically ignore these inserted fields.

            Comment


              #7
              But why is smartgwt calling such methods? Especially if I declared dropExtraFields=true in the order.ds.xml.

              Comment


                #8
                Then it should be ignored in that case (and our tests show that it is). Your code above doesn't show it, but are you actually setting autoDeriveShema="true"? That would mean you have a field definition for anything that can be discovered via introspection.

                Comment


                  #9
                  Originally posted by Isomorphic View Post
                  ... but are you actually setting autoDeriveShema="true"?
                  No the definition in the code above is complete, I left nothing out.
                  For loading the orders via fetch all the extraFields are dropped as expected.
                  The place where the extraFields are not dropped is here:

                  Code:
                  DSResponse updateResponse = new DSResponse(DataSource.forName("order", null), order);
                  updateResponse.setOperationType(DataSource.OP_UPDATE);
                  response.addRelatedUpdate(updateResponse);

                  Comment


                    #10
                    Aha, that's a big clue, thanks.

                    We'll fix it both ways; automatically dropping certain known javaAssist extension properties, and making sure dropExtraFields applies to related updates.

                    Comment


                      #11
                      That's perfect! Thank you!

                      Comment


                        #12
                        Originally posted by Isomorphic View Post
                        Aha, that's a big clue, thanks.

                        We'll fix it both ways; automatically dropping certain known javaAssist extension properties, and making sure dropExtraFields applies to related updates.
                        Is there a Timeline for these changes?

                        Comment


                          #13
                          The fix to drop javaAssist extensions went in about a week ago. The dropExtraFields fix for related updates is still pending.

                          Comment


                            #14
                            I can't confirm, that the Java-Assist methods are ignored (with the 3.1d 2012/10/25). I still get the error:
                            Code:
                            === 2012-10-26 10:52:14,102 [70-6] DEBUG DataTools - Bean inspection: invocation of org.hibernate.internal.SessionFactoryImpl$1.getInterceptor() while trying to obtain property 'interceptor' threw an exception: java.lang.IllegalAccessException: Class com.isomorphic.util.DataTools can not access a member of class org.hibernate.internal.SessionFactoryImpl$1 with modifiers "public"
                            	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
                            	at java.lang.reflect.Method.invoke(Method.java:588)
                            	at com.isomorphic.util.DataTools.getProperties(DataTools.java:2717)
                            	at com.isomorphic.util.DataTools.getProperties(DataTools.java:2664)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:701)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:711)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
                            	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1211)
                            	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1162)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:590)
                            	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:1049)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:661)
                            	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1211)
                            	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1162)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:663)
                            	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:599)
                            	at com.isomorphic.js.JSTranslater.toJS(JSTranslater.java:561)
                            	at com.isomorphic.rpc.RPCManager.completeResponse(RPCManager.java:1327)
                            	at com.isomorphic.rpc.RPCManager.send(RPCManager.java:586)
                            	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:173)
                            	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:138)
                            	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:74)
                            	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
                            	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
                            	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
                            	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
                            	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                            	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
                            	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
                            	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
                            	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
                            	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
                            	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
                            	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
                            	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
                            	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
                            	at java.lang.Thread.run(Thread.java:662)
                            with the example I posted before.

                            Comment


                              #15
                              maybe you should simply ignore each getter, whose return type is in the packae org.hibernate.*

                              Comment

                              Working...
                              X