В настоящее время я переношу класс обслуживания JBoss из AS5.1 в AS6 (по разным причинам не собираюсь в AS7).
Для AS5.1 служба реализует MBean {serviceName} и имеет jboss-service.xml со значениями атрибутов.Он упакован в jboss-sar, который упакован в EAR для развертывания.При развертывании поля службы заполняются значениями из jboss-service.xml, и служба автоматически регистрируется в JMX.
Я хотел бы добиться того же, используя AS6, но хотел бы, чтобы службаподдержка CDI - так что я бы хотел, чтобы новые точки ввода @Inject были удовлетворены.Мне нужно, чтобы они были удовлетворены в объекте, зарегистрированном в JMX, чтобы методы, вызываемые через JMX, могли ссылаться на введенные поля, но я изо всех сил пытаюсь достичь этого.
Мне пришлось упаковать службу в банкувместо jboss-sar по причинам загрузчика классов, но допустим, что в остальном он не изменился.При развертывании в AS6 все работает как прежде - служба переходит в JMX, значения из XML распространяются на объект.Однако созданный экземпляр не имеет своих точек ввода CDI и объекта, зарегистрированного в JMX.
Если я аннотирую класс обслуживания с помощью @Startup и @ javax.ejb.Singleton, но сохраню его интерфейси jboss-service.xml, объект, зарегистрированный в JMX, все еще не имеет своих точек ввода CDI.Однако, если я программно отменил регистрацию этого bean-компонента и заново зарегистрировал экземпляр в методе @PostConstruct, то bean-компонент в JMX ДОЛЖЕН иметь свои точки внедрения.Однако этот компонент больше не имеет значений, указанных в jboss-service.xml.
Итак, как я могу получить лучшее из обоих миров?CDI и обычное поведение сервиса JBoss?Как правильно реализовать сервис JBoss с CDI?Я не смог найти документацию по этому вопросу.Надеюсь, что кто-то может помочь.
Спасибо,
Бен