2016-04-29 12 views
0

im Moment verwenden wir Spring 4 und eine Lade Java-Klasse haben alle unsere XML-Konfigurationsdateien:Zugang Spring Web Acclication Kontext in Stateless EJB

  • Root: Grundgerüst
  • Kind: Projekt Application Services
  • Kind: Projekt Anwendung Workflow-
  • Child: Rahmen-Controller
  • Child: CXF Webapplikation Kontext

Jedes Kind kennt die Bohnen seiner Eltern und alles funktioniert gut. Jetzt muss ich ein IBM EJB auf einem Websphere Application Server für die Kommunikation mit Legacy-Systemen verwenden. Dieser EJB wird aufgerufen und ich möchte jetzt unseren Spring-Kontext verwenden, um einige Dienste zu erhalten.

Die EJB ist definiert als

@Stateless(mappedName = "ejb/LegacyRocks") 
@RemoteHome(com.ibm.websphere.ola.ExecuteHome.class) 
public class WolaUseCaseOne {...} 

Ich habe alreade über den SpringBeanAutowiringInterceptor zu lesen, aber ich weiß nicht den Punkt. Ich habe keine einfache xml-datei zum laden bekommen, kann mir also jemand anders den autowire mit Spring Beans im EJB anbieten?

PS: Ich habe auch diesen Beitrag (http://www.schakko.de/2013/10/11/sharing-the-spring-application-context-from-a-war-with-ejbs/) gefunden, aber wir verwenden JSF nicht und es hilft mir nicht

Ich habe schon gelesen, gibt es keine Möglichkeit, den vollständigen Kontext zu injizieren, weil wir Haben Sie einen Webapplikationskontext und es gibt keinen solchen Webkontext in EJB ...?

Antwort

0

müssen Sie ejb erstellen, wie

folgende
@Local 
public interface TestManager { 

    boolean isValid(); 

} 

@Stateless(name = "java:global/TestManagerImpl", mappedName = "java:global/TestManagerImpl") 
@EJB(name = "java:global/TestManagerImpl", beanInterface = TestManager.class) 
public class TestManagerImpl implements TestManager { 

    @PostConstruct 
    public void ejbCreate() { 

    } 

    @PreDestroy 
    public void ejbDestroy() { 

    } 

    @Override 
    public boolean isValid(){ 
     //your code 
    } 
} 

und Sie müssen Federserviceklasse mit

@Service(value = "testServiceImpl") 
public class TestServiceImpl { 

    @EJB(name = "java:global/TestManagerImpl", mappedName = "java:global/TestManagerImpl") 
    private TestManager testManager; 

    @Override 
    public boolean isValid(){ 
     retrun testManager.isValid(); 
    } 
} 

Edited

Anruf ejb implementieren springen Service-Methode

@Stateless 
@Interceptors(SpringBeanAutowiringInterceptor.class) 
public class TestManagerImpl implements TestManager { 

    // automatically injected with a matching Spring bean 
    @Autowired 
    private TestService testService ; 

    // for business method, delegate to POJO service impl. 
    public String myFacadeMethod(...) { 
     return testService.myMethod(...); 
    } 

    ... 

} 

Ich hoffe, es funktioniert für Sie!

+0

Hallo Ravi, danke für die schnelle Antwort ... Wie ich den Code sehe, denke ich, dass dies der Weg ist, einen EJB in einen Spring Service zu injizieren, aber ich brauche es umgekehrt: Ich muss den "injizieren" Spring Kontext in die EJB, um einige Dienste zu finden oder einige Bohnen ... autowire ... –

+0

@ timo.gruetter ich habe Update meine Antwort, also bitte überprüfen Sie, dass es seine Arbeit für Sie funktioniert. –