2015-08-13 3 views
2

Я обновляю приложение с Java7 на Glassfish 3.1.2.2 до Java8 на Glassfish 4.1. Приложение упаковано в виде файла уха, содержащего jar-файл с удаленными EJB и Spring beans, а также военный файл с несколькими сервлетами и некоторыми веб-службами.Glassfish4 + EJB + Spring, deploy failed

Есть только некоторые незначительные изменения, сделанные в практическом применении, по сравнению с тем, как это было с Glassfish 3.x, общие изменения являются:

  • Построенный с Java8 вместо Java7.
  • Развернуты на Glassfish 4.1 вместо 3.1.2.2
  • Новые версии Hibernate
  • Следующая версия ActiveMQ (клиент)

Я не вижу никакой разницы между предыдущим перепонки файл, и новый (за исключением вышеуказанных Lib-банки), но до сих пор, когда я пытаюсь развернуть я получаю ошибки, как это для всех моих EJBs:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type SomethingLogic with qualifiers @Default 
    at injection point [BackedAnnotatedField] @Inject private com.my.application.server.service.SomethingServiceSession.somethingLogic 

Где SomethingService является EJB, SomethingLogic является Spring боб.

Мои EJBs определяются следующим образом:

@Stateless 
@RolesAllowed("secure") 
@Interceptors(SpringBeanAutowiringInterceptor.class) 
public class SomethingServiceSession implements SomethingService { 

    @Inject 
    private SomethingLogic somethingLogic; //Spring bean 

SomethingLogic является интерфейсом.

У меня есть beanRefContext.xml, содержащий:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id="beanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
    <constructor-arg value="classpath*:applicationContext-glassfish.xml"/> 
    </bean> 

</beans> 

В EJB услуги определены в GlassFish-EJB-jar.xml, как это:

<ejb> 
    <ejb-name>SomethingServiceSession</ejb-name> 
    <ior-security-config> 
    <as-context> 
     <auth-method>USERNAME_PASSWORD</auth-method> 
     <realm>AD</realm> 
     <required>true</required> 
    </as-context> 
    </ior-security-config> 
</ejb> 

Я попытался добавления beans.xml со следующим содержимым в папку ресурсов \ META-INF моего EJB-проекта:

<?xml version="1.0"?> 
<beans 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://jboss.org/schema/cdi/beans_1_0.xsd" /> 

Не повезло.

Я также попытался добавить @LocalBean ко всем моим EJB, также не повезло.

Кроме того, я попытался отключить КДИ все вместе, используя эту команду:

asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false 

Это фактически позволяет мои EJB услуги, которые будут развернуты, но я подозревал, что она имеет не столь хорошие стороны эффект моих веб-сервисов не обнаруживается, поэтому я хочу иметь возможность развертывать с включенным CDI, чтобы это исключить.

Update:

Я попытался изменить @Inject с @Autowired во всех моих не-Спринг-обработанных классов (EJBs, веб-сервисы и сервлетов). Теперь я получаю ту же ошибку для реальных весенних бобах. Кажется, Glassfish попытается найти EJB beans при встрече с @Inject, независимо от того, где они происходят.

ответ

2

Исправлена ​​проблема с добавлением bean-discovery-mode="none" в различные файлы beans.xml.

<?xml version="1.0"?> 
    <beans 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://jboss.org/schema/cdi/beans_1_2.xsd" 
    bean-discovery-mode="none" /> 
+0

Сохранено множество неприятностей. Спасибо! – Thomas