У меня есть веб-приложение, которое я пытаюсь запустить внутри сервера приложений JBOSS EAP 6. Я пытаюсь внедрить EntityManagerFactory в мой Singleton Bean.@PersistenceUnit EntityManagerFactory не получает инициализацию/все еще null
@Singleton
@Startup
public class RestServerConfigurator {
private static RestServerConfigurator instance;
@PersistenceUnit(unitName = "clinicalTrialsEntityManager")
private EntityManagerFactory emf;
public RestServerConfigurator() {
if (emf == null) {
System.out.println("You're null.");
}
else {
System.out.println("Yay! Not null!");
}
}
В какой-то степени я знаю, что аннотацию PersistenceUnit оценивается. Если я попытаюсь дать ему имя единицы, отличное от указанного в моем persistence.xml, сервер JBOSS будет жаловаться, когда я попытаюсь развернуть приложение.
Релевантный постоянство.xml структура.
<persistence-unit name="clinicalTrialsEntityManager" transaction-type="RESOURCE_LOCAL">
<jta-data-source>java:jboss/datasources/ClinicalTrialsDS</jta-data-source>
Судя по всему, она появляется «ЭДС» переменная никогда не инициализируется, и что даже если он развертывает успешно, нулевой указатель брошено всякий раз, когда EntityManagerFactory попытка использовать.
Я даже создал Singleton StartUp Bean для инициализации мышления EntityManagerFactory, возможно, это то, чего мне не хватало, и это каким-то образом свяжет их вместе, но безрезультатно. Пожалуйста, дайте мне знать, что мне не хватает, или если требуется дополнительная информация.
Кроме того, если кто-то может объяснить, как EntityManagerFactory «предполагается» инициализироваться за кулисами при использовании метода аннотации/впрыска, это было бы наиболее оценено. Я довольно новичок в концепциях EJB, и у меня проблемы с этим.
10:00:10,348 INFO [org.jboss.as.jpa] (ServerService Thread Pool -- 135) JBAS011402: Starting Persistence Unit Service 'clinicalTrials.war#clinicalTrialsEntityManager'
10:00:10,348 INFO [org.hibernate.ejb.Ejb3Configuration] (ServerService Thread Pool -- 135) HHH000204: Processing PersistenceUnitInfo [
name: clinicalTrialsEntityManager
...]
10:00:10,371 INFO [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (ServerService Thread Pool -- 135) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
10:00:10,411 INFO [org.hibernate.dialect.Dialect] (ServerService Thread Pool -- 135) HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
вывода журнала для проверки Bean инициализируется:
13:53:36,132 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-10) JNDI bindings for session bean named RestServerConfigurator in deployment unit deployment "clinicalTrials.war" are as follows:
java:global/clinicalTrials/RestServerConfigurator!edu.emory.clinical.trials.webapp.server.rest.RestServerConfigurator
java:app/clinicalTrials/RestServerConfigurator!edu.emory.clinical.trials.webapp.server.rest.RestServerConfigurator
java:module/RestServerConfigurator!edu.emory.clinical.trials.webapp.server.rest.RestServerConfigurator
java:global/clinicalTrials/RestServerConfigurator
java:app/clinicalTrials/RestServerConfigurator
java:module/RestServerConfigurator
Как правило, вы должны увидеть детали единицы сохранения в журналах запуска сервера, если он правильно инициализирован, вы нашли его там. –
Спасибо за комментарий. Фактически, я вижу те детали, которые предполагают, что инициализация работает правильно. Я изменю вопрос с помощью операторов журналов, о которых я говорю. – daniel9x
Как вы ссылаетесь на свою фабулу без гражданства, забыли добавить до этого, вы найдете детали боба [JNDI] в журналах, чтобы обеспечить в веб-приложении, bean инициализируется. Также вы можете попробовать создать его - 'EntityManagerFactory emf = Persistence.createEntityManagerFactory (UNIT_NAME); '. Кроме того, инжекторный завод в фазе без состояния не рекомендуется, вводить в singleton и затем извлекать из него диспетчер объектов. –