[jboss-user] [JBoss Seam] - ejb3/seam-gwt-remoting/gwt
hartfordd
do-not-reply at jboss.com
Fri Nov 16 11:24:34 EST 2007
I'm trying to expose an existing ejb3 method so many other GWT web applications can access it directly through SEAM remoting.
error
==========
Exception while dispatching incoming RPC call
java.lang.RuntimeException: Type cannot be determined for component
[Component(com.domain.app.gwt.client.QueryGwtService)]. Please ensure that it has a local interface.
at
org.jboss.seam.remoting.gwt.GWTToSeamAdapter.callWebRemoteMethod(GWTT
oSeamAdapter.java:88)
======
EJB3 SIDE:
===========
package com.domain.app.ejb;
@Stateless
//Name is the GWT sych service
@Name("com.domain.app.gwt.client.QueryGwtService")
public class QueryGwt implements QueryGwtLocal {
@WebRemote
public String gwtTest2(){
return "test ok";
}
}
------
package com.domain.app.ejb;
@Local
public interface QueryGwtLocal {
@WebRemote
public String gwtTest2();
}
-----
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<!-- SEAM 2.0 support -->
<interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
<assembly-descriptor>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
</interceptor-binding>
</assembly-descriptor>
</ejb-jar>
-----------
empty seam.properties in the root of the jar.
=============
Is this all you need to do for the EJB3/server side so it can be consumed by may other GWT web applications?
Sample GWT side:
=========
<?xml version="1.0" encoding="UTF-8"?>
<components ....>
<core:init
jndi-pattern="my-ear-app/#{ejbName}/local"
debug="false"/>
<core:manager conversation-timeout="120000"/>
--------
<web-app>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
<servlet-name>Seam Resource Servlet</servlet-name>
<servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
<servlet-mapping>
<servlet-name>Seam Resource Servlet</servlet-name>
<!--DRH modified url-pattern to match how GWT app works -->
<url-pattern>/com.domain.app.gwt.HelloWorld/seam/resource/*</url-pattern>
</servlet-mapping>
</web-app>
-----------
package com.domain.app.gwt.client;
public interface QueryGwtService extends RemoteService{
public String gwtTest2();
}
----------
package com.domain.app.gwt.client;
public interface QueryGwtServiceAsync{
public void gwtTest2(AsyncCallback callback);
}
--------
//sample call to get service
private QueryGwtServiceAsync getService()
{
String endpointURL = GWT.getModuleBaseURL() + "seam/resource/gwt";
QueryGwtServiceAsync svc = (QueryGwtServiceAsync) GWT.create(QueryGwtService.class);
((ServiceDefTarget) svc).setServiceEntryPoint(endpointURL);
return svc;
}
=========
My concern is, the example says to put the GWT Sych interface/service on the EJB3 side, which does not make sense as multiple GWT apps could use it and would need to copy that interface again.
Any pointers please? Thanky,
-D
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4105554#4105554
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4105554
More information about the jboss-user
mailing list