JEE6: Что можно ввести с помощью @Resource? - PullRequest
7 голосов
/ 31 августа 2011

Я пытаюсь выяснить, что можно внедрить через аннотацию @Resource в компонент сеанса без состояния.Где бы я найти список?Зависит ли это от контейнера (в моем случае это Glassfish 3.1.1)?

1 Ответ

12 голосов
/ 31 августа 2011

JSR-250 (Общие аннотации для платформы Java) обращается к поведению контейнера во время выполнения при обработке классов с аннотацией @Resource;соответствующий раздел - 2.3, где обсуждается аннотация @Resource.

В общем, любой ресурс, который может присутствовать в дескрипторе развертывания в виде env-entry, service-ref, resource-ref, message-destination-ref или resource-env-ref можно пометить аннотацией @Resource для инъекции.Список определенных типов Java, экземпляры которых могут быть внедрены в поддерживаемые классы, также указан в том же разделе и воспроизводится ниже:

<b>
Java Type                                              Equivalent Resource type
</b>
java.lang.String                                              env-entry
java.lang.Character                                           env-entry
java.lang.Integer                                             env-entry
java.lang.Boolean                                             env-entry
java.lang.Double                                              env-entry
java.lang.Byte                                                env-entry
java.lang.Short                                               env-entry
java.lang.Long                                                env-entry
java.lang.Float                                               env-entry
javax.xml.rpc.Service                                         service-ref
javax.xml.ws.Service                                          service-ref
javax.jws.WebService                                          service-ref
javax.sql.DataSource                                          resource-ref
javax.jms.ConnectionFactory                                   resource-ref
javax.jms.QueueConnectionFactory                              resource-ref
javax.jms.TopicConnectionFactory                              resource-ref
javax.mail.Session                                            resource-ref
java.net.URL                                                  resource-ref
javax.resource.cci.ConnectionFactory                          resource-ref
org.omg.CORBA_2_3.ORB                                         resource-ref
any other connection factory defined by a resource adapter    resource-ref
javax.jms.Queue                                               message-destination-ref
javax.jms.Topic                                               message-destination-ref
javax.resource.cci.InteractionSpec                            resource-env-ref
javax.transaction.UserTransaction                             resource-env-ref
Everything else                                               resource-env-ref

Обратите внимание на последний элемент в таблице - согласно спецификации, любойадминистрируемый объект, связанный с ресурсом, который присутствует в каталоге JNDI, может быть внедрен.

Определенный список таких классов, экземпляры которых должны быть внедрены контейнером, можно получить из главы5 спецификации платформы Java EE 6 .Это не приведено в таблицах ни в какой форме, но, тем не менее, в главе указано, как разработчик приложения должен запросить внедрение какого-либо значительного ресурса.Большинство ресурсов, перечисленных в этой главе, вводятся путем указания аннотации @Resource или другой аннотации, которая явно используется для этого ресурса.

Спецификация EJB 3.1 может повторять содержимое вышеприведенногоупомянутая глава 5 спецификации платформы, для ресурсов, специфичных для контейнера EJB.Соответствующие подробности приведены в главе 16 под названием «Среда Enterprise Bean», а соответствующие подробности представлены в подразделах «Обязанности поставщика компонентов».

Относительно спецификации Servlet 3.0 соответствующие подробности можно найти в Разделе 15.5.4, где обсуждается семантика аннотации @Resource для контейнера сервлета.

...