2016-09-20 19 views
0

私は、Springを使用してJava 1.8で構築され、TomcatにデプロイされたWebアプリケーションを持っています。 私たちは、EJBを使ってJava 1.4で書かれた第三者のライブラリを持っています。SpringからのEJBクラスへのアクセス

私のアプリケーションは、Spring Webアプリケーションからサードパーティライブラリにあるメソッドにアクセスする必要があります。

これまでのところ、私はこのリンクに従って以下を行っています。私のサーブレットのcontext.xmlで http://docs.spring.io/spring/docs/current/spring-framework-reference/html/ejb.html

、私は

<beans:bean id="myComponent" 
     class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean"> 
     <beans:property name="jndiName" value="jndi/ejb/AssociateSessionEJB"/> 
     <beans:property name="businessInterface" value="com.company.serviceImpl.MyComponent"/> 
    </beans:bean> 

<beans:bean id="loginService" class="com.company.serviceImpl.LoginServiceImpl"> 
     <beans:property name="myComponent" ref="myComponent"/> 
</beans:bean> 

を追加しました私は、私が前にEJBであまり働いていない、次のエラー

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginService' defined in ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]: Cannot resolve reference to bean 'myComponent' while setting bean property 'myComponent'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myComponent' defined in ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name [jndi/ejb/AssociateSessionEJB] is not bound in this Context. Unable to find [jndi]. 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:187) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1208) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1048) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1018) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:570) 
    ... 38 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myComponent' defined in ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name [jndi/ejb/AssociateSessionEJB] is not bound in this Context. Unable to find [jndi]. 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) 
    ... 52 more 

を取得します。私は何が不足しているか教えてください。

答えて

1

理由はここにある:

nested exception is javax.naming.NameNotFoundException: Name [jndi/ejb/AssociateSessionEJB] is not bound in this Context. Unable to find [jndi]. 

あなたがプロパティjndiNameの値として正しいJNDI名を指定する必要があることを解決するために。あなたは、MyComponentというEJBがJNDIで利用可能な正しい名前を見つけなければなりません。

もう1つのことは、EJBを使用するアプリケーションをサーブレット・コンテナであるTomcatにデプロイできないことです。たとえば、 TomEEまたは他のJEEアプリケーションサーバー。

0

あなたが提供したドキュメントで説明されているように、私はPOJOとしてejbクラスを使用する方が簡単だと思います。

<beans:bean id="myComponent" 
      class="com.company.serviceImpl.MyComponent"> 
</beans:bean> 
<beans:bean id="loginService" class="com.company.serviceImpl.LoginServiceImpl"> 
      <beans:property name="myComponent" ref="myComponent"/> 
</beans:bean> 
+0

EJBクラスは第三者であり、私たちはそれを制御できません。 –

+0

EJBはどこにデプロイされていますか? –

+0

EJBはjarファイルとして提供されており、プロジェクトに依存するものとして追加しています。したがって、アプリケーションとともにTomcatサーバーにデプロイされます。 –

0

あなたの春から、これらが利用可能な場合に可能な解決策は、特定のライブラリのリモートインタフェースを使用するために、可能性があり、その後互換性のある容器に「ライブラリ」を展開して実行することができるしている場合アプリケーションは別途実行されます。

関連する問題