Problemas com Hibernate

32 weergaven
Naar het eerste ongelezen bericht

murilo.misurini

ongelezen,
24 sep 2013, 14:33:2124-09-2013
aan gwt-b...@googlegroups.com
Galera boa tarde,

Estou com problemas na execução do Hibernate, acontece o seguinte:

Possuo três projetos, um que realiza uma busca em um banco pelo Hibernate e gera um arquivo xml, outro que le esse arquivo xml e insere em outro banco também utilizando Hibernate, e o outro que utiliza o GWT RPC para comunicação cliente/servidor, na qual gostaria de realizar uma busca no banco pelo numero do ticket, mas quando vou implementar a busca com Hibernate no Servidor gera um erro. Segue o codigo de implementação do Hibernate:

public String selectTicket(Integer numTicket)
{
Configuration cfg = new AnnotationConfiguration();
    cfg.configure("/src/main/resources/META-INF/persistence.xml");
HibernateServices hibernateServicesImpl = new HibernateServicesImpl();
String dataEntrada = hibernateServicesImpl.buscarTicket(Box.class, numTicket);
//Iterator<Box> i = listabox.iterator();
return dataEntrada.toString();
}

Segue o erro que ocorre:

java.lang.NoClassDefFoundError: br/com/linkc/hibernate/services/HibernateServices
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:368)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:485)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.ClassNotFoundException: br.com.linkc.hibernate.services.HibernateServices
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:215)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 42 more



Já referenciei outro projeto na classpath, adicionei todas as libs, ja retirei o Google App Engine e não mudou nada. Estava funcionando tudo até eu tentar implementar essa parte e também começou a dar erro em outras funções depois que tirei o Google App Engine. Se alguem puder me ajudar ficarei agradecido.

Agradeço desde ja.

Att.

 

Milton Lima

ongelezen,
25 sep 2013, 08:34:3025-09-2013
aan gwt-b...@googlegroups.com
Murilo,

este método esta no pacote server ?

    *public String selectTicket(Integer numTicket)*
    * {*
    * *
    * Configuration cfg = new AnnotationConfiguration();*
    * cfg.configure("/src/main/resources/META-INF/persistence.xml");*
    * *
    * HibernateServices hibernateServicesImpl = new HibernateServicesImpl();*
    * *
    * String dataEntrada = hibernateServicesImpl.buscarTicket(Box.class, 
    numTicket);*
    * *
    * //Iterator<Box> i = listabox.iterator();*
    * *
    * return dataEntrada.toString();*
    * }*
    *
    *

    A principio parecer o seguinte:
    HibernateServices hibernateServicesImpl = new HibernateServicesImpl();*
    HibernateServices é uma interface, não é ???
    As interfaces dos serviços ficam do lado do cliente e vc esta utilizando-a do lado server
    com referencia a uma implementação... da uma verificada nisto aí...
    Espero q ajude !

murilo.misurini

ongelezen,
25 sep 2013, 08:58:5725-09-2013
aan gwt-b...@googlegroups.com
Milton nesse caso a chamada do Hibernate tem que ser pelo lado do cliente então? Pois o HibernateServices está implementado em outro projeto e está como interface mesmo.

murilo.misurini

ongelezen,
25 sep 2013, 09:26:1625-09-2013
aan gwt-b...@googlegroups.com
Retirei o hibernate do servidor e coloquei o metodo do lado do cliente e fiz a chamada dentro do botão, porém o erro continua, não consegue encontrar o HibernateServices


Em terça-feira, 24 de setembro de 2013 15h33min21s UTC-3, murilo.misurini escreveu:

Vagner Araujo

ongelezen,
26 sep 2013, 07:07:4826-09-2013
aan gwt-b...@googlegroups.com
Então,

vamos ver se entendi... você tem 3 projetos, A, B e C, o projeto A faz uma consulta em DB y e gera um arquivo xml, o projeto B pega essa arquivo gerado e grava em DB x, em seguida vem o projeto C, uma aplicação que usa alguma coisa do projeto A e/ou B para desenvolver a tarefa... é isso ?

Veja bem, as classes de serviço com exceção da que tem o sufixo Async devem ficar tanto no cliente como no servidor, por isso usa-se a nomenclatura de pacote shared, para indicar as classes que serão compartilhadas pelo cliente e pelo servidor, embora o nome do pacote possa ser qualquer um... enfim, como você disse que você usa as classes de serviço de um outro projeto... você precisa ter a certeza de ter colocado a pasta src desse projeto no classpath da classe que executa o DevMode e da classe que executa a classe Compiler ambas do projeto C.

--
Vagner Araujo

Orsic.org

murilo.misurini

ongelezen,
26 sep 2013, 07:40:2326-09-2013
aan gwt-b...@googlegroups.com
Ja está referenciado o projeto na classpath. Mas por eu ter colocado o metodo somente do lado do cliente nao era para dar erro de comunicação ou estou enganado? O correto nesse caso seria colocar no shared então? Só não consigo entender porque continua ocorrendo esse erro como se nao tivesse na classpath.


Em terça-feira, 24 de setembro de 2013 15h33min21s UTC-3, murilo.misurini escreveu:

Vagner Araujo

ongelezen,
26 sep 2013, 08:00:3626-09-2013
aan gwt-b...@googlegroups.com
Então,

note que não é o projeto... e sim a pasta SRC do projeto..... essa pasta SRC está no classpath ???

É isso que você tem que ver.

--
Vagner Araujo

Orsic.org

murilo.misurini

