Аннотация @Resource впервые появилась в спецификации Java EE 5 . Когда вы аннотируете атрибут с помощью @Resource , он будет контейнером, ответственным за внедрение запрошенного ресурса. Типичный пример используется с классом DataSource .
import javax.annotation.Resource; @Resource(name = "myDataSource") private DataSource movieDatabase;
Это здорово, и вы можете использовать его и с
JMS , но что происходит с
базами данных NoSQL , разве не было бы идеально сделать что-то подобное для них?
С
Apache TomEE вы можете сделать это, предоставив свой собственный
класс провайдера @Resource . В этом посте мы увидим, как вы пишете свой собственный провайдер для
MongoDB, чтобы вы также могли использовать
@Resource для
MongoDB .
Первое, что нужно сделать, это создать класс провайдера, который является простым
POJO :
import java.net.UnknownHostException; import com.mongodb.MongoClient; public class MongoProvider { private String address; private int port; public MongoClient mongoClient() throws UnknownHostException { return new MongoClient(address, port); } public void setAddress(String address) { this.address = address; } public void setPort(int port) { this.port = port; } }
Это простой
POJO с методом, который возвращает
класс MongoClient (базовый класс для драйвера Java
MongoDB ) и установщики с необходимыми параметрами.
Следующим шагом является создание файла с именем
resources.xml в
каталоге WEB-INF . В этом файле мы настраиваем
TomEE, чтобы он знал о провайдере / классе.
<resources> <Resource id="mongo" class-name="com.lordofthejars.tomee.jpa.MongoProvider"> address localhost port 27017 </Resource> </resources>
Обратите внимание, что в этом файле вы устанавливаете класс провайдера и как задаются атрибуты. Фактически вы устанавливаете их более или менее как файл свойств. Поэтому, когда вы пишете
адрес 127.0.0.1 ,
TomEE под прикрытием вызовет
provider.setAddress («127.0.0.1») .
Последнее, что нужно сделать, это начать использовать
аннотацию @Resource с
MongoDB .
@Resource(name = "mongo") private MongoProvider mongo; public void createBookInMongo(Book book) throws Exception { MongoClient mongoClient = mongo.mongoClient(); }
Таким образом, в этом случае мы создаем
поставщика MongoClient , потому что
TomEE не требует конструктора параметров, но у
MongoClient есть параметры, поэтому нам нужно создать класс поставщика с методом, который возвращает
используемый экземпляр MongoClient .
И что действительно удивительно в
TomEE, так это то, что вы можете даже переопределить
определения @Resource из системных свойств, так что вы можете сделать что-то вроде:
-Dmongo.address = локальный
где mongo — это
идентификатор файла ресурсов и адрес имени
поля .
Таким образом, вы можете легко изменить каждое значение в зависимости от среды, в которой вы работаете. И это потрясающая вещь.
Так что теперь нет никаких оправданий, чтобы не начинать рассматривать
базы данных NoSQL, такие как
базы данных SQL, с точки зрения
Java EE .
[Обновление] Ромен, обратите внимание, что в последней версии Apache TomEE вам не нужен конструктор по умолчанию, параметры напрямую связаны со свойствами как параметры конструктора
Мы продолжаем учиться,
Алекс.