Аннотация @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 вам не нужен конструктор по умолчанию, параметры напрямую связаны со свойствами как параметры конструктора
Мы продолжаем учиться,
Алекс.
