Приветствую! Разрабатываю два плагина (bundle, в рамках eclipse PDE) - backend & frontend. Бэкэнд содержит логику манипуляции БД с помощью openJPA, а фронтэнд реализует RAP-приложение, но проблема заключается в другом, поэтому примеры будут упрощены насколько это возможно. Для примера в бэкэнде пусть лежит класс A: Код | package backend;
public class A { public A() { System.out.println(this.getClass().getCanonicalName() + " instantiated"); } }
|
инстанцируем класс A через Spring / applicationContext.xml : Код | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="dummy" class="backend.A" scope="singleton"> </bean> </beans>
|
затем во фронтэнде: Код | package rap_frontend;
import org.eclipse.rwt.lifecycle.IEntryPoint; /* остальной импорт */ import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext;
import backend.A;
/** RAP application */ public class Application implements IEntryPoint {
public int createUI() { A obj = new A(); // << 1 System.out.println(obj.getClass().getCanonicalName()); // init Manager object via Spring try { ApplicationContext context = new FileSystemXmlApplicationContext(new String[] { "D:/ming/workspaces/rap2-echo-training-2/rap-frontend/src/rap_frontend/applicationContext.xml" });
Object i = context.getBean("dummy"); // << 2 System.out.println(i.getClass()); } catch(Exception e) { e.printStackTrace(); } System.out.println("loaded!"); Display display = PlatformUI.createDisplay(); WorkbenchAdvisor advisor = new ApplicationWorkbenchAdvisor(); return PlatformUI.createAndRunWorkbench( display, advisor ); }
/* skipped */ }
|
В чём заключается проблема... Spring не видит класс A, несмотря на то что компилятор видит (комментарий №1) в точке, где стоит комментарий №2, выбрасывается такое исключение (trace): Код | osgi> Feb 9, 2009 5:51:31 PM org.mortbay.http.HttpServer doStart INFO: Version Jetty/5.1.x Feb 9, 2009 5:51:31 PM org.mortbay.util.Container start INFO: Started org.eclipse.equinox.http.jetty.internal.Servlet25Handler@1deeb40 Feb 9, 2009 5:51:31 PM org.mortbay.util.Container start INFO: Started HttpContext[/,/] Feb 9, 2009 5:51:31 PM org.mortbay.http.SocketListener start INFO: Started SocketListener on 0.0.0.0:1607 Feb 9, 2009 5:51:31 PM org.mortbay.util.Container start INFO: Started org.mortbay.http.HttpServer@4a6cbf backend.A instantiated backend.A Feb 9, 2009 5:51:34 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@17e845a: display name [org.springframework.context.support.FileSystemXmlApplicationContext@17e845a]; startup date [Mon Feb 09 17:51:34 NOVT 2009]; root of context hierarchy Feb 9, 2009 5:51:34 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from file [D:\ming\workspaces\rap2-echo-training-2\rap-frontend\src\rap_frontend\applicationContext.xml] Feb 9, 2009 5:51:34 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory INFO: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@17e845a]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1014e21 Feb 9, 2009 5:51:34 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1014e21: defining beans [dummy]; root of factory hierarchy Feb 9, 2009 5:51:34 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1014e21: defining beans [dummy]; root of factory hierarchy org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [backend.A] for bean with name 'dummy' defined in file [D:\ming\workspaces\rap2-echo-training-2\rap-frontend\src\rap_frontend\applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: backend.A at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:758) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:422) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140) at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:94) at rap_frontend.Application.createUI(Application.java:35) at org.eclipse.rwt.internal.lifecycle.EntryPointManager.createUI(EntryPointManager.java:92) at org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:228) at org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:116) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: backend.A 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 sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129) at java.lang.ClassLoader.loadClass(Unknown Source) at org.springframework.util.ClassUtils.forName(ClassUtils.java:211) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138) ... 13 more loaded! !SESSION 2009-02-09 17:51:30.345 ----------------------------------------------- eclipse.buildId=unknown java.version=1.6.0_07 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US Command-line arguments: -dev file:D:/ming/workspaces/rap2-echo-training-2/.metadata/.plugins/org.eclipse.pde.core/rap-frontend/dev.properties -os win32 -ws win32 -arch x86 -console -consolelog
|
Импорт/Экспорт: backend / MANIFEST.MF Код | Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Backend Plug-in Bundle-SymbolicName: backend;singleton:=true Bundle-Version: 1.0.0 Bundle-ClassPath: ., bin/ Export-Package: backend Bundle-ActivationPolicy: lazy
|
frontend / MANIFEST.MF Код | Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Rap_frontend Plug-in Bundle-SymbolicName: rap_frontend; singleton:=true Bundle-Version: 1.0.0 Bundle-Activator: rap_frontend.Activator Require-Bundle: org.eclipse.rap.ui, backend;bundle-version="1.0.0", libs;bundle-version="1.0.0" // << из этого "общего" плагина libs берётся сам Spring и другие необходимые пакеты Bundle-ActivationPolicy: lazy Import-Package: backend Bundle-ClassPath: bin/, .
|
На Spring смотрю как кот на сметану, но пока пристально не разбирался и никак не могу осмыслить в чём проблема Подмогите пожалуйста Это сообщение отредактировал(а) ming - 9.2.2009, 15:01
|