Блокировки SQL Server объяснены

Когда вы сталкиваетесь с «странным» исключением, указывающим на то, что классы / методы / файлы / компоненты / теги отсутствуют или различаются, хотя они явно включены в веб-приложение, такое как приведенные ниже,

java.lang.ClassFormatError: Отсутствует атрибут кода в методе, который не является родным или абстрактным в файле класса javax / faces / webapp / FacesServlet

blockquote>

java.util.MissingResourceException: Не удается найти javax.faces.LogStrings bundle

blockquote>

com.sun.faces.vendor.WebContainerInjectionProvider не может быть cast to com.sun.faces.spi.InjectionProvider

blockquote>

com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED

blockquote>

Тег с именем inputFile из пространства имен http: & # x2f; /xmlns.jcp.org/jsf/html имеет нулевой класс обработчика.

java.lang.NullPoint erException в javax.faces.CurrentThreadToServletContext.getFallbackFactory

blockquote>

java.lang.AbstractMethodError в javax.faces.application.ViewHandlerWrapper.getWebsocketURL

или когда вы сталкиваетесь с «странным» временем выполнения, таким как сломанные сеансы HTTP (jsessionid отображается в URL-адресах по всему месту) и / или сломанная область видимости JSF (она ведет себя как область запроса) и / или сломанные ресурсы CSS / JS / image, тогда вероятность велика, что путь к классу среды выполнения Webapp загрязнен дублированными разными версиями JAR-файлов.

В вашем конкретном случае с ClassFormatError на FacesServlet, это означает, что файл JAR, содержащий упомянутый класс, был найден в первый раз, фактически является «файлом JAR-файла API», предназначенным для поставщиков решений (таких как разработчики, работающие в Mojarra и MyFaces). Он содержит файлы классов с только сигнатурами классов и методов, без каких-либо структур кода и файлов ресурсов. Именно это означает «отсутствующий атрибут кода».

Всегда отмечайте серверные библиотеки как provided

Все зависимости, помеченные как « Спецификации Java » в Maven и имеющие -api суффикс в идентификаторе артефакта - эти API-интерфейсы. Их не должно быть в пуле классов. Вы должны всегда отмечать их provided, если вам действительно нужно иметь его в своем пом. Известным примером является API-интерфейс Java EE (Web) :


    javax
    javaee-web-api
    
    provided

Если область provided отсутствует, то этот JAR окажется в файле /WEB-INF/lib webapp [ , вызывая все проблемы, с которыми вы сталкиваетесь сейчас. В этом конкретном случае у вас есть ненужная зависимость JSF API :


    javax.faces
    javax.faces-api

вызывает проблему, потому что в ней содержится класс чертежа FacesServlet. Удалите его и опираясь на API-интерфейс provided Java EE (Web), как показано выше, должны решить его.

Tomcat как баскетбольный контейнер JSP / Servlet уже предоставляет JSP, Servlet и EL (а также 8 WebSocket). Поэтому вы должны отмечать как минимум jsp-api, servlet-api и el-api как provided. Tomcat не предоставляет JSF (и JSTL ). Таким образом, вам нужно будет установить его через webapp.

Полноценные серверы Java EE, такие как WildFly, TomEE, GlassFish, Payara, WebSphere и т. Д., Уже предоставляют весь API Java EE, включая JSF , Поэтому вам абсолютно не нужно устанавливать JSF через webapp. Это приведет только к конфликтам, если сервер уже предоставит другую версию и / или версию из коробки. Единственная зависимость, в которой вы нуждаетесь, - это javaee-web-api, как показано выше.

Установка JSF на Tomcat

. Правильный способ установки JSF в Tomcat упоминается в нашей JSF wiki - Установка JSF . Существует 2 реализации JSF, Mojarra и MyFaces . Вы должны выбрать один из них и, следовательно, не оба.

Установка Mojarra на Tomcat:


    org.glassfish
    javax.faces
    

Вы также можете проверить org.glassfish:javax.faces репозиторий для текущей последней версии (которая в настоящее время 2.2.13). См. Также собственные инструкции по установке Mojarra .

Установка MyFaces на Tomcat:


    org.apache.myfaces.core
    myfaces-api
    


    org.apache.myfaces.core
    myfaces-impl
    

Вы также можете проверить репозиторий org.apache.myfaces.core:myfaces-bundle для текущей версии последней версии (в настоящее время 2.2.10).

Обратите внимание, что Tomcat 6 как контейнер Servlet 2.5 поддерживает максимальный JSF 2.1. Не забудьте также установить JSTL. См. Также наш JSF wiki - Установка JSF .

См. Также:

10
задан Simon Johnson 19 September 2008 в 09:43
поделиться

2 ответа

Страница MSDN SQL-сервера имеет разумное объяснение:

Блокировка намерений указывает, что SQL Server хочет получить общее (S), блокировка или эксклюзивный (X) соединяется, некоторые ресурсы опускаются в иерархии. Например, коллективная блокировка намерений, помещенная в уровень таблицы, означает, что транзакция предназначает при размещении, общем (S), соединяет страницы или строки в той таблице. Установка блокировки намерений на уровне таблицы предотвращает другую транзакцию от последующего получения эксклюзивного (X), соединяют таблицу, содержащую ту страницу. Блокировки намерений улучшают производительность, потому что SQL Server исследует блокировки намерений только на уровне таблицы, чтобы определить, может ли транзакция безопасно получить блокировку на той таблице. Это удаляет требование для исследования каждой строки, или страница соединяют таблицу, чтобы определить, может ли транзакция заблокировать всю таблицу.

12
ответ дан 3 December 2019 в 20:07
поделиться

Блокировки намерений помещаются на уровне таблицы и указывают, что транзакция поместит соответствующие блокировки в некоторые строки в таблице.

Это ускоряет проверку конфликта транзакции, которые должны поместить, соединяет уровень таблицы. Например, транзакция, нуждающаяся в монопольной блокировке на таблице, может обнаружить конфликт на уровне таблицы ("намерение, которым совместно использованная" блокировка будет там), вместо того, чтобы иметь необходимость исследовать все строки (или страницы) для коллективных блокировок.

6
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: