Мне нужно внедрить службу EJB в конечную точку Spring-WS:
@Stateless
public class MeteringPointService {
private static final int LIMIT = 100;
public Integer getResponseStatus() {
return new Random().nextInt(LIMIT);
}
}
@Endpoint
public class CreateMeteringPointEndpoint {
private MeteringPointService meteringPointService;
@PayloadRoot(localPart = "CreateMeteringPointRequest", namespace = "...")
@ResponsePayload
public CreateMeteringPointResponse handleRequest(@RequestPayload CreateMeteringPointRequest request) {
CreateMeteringPointResponse response = new CreateMeteringPointResponse();
Integer status = meteringPointService.getResponseStatus();
response.setResponseStatus(status);
return response;
}
public MeteringPointService getMeteringPointService() {
return meteringPointService;
}
public void setMeteringPointService(MeteringPointService meteringPointService) {
this.meteringPointService = meteringPointService;
}
}
Я пробовал Spring
<jee:local-slsb id="meteringPointService" jndi-name="ejb/meteringPointService"
business-interface="service.impl.MeteringPointService"/>
<bean id="createMeteringPointEndpoint" class="ws.endpoint.CreateMeteringPointEndpoint">
<property name="meteringPointService" ref="meteringPointService"/>
</bean>
Я попробовал @EJB(mappedName="") StackOverflow, Красная шляпа
А также попробовал CDI @Inject из Java EE6 StackOverflow
... но ничего не работает. Можешь мне помочь? Стеклянная рыбка 4.
Я все еще получаю ошибки во время развертывания, например:
remote failure: Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleExc
eption: org.apache.catalina.LifecycleException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [service.impl.MeteringPointService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.facto
ry.annotation.Autowired(required=true)}. Please see server.log for more details.
Command deploy failed.
remote failure: Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleExc
eption: org.apache.catalina.LifecycleException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [service.impl.MeteringPointService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject()}. Please
see server.log for more details.
Command deploy failed.
@Autowire
и@Inject
требуют, чтобы bean-компонент был доступен в контексте. Это явно не так.@Ejb
должен быть в состоянии выполнить поиск, ЕСЛИ вы правильно укажете имя (также убедитесь, что в вашем файле web.xml есть запись для ссылки на EJB). Также что не удалось с поиском пространства имен (<jee:local-slsb />
)? Это должно просто сработать... - person M. Deinum   schedule 05.12.2013java:comp/env
, и это не очень известное место для EJB (если я не ошибаюсь). - person M. Deinum   schedule 05.12.2013jndi-name="java:global/psl-ws-mock2-trunk-SNAPSHOT/MeteringPointServiceImpl"
и теперь это работает. Спасибо - person sasynkamil   schedule 05.12.2013java:module/MeteringPointServiceImpl!your.package.to.interface.MeteringPointService
, если у вас нет интерфейса, замените его на FQCN. См. jaitechwriteups.blogspot.nl/2010/10. / - person M. Deinum   schedule 05.12.2013