简体   繁体   English

EMF与处女座合作

[英]EMF working with Virgo

I'm trying to use EMF in a Virgo container. 我正在尝试在处女座容器中使用EMF。 In my POM I added the following dependencies: 在我的POM中,添加了以下依赖项:

<dependency>
    <groupId>org.eclipse.emf</groupId>
    <artifactId>org.eclipse.emf.ecore</artifactId>
    <version>2.8.0-v20120911-0500</version>
</dependency>
<dependency>
    <groupId>org.eclipse.emf</groupId>
    <artifactId>org.eclipse.emf.common</artifactId>
    <version>2.8.0-v20120911-0500</version>
</dependency>
<dependency>
    <groupId>org.eclipse.core</groupId>
    <artifactId>org.eclipse.core.runtime</artifactId>
    <version>3.6.0.v20100505</version>
</dependency>

Although when I start my Server I get the following exception: 虽然启动服务器时出现以下异常:

[2013-04-29 15:29:56.880]  TCP Connection(6)-127.0.0.1 <DE0002E> Installation of bundle 'xxx' version '0.0.1' failed. org.eclipse.virgo.nano.deployer.api.core.DeploymentException: commit failed
    at org.eclipse.virgo.kernel.install.pipeline.stage.resolve.internal.CommitStage.process(CommitStage.java:40)
    at org.eclipse.virgo.kernel.install.pipeline.internal.StandardPipeline.doProcessGraph(StandardPipeline.java:62)
    at org.eclipse.virgo.kernel.install.pipeline.internal.CompensatingPipeline.doProcessGraph(CompensatingPipeline.java:73)
    at org.eclipse.virgo.kernel.install.pipeline.stage.AbstractPipelineStage.process(AbstractPipelineStage.java:41)
    at org.eclipse.virgo.kernel.install.pipeline.internal.StandardPipeline.doProcessGraph(StandardPipeline.java:62)
    at org.eclipse.virgo.kernel.install.pipeline.stage.AbstractPipelineStage.process(AbstractPipelineStage.java:41)
    at org.eclipse.virgo.kernel.deployer.core.internal.PipelinedApplicationDeployer.driveInstallPipeline(PipelinedApplicationDeployer.java:359)
    at org.eclipse.virgo.kernel.deployer.core.internal.PipelinedApplicationDeployer.doInstall(PipelinedApplicationDeployer.java:185)
    at org.eclipse.virgo.kernel.deployer.core.internal.PipelinedApplicationDeployer.install(PipelinedApplicationDeployer.java:140)
    at org.eclipse.virgo.kernel.deployer.core.internal.PipelinedApplicationDeployer.deploy(PipelinedApplicationDeployer.java:253)
    at org.eclipse.virgo.kernel.deployer.management.StandardDeployer.deploy(StandardDeployer.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:167)
    at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:96)
    at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:33)
    at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
    at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
    at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:264)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:762)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1454)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:74)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1295)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1387)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:818)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)
Caused by: org.osgi.framework.BundleException: Failed to start bundle 'org.eclipse.emf.ecore' version '2.8.0.v20120606-0717'
    at org.eclipse.virgo.kernel.userregion.internal.quasi.StandardQuasiFramework.startBundle(StandardQuasiFramework.java:386)
    at org.eclipse.virgo.kernel.userregion.internal.quasi.StandardQuasiFramework.startBundles(StandardQuasiFramework.java:376)
    at org.eclipse.virgo.kernel.userregion.internal.quasi.StandardQuasiFramework.commit(StandardQuasiFramework.java:365)
    at org.eclipse.virgo.kernel.install.pipeline.stage.resolve.internal.CommitStage.process(CommitStage.java:38)
    ... 41 common frames omitted
Caused by: org.osgi.framework.BundleException: Exception in org.eclipse.emf.ecore.plugin.EcorePlugin$Implementation.start() of bundle org.eclipse.emf.ecore.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:292)
    at org.eclipse.virgo.kernel.userregion.internal.quasi.StandardQuasiFramework.startBundle(StandardQuasiFramework.java:384)
    ... 44 common frames omitted
Caused by: java.lang.NullPointerException: null
    at org.eclipse.emf.ecore.plugin.RegistryReader.readRegistry(RegistryReader.java:81)
    at org.eclipse.emf.ecore.plugin.EcorePlugin$Implementation.start(EcorePlugin.java:557)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
    ... 49 common frames omitted