ongelezen,
26 sep 2013, 09:35:2826-09-2013
aan gwt-b...@googlegroups.com
Copiei o pacote do outro projeto que contem o HibernateServices e o arquivo persistence.xml, e na classe que contem o metodo que chama o Hibernate eu fiz o import da package, porem ainda ocorre o mesmo erro. Segue o erro que aparece no Development Mode:

[ERROR] [sistemabase] - Line 58: No source code is available for type br.com.linkc.hibernate.services.HibernateServices; did you forget to inherit a required module? [ERROR] [sistemabase] - Line 58: No source code is available for type br.com.linkc.hibernate.services.impl.HibernateServicesImpl; did you forget to inherit a required module? 
 [ERROR] [sistemabase] - Line 60: No source code is available for type br.com.linkc.entity.Box; did you forget to inherit a required module?


Erro que ocorre no browser:

java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:406) at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526) at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NoClassDefFoundError: br/com/linkc/hibernate/services/HibernateServices at br.com.all4one.sistemabase.client.gui.MainGUI.<init>(MainGUI.java:37) at br.com.all4one.sistemabase.client.SistemaBase.onModuleLoad(SistemaBase.java:13) ... 9 more Caused by: java.lang.ClassNotFoundException: br.com.linkc.hibernate.services.HibernateServices at com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1090) at com.google.gwt.dev.shell.CompilingClassLoader.loadClass(CompilingClassLoader.java:1196) at java.lang.ClassLoader.loadClass(Unknown Source) ... 11 more



 

Vagner Araujo

ongelezen,
26 sep 2013, 10:12:0226-09-2013
aan gwt-b...@googlegroups.com
Então,

poderia postar o conteúdo das classes e interfaces do pacote services e do pacote services.impl  ???

Além disso, você adicionou a tag <source path="services"/> em seu módulo *.gwt.xml ???

O ideal seria você postar a estrutura de seu projeto... seria mais fácil de entender como você dividiu as coisas.... e identificar o problema.... :-)

--
Vagner Araujo

Orsic.org

murilo.misurini

ongelezen,
26 sep 2013, 10:26:5226-09-2013
aan gwt-b...@googlegroups.com
Seguem as classes:

Pacote: Hibernate Services

------------------------------------CLASSE HIBERNATESERVICES--------------------------------------

package br.com.linkc.hibernate.services;

import java.util.List;


public interface HibernateServices {

<T> String buscarTicket(Class<T> clazz, Integer numTicket);

}

---------------------------------------------------CLASSE SERVICEFACTORY-------------------------------------

package br.com.linkc.hibernate.services;

import br.com.linkc.hibernate.services.impl.HibernateServicesImpl;

public final class ServiceFactory {

private static HibernateServices hibernateServices = new HibernateServicesImpl();
private ServiceFactory() {
}

public static HibernateServices getHibernateServices() {
return hibernateServices;
}
}

murilo.misurini

ongelezen,
26 sep 2013, 10:31:1926-09-2013
aan gwt-b...@googlegroups.com
Metodo selectTicket que esta dentro de um classe que possui a interface de menu

public String selectTicket(Integer numTicket)
{
//Configuration cfg = new AnnotationConfiguration();
    //cfg.configure("persistence.xml");

murilo.misurini

ongelezen,
26 sep 2013, 10:37:2726-09-2013
aan gwt-b...@googlegroups.com


murilo.misurini

ongelezen,
26 sep 2013, 10:42:4926-09-2013
aan gwt-b...@googlegroups.com
public class HibernateServicesImpl implements HibernateServices{

@Override
public <T> String buscarTicket(Class<T> clazz, Integer numTicket)
{
EntityManager em = EntityManagerUtil.criarEntityManager();
try {
StringBuffer hql = new StringBuffer();
hql.append("SELECT dataEntrada");
hql.append("from " + clazz.getSimpleName());
hql.append(" where ticket = " + numTicket.toString());
return hql.toString();
} finally {
em.close();
}
}
}



 

Vagner Araujo

ongelezen,
27 sep 2013, 04:24:1427-09-2013
aan gwt-b...@googlegroups.com
Então,

você está misturando as coisas... pelo que pude perceber,  essa estrutura de classes que você tentou criar de serviço não é para está do lado cliente, e sim do lado servidor... essa camada que você atribuiu como sendo uma camada de serviço deveria ser de persistência.

De forma simples, em sua camada de serviço você deve invocar o método que se comunicará com o servidor passando o argumento que você precisa para fazer a busca, que no seu caso é um inteiro... do meu ponto de vista você vai precisar reestruturar as coisas por aí.

--
Vagner Araujo

Orsic.org

Murilo

ongelezen,
30 sep 2013, 08:23:0930-09-2013
aan gwt-b...@googlegroups.com
Eu copiei os pacotes do Hibernate que estao em outro projeto, sendo que como sao interfaces eu coloquei o metodo do hibernate dentro da classe da interface de menu do cliente, que no caso da figura e o MenuPrincipal, no lado servidor eu tratei o metodo selectticket sendo que se tudo ocorrer bem retorna um "OK", e nessa mesma classe (Menu Principal) caso retorne o OK do servidor eu chamo o metodo selectticket passando o numero do ticket, esta correto?

Se puderem me explicar detalhadamente o que esta havendo e onde estou errando vai ajudar bastante, pois sou iniciante no GWT e estou apanhando muito dessa ferramenta hehe.


Allen beantwoorden
Auteur beantwoorden
Doorsturen
0 nieuwe berichten