Ответ 1
СЛЕДУЮЩИЕ ДОКУМЕНТЫ КАК ИСПОЛЬЗОВАТЬ ПРЕМЬЕРЫ НА WEBLOGIC новичком.
ВЕБ-ССЫЛКИ:
https://docs.oracle.com/javaee/7/tutorial/cdi-basic.htm
Идентификация и решение javax.el.PropertyNotFoundException: Целевая задача недоступна
Почему Target Unreachable, идентификатор разрешен для null в weblogic
https://en.wikipedia.org/wiki/Spring_Framework
ВЕРСИИ:
Графики 5.3
Spring 3.1.1
Spring Набор инструментов (STS) Версия: 3.8.4.RELEASE
Java 1.7
Weblogic 11gR1
Pivotal tc Server Developer Edition v3.2, это содержит Tomcat
ТЕРМИНЫ И ОПРЕДЕЛЕНИЯ:
CDI: Это из первой ссылки выше:
Контексты и инжекция зависимостей для Java EE
Контексты и инжекция зависимостей для Java EE (CDI) - одна из нескольких функций Java EE, которые помогают объединить уровень веб-уровня и транзакционный уровень платформы Java EE. CDI - это набор сервисов, которые совместно используются разработчиками для использования корпоративным beans наряду с технологией JavaServer Faces в веб-приложениях. Разработанный для использования с объектами с сохранением состояния, CDI также имеет множество более широких применений, что позволяет разработчикам иметь большую гибкость для интеграции различных компонентов в свободно связанный, но типичный способ.
SPRING: Это из 5-й ссылки выше: Spring Framework - это инфраструктура приложения и инверсия контейнера управления для платформы Java. Основные функции ядра могут использоваться любым Java-приложением, но есть расширения для создания веб-приложений поверх платформы Java EE (Enterprise Edition). Хотя структура не навязывает какую-либо конкретную модель программирования, она стала популярной в сообществе Java в качестве альтернативы, замена или даже дополнение к модели Enterprise JavaBeans (EJB). Структура Spring с открытым исходным кодом.
Примечание:
Я дал приведенные выше определения, чтобы показать, что есть два места, где инъекция зависимостей может возникать, когда вы разворачиваете первичные объекты в Weblogic при разработке с помощью Spring.
Один из них - с CDI, а другой - с Spring. Важно понять это, потому что, по крайней мере, из того, что я прочитал и испытал, вы не должны смешивать аннотации для Spring и CDI.
Tomcat гораздо более прощает, когда речь идет о развертывании интерфейсов, чем Weblogic. Мое приложение отлично работало на tomcat, но с Weblogic у меня были всевозможные проблемы. Первый из них - исключение javax-el-propertynotfoundexception-target-unreachable. Второе звено выше, идет в довольно хорошее определение того, что вам нужно сделать заставляют вещи работать правильно с первичными.
Третья ссылка - это мое сообщение в стеке, где я искал ответ, который я получал с помощью Weblogic. Если я смогу получить этот документ в виде ответа там в читаемом формат, я сделаю это.
АРХИТЕКТУРА:
Таким образом, существует аналогичная архитектура с первичными элементами, которые, по моему мнению, отражают шаблон Spring MVC. В Spring MVC контроллер - это код, который вызывается всякий раз, когда представляет собой HTTP-запрос, сделанный на сервер приложений, то есть Tomcat или Weblogic. Weblogic необходим, если вы хотите использовать EJB для пользователя, поскольку Tomcat является контейнером сервлета, и он не понять EJB. Tomcat отлично работает с Spring, поскольку Spring делает все в сервлетах. Итак, если вы не используете EJB, я считаю, что Tomcat - это путь поскольку он является открытым исходным кодом и не требует никаких лицензионных сборов.
В моем случае, однако, клиент разрешает Weblogic, поэтому проблемы, с которыми я начал работать.
Следующий уровень в шаблоне MVC - это уровень сервиса, а ниже - слой репозитория. Таким образом, это Controller → Service → Repository.
Обычно в Spring MVC контроллер автоматически обрабатывает Serivice с помощью @Autowired, и Служба автоматически создает репозиторий, который сделает пользователя @Entity beans. Entity beans в Hibernate - это просто POJO с аннотацией @Entity. Эти объекты сохраняются в базе данных.
В Primefaces, по крайней мере на основе моих ограниченных знаний, есть ManagedBean и ManagedProperty.
Оба Primefaces и Spring имеют аннотации, которые вводят отношения этих различных объектов в java.
В случае Spring у вас есть @Controller или @RestController, @Service и @Repository. Это не полный список, но это те, которые я обычно использую. В Primefaces у вас есть @ManagedBean и @ManagedProperty. Могут быть и другие, но это то, что я использовал. @ManagedProperty похож на @Autowired в Spring.
Итак, ManagedBean выглядит так:
@ManagedBean(name="observationsView", eager=true)
public class ObservationsView implements Serializable {
@ManagedProperty( value = "#{observationService}")
private ObservationService observationService;
...
}
@ManagedBean(name = "observationService")
@ApplicationScoped
public class ObservationServiceImpl implements ObservationService, Serializable {
@ManagedProperty( value = "#{observationDao}")
private ObservationDao observationDao;
...
}
@ManagedBean(name = "observationDao")
@ApplicationScoped
public class ObservationDaoImpl implements ObservationDao, Serializable{
@ManagedProperty( value = "#{daoHelper}")
private DaoHelper daoHelper;
...
}
Вы заметите, что ManagedBean "autwires" ManagedProperty, который ему нужен.
ФАЙЛЫ: WEB-INF/weblogic.xml:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.3/weblogic-web-app.xsd">
<wls:container-descriptor>
<!--<wls:index-directory-enabled>true</wls:index-directory-enabled> -->
<wls:prefer-application-packages>
<wls:package-name>org.slf4j</wls:package-name>
<wls:package-name>org.springframework.*</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
<wls:context-root>pcocar</wls:context-root>
<wls:weblogic-version>10.3.6</wls:weblogic-version>
</wls:weblogic-web-app>
WEB-INF/faces-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
</faces-config>
WEB-INF/beans.xml: Я не думаю, что вам нужен этот. Это должно быть только для CDI, как описано во второй ссылке выше.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>
ОШИБКИ ИЗБЕЖАТЬ:
-
Убедитесь, что вы реализуете Serializable для всех ваших управляемых beans.
-
Убедитесь, что вы создаете геттеры и сеттеры для всех ManagedProperty, так что отражение Java может получить и установить их.
Вот пример:
@ManagedBean(name = "observationService")
@ApplicationScoped открытый класс ObservationServiceImpl реализует ObservationService, Serializable {
/** * */ private static final long serialVersionUID = -7242896804221503769L; /** * @return the observationDao */ public ObservationDao getObservationDao() { return observationDao; } /** * @param observationDao the observationDao to set */ public void setObservationDao(ObservationDao observationDao) { this.observationDao = observationDao; } @ManagedProperty( value = "#{observationDao}") private ObservationDao observationDao; public List<Observation> getObservationsByFein( Long fein ) throws Exception{ return this.observationDao.findByFein(fein); } public List<Observation> getObservations() throws Exception{ return this.observationDao.findAll(); }
}
Если вы не создаете сеттеры и получатели, то Primefaces не будет работать, по крайней мере, не в Weblogic.
-
В вашем @ManagedPropery() используйте use 'value = "bean name" ', а не только @ManagedProperty ( "bean name" ).
-
Назовите все управляемые beans с помощью @ManagedBean (name = "bean name" ). Я не знаком с правилами съемки.
-
Не смешивайте аннотацию Spring с аннотациями Primefaces.
-
Убедитесь, что вы используете аннотации javax.faces.bean:
import javax.faces.bean.ApplicationScoped; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty;
Не используйте:
import org.springframework.web.bind.annotation.*
В STS убедитесь, что проект Properties → Spring → Project Builders → AOP Reference Model Builder отключен, если вы добавили пространство имен AOP в файле servlet-context.xml.