And I have the feeling the Activator is trying to do something assuming an Eclipse plugin environment while there isn't one. 而且我感觉到Activator尝试在没有Eclipse插件环境的情况下尝试做某事。 Has anyone used EMF successfully in a Virgo bundle? 有人在处女座捆绑中成功使用了EMF吗? Thanks! 谢谢!

You are right because EMF think is running in a Eclipse environment. 您说对了,因为EMF认为正在Eclipse环境中运行。 We have integrate EMF with Virgo following the next steps: 我们已按照以下步骤将EMF与Virgo集成:

  1. Create a bundle wrapper with a folder named lib and put into this folder the EMF jars. 使用名为lib的文件夹创建一个捆绑包装,然后将EMF罐子放入该文件夹中。 In our case, we put the libraries: org.eclipse.emf.common-2.7.0.v20110128-1409.jar, org.eclipse.emf.ecore-2.7.0.v20110128-1409.jar and org.eclipse.emf.ecore.xmi-2.6.0.v20110126-1727.jar 在本例中,我们将库放在:org.eclipse.emf.common-2.7.0.v20110128-1409.jar,org.eclipse.emf.ecore-2.7.0.v20110128-1409.jar和org.eclipse.emf .ecore.xmi-2.6.0.v20110126-1727.jar
  2. Add these libraries in your bundle classpath in MANIFEST.MF 将这些库添加到MANIFEST.MF的包类路径中
  3. Re-export the EMF packages in your MANIFEST.MF 在您的MANIFEST.MF中重新导出EMF软件包
  4. Create an Activator class and set the registry. 创建一个Activator类并设置注册表。 The code is: 代码是:

     @Override public void start(BundleContext arg0) throws Exception { Properties props = System.getProperties(); props.setProperty("org.eclipse.emf.ecore.EPackage.Registry.INSTANCE", "org.eclipse.emf.ecore.impl.EPackageRegistryImpl"); } @Override public void stop(BundleContext arg0) throws Exception { Properties props = System.getProperties(); props.remove("org.eclipse.emf.ecore.impl.EPackageRegistryImpl"); } 

Finally, the MANIFEST.MF would be something like that: 最后,MANIFEST.MF将如下所示:

Manifest-Version: 1.0
Bundle-Version: 2.7.0
Bundle-Name: EMF-Wrapper
Bundle-ManifestVersion: 2
Bundle-SymbolicName: emf-wrapper
Bundle-ClassPath: .,
 lib/org.eclipse.emf.common-2.7.0.v20110128-1409.jar,
 lib/org.eclipse.emf.ecore-2.7.0.v20110128-1409.jar,
 lib/org.eclipse.emf.ecore.xmi-2.6.0.v20110126-1727.jar
Export-Package: your.activator.package,
 org.eclipse.emf.common;version="2.7.0.v20110128-1409",
 org.eclipse.emf.common.archive;version="2.7.0.v20110128-1409",
 org.eclipse.emf.common.notify;version="2.7.0.v20110128-1409",
 org.eclipse.emf.common.notify.impl;version="2.7.0.v20110128-1409",
 org.eclipse.emf.common.util;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.impl;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.plugin;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.resource;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.resource.impl;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.util;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.xmi;version="2.6.0.v20110126-1727",
 org.eclipse.emf.ecore.xmi.impl;version="2.6.0.v20110126-1727",
 org.eclipse.emf.ecore.xmi.util;version="2.6.0.v20110126-1727",
 org.eclipse.emf.ecore.xml.namespace;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.xml.type;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.xml.type.internal;version="2.7.0.v20110128-1409",
 org.eclipse.emf.ecore.xml.type.util;version="2.7.0.v20110128-1409"
Bundle-Activator: your.activator.package.Activator
Import-Package: org.osgi.framework;version="[1.7.0,1.7.0]"

Following the above inspiration I created this wrapper which does the job. 遵循以上灵感,我创建了完成此任务的包装器。 Note that I am not including a copy of the EMF libs but just bringing them in through a maven dependency. 请注意,我没有提供EMF库的副本,而只是通过Maven依赖关系将它们引入。

https://github.com/tarelli/emfwrapper https://github.com/tarelli/emfwrapper

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM