I have a problem of inheritance and generics in the RequestContext and
could not solve it. Based on the documentation of this site: 'http://
www.aceevo.com/requestcontext-inheritance-coming-to-client-in-gwt-2-4/'
in version 2.4 of GWT is already permitted to use generics in
interfaces mapping service.
Only after following the documentation and after several tests I could
not use inheritance and generics. The compilation is successful, the
problem is when I call eg the Save method that receives the type 'T'
that is generic, so it is done the method call is released this
exception: "In RequestContext for operation 21ta4sO_AJ6TM $
y1q6TcANUXPyQ = ".
What I did to solve the problem is to create a RequestContext that
implements the service of the object that I'm persisting with all
methods that are generic, but tipando attributes and returns the proxy
that handles the service.
Would anyone explain to me how do I use a generic interface with the
RequestContext?
Below follows the generic classes and interfaces that you may have a
vision of how implemented and accepted suggestions on how to implement
too.
Interface Generics:
package br.com.lri.shared.server;
import java.util.List;
import br.com.lri.business.BusinessBO;
import br.com.lri.server.BeanLocator;
import br.com.tbm.framework.business.TransactionException;
import com.google.web.bindery.requestfactory.shared.EntityProxy;
import com.google.web.bindery.requestfactory.shared.Request;
import com.google.web.bindery.requestfactory.shared.RequestContext;
import com.google.web.bindery.requestfactory.shared.Service;
/**
* @author Thiago
*
*/
@Service( value = BusinessBO.class, locator = BeanLocator.class )
public interface ServiceRequestContext< T extends EntityProxy >
extends RequestContext {
/**
* Metódo responsável por buscar o objeto por id.
*
* @param <T>
*
* @param id
* parametro {@link Long} que é o id do objeto que será
* pesquisado.
* @return O tipo da classe que é passada para o objeto.
*/
Request< T > buscarPorId( Long id );
/**
* Método responsável por buscar o objeto através dos filtros do
próprio
* objeto.
*
* @param object
* parametro {@link Object} que é filtro da consulta.
* @return O tipo da classe que é passada para o objeto.
*/
Request< T > buscarPorObject( T object );
/**
* Método responsável por buscar todos os objetos.
*
* @return {@link List}<T> lista de de objetos do tipo da classe.
*/
Request< List< T >> buscarTodos();
/**
* Método responsável por buscar todos todos os objetos através do
filtros
* do próprio objeto.
*
* @param object
* parametro {@link Object} que é o filtro da consulta.
* @return {@link List}<T> lista de de objetos do tipo da classe.
*/
Request< List< T >> buscarTodosPorObject( T object );
/**
* Método responsável por salvar ou alterar o objeto no banco de
dados.
*
* @param domain
* paramentro {@link Object} que será persistido no
banco.
* @return O tipo da classe que é passada para o objeto.
* @throws TransactionException
*/
Request< T > salvar( T domain );
/**
* Método responsável por excluir o objeto do banco de dados.
*
* @param domain
* paramentro {@link Object} que é o dominio a ser
excluido.
* @return {@link Boolean}
* @throws TransactionException
*/
Request< Boolean > excluir( T domain );
}
@Service( value = PaisBOImpl.class, locator = BeanLocator.class )
public interface PaisBOImplServiceRequest extends
ServiceRequestContext<PaisProxy>{}
Class and Interfaces side backbean:
package br.com.lri.business;
import java.util.List;
import javax.ejb.EJB;
import br.com.lri.persistence.impl.BusinessDAOImpl;
import br.com.tbm.framework.business.TransactionException;
import br.com.tbm.framework.business.ValidationException;
/**
* @author Thiago
*
*/
public interface Business< T > {
/**
* Metódo responsável por buscar o objeto por id.
*
* @param id
* parametro {@link Long} que é o id do objeto que será
* pesquisado.
* @return O tipo da classe que é passada para o objeto.
*/
T buscarPorId( Long id );
/**
* Método responsável por buscar o objeto através dos filtros do
próprio
* objeto.
*
* @param object
* parametro {@link Object} que é filtro da consulta.
* @return O tipo da classe que é passada para o objeto.
*/
T buscarPorObject( T object );
/**
* Método responsável por buscar todos os objetos.
*
* @return {@link List}<T> lista de de objetos do tipo da classe.
*/
List< T > buscarTodos();
/**
* Método responsável por buscar todos todos os objetos através do
filtros
* do próprio objeto.
*
* @param object
* parametro {@link Object} que é o filtro da consulta.
* @return {@link List}<T> lista de de objetos do tipo da classe.
*/
List< T > buscarTodosPorObject( T object );
/**
* Método responsável por realizar as validações antes de salvar o
objeto no
* banco.
*
* @throws ValidationException
*/
void antesSalvar() throws ValidationException;
/**
* Método responsável por realizar ações após salvar o objeto no
banco.
*
* @throws ValidationException
*/
void depoisSalvar() throws ValidationException;
/**
* @throws ValidationException
*/
void antesExcluir() throws ValidationException;
/**
* Método responsável por verificar se o objeito foi excluido do
banco e
* realizar outras ações após a exclusão.
*
* @param domain
* paramentro {@link Object} que é o dominio da
exclusão.
* @return {@link Boolean} verdadeiro quando o objeto for
excluido.
* @throws ValidationException
*/
Boolean depoisExcluir( T domain ) throws ValidationException;
/**
* Método responsável por salvar ou alterar o objeto no banco de
dados.
*
* @param domain
* paramentro {@link Object} que será persistido no
banco.
* @return O tipo da classe que é passada para o objeto.
* @throws TransactionException
*/
T salvar( T domain ) throws TransactionException;
/**
* Método responsável por excluir o objeto do banco de dados.
*
* @param domain
* paramentro {@link Object} que é o dominio a ser
excluido.
* @return {@link Boolean}
* @throws TransactionException
*/
Boolean excluir( T domain ) throws TransactionException;
/**
* Método responsável por retornar o {@link EJB} de acesso ao
banco.
*
* @return {@link BusinessDAOImpl}
*/
BusinessDAOImpl getBusinessDAOImpl();
}
package br.com.lri.business;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateless;
import br.com.lri.persistence.impl.BusinessDAOImpl;
import br.com.tbm.framework.business.TransactionException;
import br.com.tbm.framework.business.ValidationException;
/**
* @author Thiago
*
*/
@Stateless
public class BusinessBO< T > implements Business< T >, Serializable {
private static final long serialVersionUID =
-1782467852719269251L;
/**
* @see br.com.lri.business.Business#buscarPorId(java.lang.Long)
*/
@Override
public T buscarPorId( Long id ) {
return null;
}
/**
* @see
br.com.lri.business.Business#buscarPorObject(java.lang.Object)
*/
@Override
public T buscarPorObject( T object ) {
return null;
}
/**
* @see br.com.lri.business.Business#buscarTodos()
*/
@Override
public List< T > buscarTodos() {
return null;
}
/**
* @see
br.com.lri.business.Business#buscarTodosPorObject(java.lang.Object)
*/
@Override
public List< T > buscarTodosPorObject( T object ) {
return null;
}
/**
* @see br.com.lri.business.Business#antesSalvar()
*/
@Override
public void antesSalvar() throws ValidationException {
}
/**
* @see br.com.lri.business.Business#depoisSalvar()
*/
@Override
public void depoisSalvar() throws ValidationException {
}
/**
* @see br.com.lri.business.Business#antesExcluir()
*/
@Override
public void antesExcluir() throws ValidationException {
}
/**
* @see
br.com.lri.business.Business#depoisExcluir(java.lang.Object)
*/
@Override
public Boolean depoisExcluir( T domain ) throws
ValidationException {
return null;
}
/**
* @see br.com.lri.business.Business#salvar(java.lang.Object)
*/
@Override
@SuppressWarnings( "unchecked" )
public T salvar( T domain ) throws TransactionException {
try {
antesSalvar();
T returns = (T)
getBusinessDAOImpl().saveOrUpdate( domain );
depoisSalvar();
return returns;
}
catch ( Exception e ) {
throw new TransactionException( e );
}
}
/**
* @see br.com.lri.business.Business#excluir(java.lang.Object)
*/
@Override
@SuppressWarnings( "unchecked" )
public Boolean excluir( T domain ) throws TransactionException {
try {
antesExcluir();
getBusinessDAOImpl().delete( domain );
return depoisExcluir( domain );
}
catch ( Exception e ) {
throw new TransactionException( e );
}
}
/**
* @see br.com.lri.business.Business#getBusinessDAOImpl()
*/
@Override
public BusinessDAOImpl getBusinessDAOImpl() {
return null;
}
}
package br.com.lri.business.impl;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import br.com.lri.business.BusinessBO;
import br.com.lri.domain.enderecos.Pais;
import br.com.lri.persistence.impl.BusinessDAOImpl;
import br.com.tbm.framework.business.TransactionException;
import br.com.tbm.framework.business.ValidationException;
import br.com.tbm.framework.persistence.PersistenceException;
import br.com.tbm.framework.persistence.Sort;
/**
* @author Thiago
*
*/
@Stateless
public class PaisBOImpl extends BusinessBO< Pais > {
private static final long serialVersionUID = 2165217381632483592L;
@EJB
private BusinessDAOImpl businessDAOImpl;
/**
* @see br.com.lri.business.BusinessBO#buscarPorId(java.lang.Long)
*/
@Override
@SuppressWarnings( "unchecked" )
public Pais buscarPorId( Long id ) {
try {
return (Pais) businessDAOImpl.findById( Pais.class, id,
new String[] { "" } );
}
catch ( PersistenceException e ) {
e.printStackTrace();
return null;
}
}
/**
* @see
br.com.lri.business.BusinessBO#buscarPorObject(java.lang.Object)
*/
@Override
@SuppressWarnings( "unchecked" )
public Pais buscarPorObject( Pais object ) {
try {
return (Pais) businessDAOImpl.findByExample(
object,
null,
Sort.ASC( new String[] { "nmPais" } ),
new String[] { "" } ).get( 0 );
}
catch ( PersistenceException e ) {
e.printStackTrace();
return null;
}
}
/**
* @see br.com.lri.business.BusinessBO#buscarTodos()
*/
@Override
@SuppressWarnings( "unchecked" )
public List< Pais > buscarTodos() {
try {
return businessDAOImpl.findAll( Pais.class );
}
catch ( PersistenceException e ) {
e.printStackTrace();
return null;
}
}
/**
* @see
br.com.lri.business.BusinessBO#buscarPorObject(java.lang.Object)
*/
@Override
@SuppressWarnings( "unchecked" )
public List< Pais > buscarTodosPorObject( Pais object ) {
try {
return businessDAOImpl.findByExample(
object,
null,
Sort.ASC( new String[] { "nmPais" } ),
new String[] { "" } );
}
catch ( PersistenceException e ) {
e.printStackTrace();
return null;
}
}
/**
* @see br.com.lri.business.BusinessBO#antesSalvar()
*/
@Override
public void antesSalvar() throws ValidationException {
}
/**
* @param domain
* @return
* @throws TransactionException
*/
@Override
public Pais salvar( Pais domain ) throws TransactionException {
return super.salvar( domain );
}
/**
* @see br.com.lri.business.BusinessBO#depoisSalvar()
*/
@Override
public void depoisSalvar() throws ValidationException {
}
/**
* @see br.com.lri.business.BusinessBO#antesExcluir()
*/
@Override
public void antesExcluir() throws ValidationException {
}
/**
* @see
br.com.lri.business.BusinessBO#depoisExcluir(java.lang.Object)
*/
@Override
public Boolean depoisExcluir( Pais domain ) throws
ValidationException {
return null;
}
/**
* @see br.com.lri.business.BusinessBO#getBusinessDAOImpl()
*/
@Override
public BusinessDAOImpl getBusinessDAOImpl() {
return this.businessDAOImpl;
}
}
I thank everyone's help.
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.