2016-02-12 69 views
0

我试图在websphere 8上部署ejb 3的bean。Bean实现位于src/main/java中,ejb-jar.xml位于src/main/resources/META-INF 。 这是包装在一个罐子里,罐子也包含在耳朵里,也有其他ejb罐子与ejb 2.因此,耳朵包含ejb 2和ejb 3罐子。 在这款耳塞在WebSphere的部署,我收到以下错误:Websphere 85 ejb 3部署问题

org.eclipse.emf.common.util.WrappedException:org.xml.sax.SAXParseException:CVC-elt.1:找不到声明元素'ejb-jar'。

如果我从ejb 3 jar中删除ejb-jar.xml,则部署成功。 如果我部署只包含ejb 3 jar的耳朵,它是成功的。 如果我直接从ibm控制台部署ejb 3 jar,它将成功部署。

但试图部署包含ejb 2和ejb 3 jar的耳朵失败。下面是完整的堆栈跟踪:

[echo] Error executing deployment: org.eclipse.emf.common.util.WrappedException. Error is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'.. 
[echo] org.eclipse.emf.common.util.WrappedException: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'. 
[echo]  at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.loadDocument(EMF2DOMRenderer.java:81) 
[echo]  at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.doLoad(EMF2DOMRenderer.java:62) 
[echo]  at org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.basicDoLoad(TranslatorResourceImpl.java:153) 
[echo]  at org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResourceImpl.doLoad(CompatibilityXMIResourceImpl.java:182) 
[echo]  at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1494) 
[echo]  at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1282) 
[echo]  at org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResourceImpl.load(CompatibilityXMIResourceImpl.java:272) 
[echo]  at org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.load(TranslatorResourceImpl.java:423) 
[echo]  at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:255) 
[echo]  at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.demandLoad(ProjectResourceSetImpl.java:815) 
[echo]  at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:270) 
[echo]  at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.getResource(ProjectResourceSetImpl.java:1068) 
[echo]  at org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper.getOrCreateResource(WorkbenchResourceHelper.java:380) 
[echo]  at org.eclipse.wst.common.internal.emfworkbench.integration.EditModel.getResource(EditModel.java:685) 
[echo]  at org.eclipse.wst.common.componentcore.internal.ArtifactEditModel.getResource(ArtifactEditModel.java:199) 
[echo]  at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getDeploymentDescriptorResource(EJBArtifactEdit.java:296) 
[echo]  at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getDeploymentDescriptorRoot(EJBArtifactEdit.java:322) 
[echo]  at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getEJBJar(EJBArtifactEdit.java:306) 
[echo]  at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getEJBClientJarModule(EJBArtifactEdit.java:252) 
[echo]  at org.eclipse.jst.j2ee.ejb.internal.plugin.EjbModuleExtensionImpl.getDefinedEJBClientJARProject(EjbModuleExtensionImpl.java:91) 
[echo]  at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension.runEarDeploy(BatchExtension.java:482) 
[echo]  at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension$RunDeploy.run(BatchExtension.java:356) 
[echo]  at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) 
[echo]  at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) 
[echo]  at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension$RunDeploy.execute(BatchExtension.java:321) 
[echo]  at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension.run(BatchExtension.java:284) 
[echo]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[echo]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
[echo]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
[echo]  at java.lang.reflect.Method.invoke(Method.java:611) 
[echo]  at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587) 
[echo]  at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198) 
[echo]  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
[echo]  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
[echo]  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) 
[echo]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[echo]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
[echo]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
[echo]  at java.lang.reflect.Method.invoke(Method.java:611) 
[echo]  at com.ibm.etools.ejbdeploy.batch.impl.BootLoaderLoader.run(BootLoaderLoader.java:494) 
[echo]  at com.ibm.etools.ejbdeploy.batch.impl.BatchDeploy.execute(BatchDeploy.java:114) 
[echo]  at com.ibm.etools.ejbdeploy.EJBDeploy.execute(EJBDeploy.java:106) 
[echo]  at com.ibm.etools.ejbdeploy.EJBDeploy.deploy(EJBDeploy.java:348) 
[echo]  at com.ibm.etools.ejbdeploy.EJBDeploy.main(EJBDeploy.java:309) 
[echo] Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'. 
[echo]  at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
[echo]  at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source) 
[echo]  at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
[echo]  at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
[echo]  at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source) 
[echo]  at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) 
[echo]  at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) 
[echo]  at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source) 
[echo]  at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) 
[echo]  at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
[echo]  at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
[echo]  at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
[echo]  at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
[echo]  at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) 
[echo]  at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
[echo]  at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 
[echo]  at org.eclipse.wst.common.internal.emf.utilities.DOMUtilities.loadDocument(DOMUtilities.java:554) 
[echo]  at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.loadDocument(EMF2DOMRenderer.java:74) 
[echo]  ... 43 more 
[echo] EJBDeploy level: @[email protected] 

ejb-jar.xml中 <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <description><![CDATA[]]></description> <display-name></display-name> <enterprise-beans> <session id=""> <description><![CDATA[]]></description> <ejb-name></ejb-name> <env-entry> <env-entry-name></env-entry-name> <env-entry-type></env-entry-type> <env-entry-value><![CDATA[]]></env-entry-value> </env-entry>

我相信部署失败,因为耳朵既有EJB 2和EJB 2罐。

有关如何解决此问题的任何建议?

+0

仅仅是明确的,你没有' src/main/java /'或'src/main/resources'在你的耳朵里吗? –

+0

正确。 EJB是用jar包装的。和jar内容如下所示:com /.../.../*。java .. META-INF/ejb-jar.xml –

+0

根据[this](https://community.oracle.com/thread/972695) ?tstart = 0)只要EJB在不同的模块中,Oracle的社区线程就可以混合EJB2.x和EJB3.x。此外,请参考[this](https://docs.jboss.org/ejb3/docs/tutorial/1.0.7/html/EJB2.1_and_EJB3_references.html)JBoss文档来验证你的'ejb-jar.xml' DTD参考。 – aribeiro

回答

1

您的XML标题使用不兼容的xmlnsversion属性。试试这个:

<ejb-jar version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"> 

(您的EJB 2.x的ejb-jar.xml中也可能有不匹配,所以显示也可能有用)

+0

感谢Brett ..以下是ejb 2 ejb-jar.xml: ' > <显示名称> <企业豆> <会话ID =”“> ' –

+0

我改变了命名空间,现在它给下面的例外: '执行错误的部署:org.eclipse.emf.common.util.Wrap pedException。错误是org.xml.sax.SAXParseException:文件过早结束。 org.eclipse.emf.common.util.WrappedException:org.xml.sax.SAXParseException:文件过早结束。 \t在org.eclipse.wst.common.internal.emf.resource.EMF2SAXRenderer.doLoad(EMF2SAXRenderer.java:100) \t在org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.basicDoLoad(TranslatorResourceImpl。 java:153) ' –

+0

忽略以上。我从xml中删除了一些新的行字符并将其部署。非常感谢Brett。 –