Fala Galera!!
Estou com um problema aqui no mínimo estranho.
Eu tenho aqui uma classe que tem uns métodos que fazem a persistência no banco de dados, através do hibernate.
Acontece q eu comecei a usar agora o RCP (Rich Client Platform) e qdo eu passei essa classe para ser instanciada a partir de uma View do RCP, ela começou a dar pau.
Ela funciona pois eu tenho no mesmo projeto uma tela em Swing q a usa numa boa, mas na minha View, só de eu tentar instancia um objeto desse (HibernateConf hbm = new HibernateConf) dá pau…
Alguém sabe o que pode ser??
Abaixo o código da minha classe.
package teste
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateConf {
//Atributos
private SessionFactory sf;
private Session session;
private Transaction tx;
//Fim atributos
//Métodos
/**
* Método responsável por criar a Session
* PS: Esse método deve ser chamado apenas uma vez na aplicação
*/
public void createSession() {
try{
//SessionFactory deve ser criado uma única vez durante a execução
//da aplicação
sf = new Configuration()
.configure("c:/hibernate.cfg.xml")
.buildSessionFactory();
}catch(HibernateException e1){
e1.printStackTrace();
System.out.println("Erro ao criar Session do Hibernate.");
}
}
/**
* Método responsável por gravar um objeto no banco
* @param Object o: Objeto a ser persistido
* @param int op..: 0 - Inserir
* 1 - Alterar
* @return boolean: True - Sucesso
* False - Falha
*/
public boolean postObj(Object o, int op) {
boolean ret = true;
try {
//Abre sessão
session = sf.openSession();
//Cria transação
tx = session.beginTransaction();
//Realiza persistência
if (op == 0) {
session.save(o);
} else {
session.update(o);
}
//Fecha transação
tx.commit();
//Fecha sessão
session.close();
}catch(HibernateException e1){
e1.printStackTrace();
System.out.println("Erro ao gravar objeto no banco de dados - Erro no processo do Hibernate");
ret = false;
}catch(Exception eGeneric){
eGeneric.printStackTrace();
System.out.println("Erro ao gravar objeto no banco de dados - Erro geral");
ret = false;
}
return ret;
}
/**
* Método responsável por excluir um objeto no banco
* @param
* @return boolean: True - Sucesso
* False - Falha
*/
public boolean deleteObj(Object o) {
boolean ret = true;
return ret;
}
//Fim métodos
}
[quote=riaranha] ela começou a dar pau.
[/quote]
Defina
Acontece como eu comentei, começou a dar problema logo no momento de instancia a classe, coisa q pela minha classe feita em Swing, no mesmo projeto está funccionando.
Pra ser mais específico ainda, nesse comando:
HibernateConf hibernate = new HibernateConf();
Com um step into no debug, o cursor de execução acaba indo para
package org.eclipse.osgi.internal.baseadaptor.ClassLoader, e por ai vai seguindo, principalmente por classes q não se dá para ver o código…ai dando um play pra liberar o break do debug, aparece o erro onde deveria estar a nova view.
O stacktrace é:
java.lang.NoClassDefFoundError: org/hibernate/HibernateException
at rgasoft.sgi_desktop.rcp.View.createPartControl(View.java:79)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:332)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:197)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566)
at org.eclipse.ui.internal.Perspective.showView(Perspective.java:1675)
at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:987)
at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:968)
at org.eclipse.ui.internal.WorkbenchPage$13.run(WorkbenchPage.java:3497)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3494)
at rgasoft.sgi_desktop.rcp.OpenViewAction.run(OpenViewAction.java:30)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:539)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:488)
at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:441)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at rgasoft.sgi_desktop.rcp.Application.run(Application.java:18)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
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 org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
A classe da view com o código acima citado:
public class View extends ViewPart {
public static final String ID = "sgi_desktop.rcp.view";
public static int vai = 0;
public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
top.setLayout(layout);
// top banner
Composite banner = new Composite(top, SWT.NONE);
banner.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL, GridData.VERTICAL_ALIGN_BEGINNING, true, false));
layout = new GridLayout();
layout.marginHeight = 5;
layout.marginWidth = 10;
layout.numColumns = 2;
banner.setLayout(layout);
// setup bold font
Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
Label l = new Label(banner, SWT.WRAP);
l.setText("Subject:");
l.setFont(boldFont);
l = new Label(banner, SWT.WRAP);
l.setText("This is a message about the cool Eclipse RCP!");
l = new Label(banner, SWT.WRAP);
l.setText("From:");
l.setFont(boldFont);
final Link link = new Link(banner, SWT.NONE);
link.setText("<a>nicole@mail.org</a>");
link.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
MessageDialog.openInformation(getSite().getShell(), "Not Implemented", "Imagine the address book or a new message being created now.");
}
});
l = new Label(banner, SWT.WRAP);
l.setText("Date:");
l.setFont(boldFont);
l = new Label(banner, SWT.WRAP);
l.setText("10:34 am");
// message contents
Text text = new Text(top, SWT.MULTI | SWT.WRAP);
text.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+
"- add a top-level menu and toolbar with actions\n"+
"- add keybindings to actions\n" +
"- create views that can't be closed and\n"+
" multiple instances of the same view\n"+
"- perspectives with placeholders for new views\n"+
"- use the default about dialog\n"+
"- create a product definition\n");
text.setLayoutData(new GridData(GridData.FILL_BOTH));
if (vai >= 1) {
//Cria session do Hibernate
HibernateConf hibernate = new HibernateConf();
hibernate.createSession();
} else {
vai++;
}
}
public void setFocus() {
}
}
Os jars necessários para sua aplicação rodar devem ser declarados na aba run-time do arquivo plugin.xml, provavelmente vc tenha declarado via buildpath.
Outra coisa q pode estar ocorrendo é que a classe foi carregada por outro plugin, e com isso a plataforma RCP tenha se perdido, uma vez que para cada plugin é utilizado um classloader.
Espero ter conseguido te ajudar.
Alberto Anderick Jr.