Что такое код xptr_new_context

Что такое packageContext в Intent # (Context packageContext, Class Cls)?

В документе говорится:

packageContext A Контекст пакет приложений, реализующий этот класс.

Но что это значит? какой класс «этот класс»?

Почему new Intent(this,XXX.class) работает?

Вы можете передать любой Context объект, который вы получили от любого из ваших классов приложений. Таким образом, вы можете либо использовать объект Activity, Service, либо вы можете вызвать getApplicationContext() и передать возвращенный объект Context в конструктор Intent.

Подумайте о Контексте как состоянии вашего Приложения. Он используется для управления ресурсами и службами, используемыми приложением, такими как база данных, локальные файлы, загрузчики классов, общие настройки и т.д.

Когда кто-то звонит вам и спрашивает о вашем времени, что первое, что вы говорите. Что это касается? или в чем смысл этого разговора? В зависимости от контекста вы можете решить, стоит ли выполнять вызов или нет. Если вы продолжаете, разговор должен быть относительно простым, поскольку вы уже знаете контекст.

То же самое происходит с намерениями. Что такое намерение? Что-то, что имеет намерение — одно из них — начать действие.

Если это делает вашу концепцию немного более понятной, чем позволяет перейти к вашему вопросу и фактическому API —

Как вы знаете, первый аргумент должен иметь тип Context, который, как мы знаем, является абстрактным классом. Обычно вы можете передать любой конкретный класс, который расширяет класс Context class — Activity , являющийся одним из них (в этом случае вы просто используете this в аргументе).

Can’t find Request.GetOwinContext

I have been searching for an hour trying to figure out why this isn’t working.

I have a ASP.Net MVC 5 application with a WebAPI. I am trying to get Request.GetOwinContext().Authentication, however I can’t seem to find how to include GetOwinContext. Here is my code:

From what I’ve read, it should be part of the System.Net.Http, but I’ve included that and it still isn’t resolving. Ctrl-Space doesn’t give me any intellisense options either.

What am I missing here?

13 Answers 13

The GetOwinContext extension method is in the System.Web.Http.Owin dll which needs to be downloaded as a nuget package (The nuget package name is Microsoft.AspNet.WebApi.Owin)

However, the method is still part of the System.Net.Http namespace, so the using definitions you have should be fine.

EDIT

Okay, to clear up some confusion: If you are using an ApiController (i.e MyController : ApiController ) you will require the Microsoft.AspNet.WebApi.Owin package.

If you are using a regular Mvc controller (i.e. MyController : Controller ) you will need the Microsoft.Owin.Host.SystemWeb package.

In MVC 5 the pipelines for Api and regular MVC were very different, but often have the same naming conventions. So an extension method in one does not apply to the other. Same for a lot of the action filters etc.

None of these worked for me. I had to compare Nuget packages with one that was created with Identity and I found this Nuget package missing which when added fixed the issue for me

Apparently you need it to run OWIN on IIS using the ASP.NET request pipeline (read you’re screwed without it!)

In WEB API, you can get the reference using the following:

it works in Identity 2.0

You may need to add the NuGet package Microsoft.Owin.Host.SystemWeb in order to do this:

In my case I need to add

for resolving GetOwinContext and then GetUserManager in following line.

I have this problem and I download extra package from nuget to solve my problem,(run following command in Package Manager Console) Install-Package Microsoft.Owin.Host.SystemWeb

This took me forever to find a simple answer: but what I did was use the Get extension of the single instance of the IOwinContext that was instantiated in the startup. So it came out like this:

The GetOwinContext() extension method is not found in threads other than the GUI thread.

So be careful to not call this function from within any await ed function.

After looking at the ASP.NET default project I discovered I needed to include this in my application startup:

I was missing package: Microsoft.AspNet.WebApi.Owin for ApiControllers. Hope this helps!

I had this same problem and solved it by using a private method: private IAuthenticationManager AuthenticationManager < get < return HttpContext.Current.GetOwinContext().Authentication; >>

This worked swimmingly for me.

(Please note that this answer is for ASP.NET Web API which corresponds to the tag used on the question. See this question if your inquiry is with respect to ASP.NET MVC.)

The question does not specify how the ASP.NET Web API service is to be hosted. The dialog in this post indicates (emphasis mine):

kichalla wrote Oct 24, 2014 at 1:35 AM

If you are NOT self-hosting, do not use Microsoft.AspNet.WebApi.Owin package with IIS. this package is only supposed to be used with self hosting.

Use of the Microsoft.AspNet.WebApi.Owin package is recommended in the accepted answer. In this answer I am reporting what has worked for me when hosting an ASP.NET Web API service in IIS.

First, install the following NuGet package:

Microsoft.Owin.Host.SystemWeb

OWIN server that enables OWIN-based applications to run on IIS using the ASP.NET request pipeline.

(Note that as I write, the latest available version of this NuGet package is 3.1.0. Also, to the extent that it might matter, I am using Visual Studio 2013 Update 5.)

After installing this NuGet package, you can do the following:

Now, to shed some light on how these statements are resolved. In Visual Studio, if you right-click GetOwinContext in either statement and select «Peek Definition,» Visual Studio will display the following:

As you can see, within the System.Web namespace, there are two GetOwinContext extension methods:

  • One on the HttpContext class, and
  • The other on the HttpRequest class.

Again, for those hosting their Web API service in IIS, my hope is that this clears up any ambiguity regarding where a definition for GetOwinContext can be found with respect to this late date in 2020.

Context в Android приложении

Что такое Context?

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

Кроме того, Context является проводником в систему, он может предоставлять ресурсы, получать доступ к базам данных, преференсам и т.д. Ещё в Android приложениях есть Activity . Это похоже на проводник в среду, в которой выполняется ваше приложение. Объект Activity наследует объект Context . Он позволяет получить доступ к конкретным ресурсам и информации о среде приложения.

Context присутствует практически повсюду в Android приложении и является самой важной его частью, поэтому необходимо понимать, как правильно его использовать.

Неправильное использование Context может легко привести к утечкам памяти в Android приложении.

Существует много разных типов контекста, поэтому давайте разберёмся, что каждый из них представляет из себя, как и когда их правильно использовать.

Контекст приложения

Это singleton-экземпляр (единственный на всё приложение), и к нему можно получить доступ через функцию getApplicationContext() . Этот контекст привязан к жизненному циклу приложения. Контекст приложения может использоваться там, где вам нужен контекст, жизненный цикл которого не связан с текущим контекстом или когда вам нужно передать контекст за пределы Activity .

Например, если вам нужно создать singleton-объект для вашего приложения, и этому объекту нужен какой-нибудь контекст, всегда используйте контекст приложения.

Если вы передадите контекст Activity в этом случае, это приведет к утечке памяти, так как singleton-объект сохранит ссылку на Activity и она не будет уничтожена сборщиком мусора, когда это потребуется.

В случае, когда вам нужно инициализировать какую-либо библиотеку в Activity , всегда передавайте контекст приложения, а не контекст Activity .

Таким образом, getApplicationContext() нужно использовать тогда, когда известно, что вам нужен контекст для чего-то, что может жить дольше, чем любой другой контекст, который есть в вашем распоряжении.

Контекст Activity

Этот контекст доступен в Activity и привязан к её жизненному циклу. Контекст Activity следует использовать, когда вы передаете контекст в рамках Activity или вам нужен контекст, жизненный цикл которого привязан к текущему контексту.

getContext() в ContentProvider

Этот контекст является контекстом приложения и может использоваться аналогично контексту приложения. К нему можно получить доступ через метод getContext() .

Когда нельзя использовать getApplicationContext()?

  • Это не полноценный контекст, поддерживающий всё, что может Activity . Некоторые вещи, которые вы попытаетесь сделать с этим контекстом, потерпят неудачу, в основном связанные с графическим интерфейсом.
  • Могут появляться утечки памяти, если контекст из getApplicationContext() удерживается на каком-то объекте, который вы не очищаете впоследствии. Если же где-то удерживается контекст Activity , то как только Activity уничтожается сборщиком мусора, всё остальное тоже уничтожается. Объект Application остается на всю жизнь вашего процесса.
Илон Маск рекомендует:  Что такое код imagecreatetruecolor

Правило большого пальца

В большинстве случаев используйте контекст, доступный непосредственно из компонента, в котором вы работаете в данный момент. Вы можете безопасно хранить ссылку на него, если она не выходит за пределы жизненного цикла этого компонента. Как только вам нужно сохранить ссылку на контекст в объекте, который живет за пределами вашей Activity или другого компонента, даже временно, используйте ссылку на контекст приложения.

Контекст

Контекст позволяет передавать данные через дерево компонентов без необходимости передавать пропсы на промежуточных уровнях.

В типичном React-приложении данные передаются сверху вниз (от родителя к дочернему компоненту) с помощью пропсов. Однако, этот способ может быть чересчур громоздким для некоторых типов пропсов (например, выбранный язык, UI-тема), которые необходимо передавать во многие компоненты в приложении. Контекст предоставляет способ делиться такими данными между компонентами без необходимости явно передавать пропсы через каждый уровень дерева.

Когда использовать контекст

Контекст разработан для передачи данных, которые можно назвать «глобальными» для всего дерева React-компонентов (например, текущий аутентифицированный пользователь, UI-тема или выбранный язык). В примере ниже мы вручную передаём проп theme , чтобы стилизовать компонент Button:

Контекст позволяет избежать передачи пропсов в промежуточные компоненты:

Перед тем, как вы начнёте использовать контекст

Обычно контекст используется, если необходимо обеспечить доступ данных во многих компонентах на разных уровнях вложенности. По возможности не используйте его, так как это усложняет повторное использование компонентов.

Если вы хотите избавиться от передачи некоторых пропсов на множество уровней вниз, обычно композиция компонентов является более простым решением, чем контекст.

Например, давайте рассмотрим компонент Page , который передаёт пропсы user и avatarSize на несколько уровней вниз, чтобы глубоко вложенные компоненты Link и Avatar смогли их использовать:

Передача пропсов user и avatarSize вниз выглядит избыточной, если в итоге их использует только компонент Avatar . Так же плохо, если компоненту Avatar вдруг потребуется больше пропсов сверху, тогда вам придётся добавить их на все промежуточные уровни.

Один из способов решить эту проблему без контекста — передать вниз сам компонент Avatar , в случае чего промежуточным компонентам не нужно знать о пропсах user и avatarSize :

С этими изменениями, только корневой компонент Page знает о том, что компоненты Link и Avatar используют user и avatarSize .

Этот способ может сделать ваш код чище во многих случаях, уменьшая количество пропсов, которые вы должны передавать через ваше приложение, и давая больше контроля корневым компонентам. Однако, это решение не является верным в каждом случае. Перемещая больше сложной логики вверх по дереву, вы перегружаете вышестоящие компоненты.

Вы не ограничены в передаче строго одного компонента. Вы можете передать несколько дочерних компонентов или, даже, создать для них разные «слоты», как показано здесь:

Этого паттерна достаточно для большинства случаев, когда вам необходимо отделить дочерний компонент от его промежуточных родителей. Вы можете пойти ещё дальше, используя рендер-пропсы, если дочерним компонентам необходимо взаимодействовать с родителем перед рендером.

Однако, иногда одни и те же данные должны быть доступны во многих компонентах на разных уровнях дерева и вложенности. Контекст позволяет распространить эти данные и их изменения на все компоненты ниже по дереву. Управление текущим языком, UI темой или кешем данных — это пример тех случаев, когда реализация с помощью контекста будет проще использования альтернативных подходов.

Создание объекта Context. Когда React рендерит компонент, который подписан на этот объект, React получит текущее значение контекста из ближайшего подходящего Provider выше в дереве компонентов.

Аргумент defaultValue используется только в том случае, если для компонента нет подходящего Provider выше в дереве. Это может быть полезно для тестирования компонентов в изоляции без необходимости оборачивать их. Обратите внимание: если передать undefined как значение Provider , компоненты, использующие этот контекст, не будут использовать defaultValue .

Каждый объект Контекста используется вместе с Provider компонентом, который позволяет дочерним компонентам, использующим этот контекст, подписаться на его изменения.

Принимает проп value , который будут передан во все компоненты, использующие этот контекст и являющиеся потомками этого Provider компонента. Один Provider может быть связан с несколькими компонентами, потребляющими контекст. Так же Provider компоненты могут быть вложены друг в друга, переопределяя значение контекста глубже в дереве.

Все потребители, которые являются потомками Prov >value у Prov >shouldComponentUpdate .

Изменения определяются с помощью сравнения нового и старого значения, используя алгоритм, аналогичный Object.is .

Способ, по которому определяются изменения, может вызвать проблемы при передаче объекта в value : смотрите Предостережения.

В свойство класса contextType может быть назначен объект контекста, созданный с помощью React.createContext() . Это позволяет вам использовать ближайшее и актуальное значение указанного контекста при помощи this.context . В этом случае вы получаете доступ к контексту, как во всех методах жизненного цикла, так и в рендер методе.

Вы можете подписаться только на один контекст, используя этот API. В случае, если вам необходимо использовать больше одного, смотрите Использование нескольких контекстов.

Если вы используете экспериментальный синтаксис публичных полей класса, вы можете использовать static поле класса, чтобы инициализировать ваш contextType .

Consumer — это React-компонент, который подписывается на изменения контекста. В свою очередь, это позволяет вам подписаться на контекст в функциональном компоненте.

Consumer принимает функцию в качестве дочернего компонента. Эта функция принимает текущее значение контекста и возвращает React-компонент. Передаваемый аргумент value будет равен ближайшему (вверх по дереву) значению этого контекста, а именно пропу value Prov >value будет равен значению defaultValue , которое было передано в createContext() .

Подробнее про паттерн «функция как дочерний компонент» можно узнать на странице Рендер-пропсы.

Объекту Context можно задать строковое свойство displayName . React DevTools использует это свойство при отображении контекста.

К примеру, следующий компонент будет отображаться под именем MyDisplayName в DevTools:

Более сложный пример динамических значений для UI темы:

theme-context.js

themed-button.js

app.js

Изменение контекста из вложенного компонента

Довольно часто необходимо изменить контекст из компонента, который находится где-то глубоко в дереве компонентов. В этом случае вы можете добавить в контекст функцию, которая позволит потребителям изменить значение этого контекста:

theme-context.js

theme-toggler-button.js

app.js

Использование нескольких контекстов

Чтобы последующие рендеры (связанные с контекстом) были быстрыми, React делает каждого потребителя контекста отдельным компонентом в дереве.

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

Контекст использует сравнение по ссылкам, чтобы определить, когда запускать последующий рендер. Из-за этого существуют некоторые подводные камни, например, случайные повторные рендеры потребителей, при перерендере родителя Prov >value , будет создаваться каждый раз:

Один из вариантов решения этой проблемы — хранение этого объекта в состоянии родительского компонента:

В прошлом React имел только экспериментальный API контекста. Старый API будет поддерживаться во всех 16.x релизах, но использующие его приложения должны перейти на новую версию. Устаревший API будет удалён в будущем крупном релизе React. Вы можете прочитать документацию устаревшего контекста здесь.

Разбираемся в React Context

Дата публикации: 2020-06-26

От автора: в последнее время вы, возможно, задумывались над тем, что React Context у всех на слуху и что это может означать для вас и ваших сайтов на React. До Context, когда управление состоянием становилось сложнее, чем позволял сделать функционал setState, вам, вероятно, приходилось использовать стороннюю библиотеку. Благодаря недавним обновлениям команды Awesome React, у нас теперь есть Context, который может помочь в решении некоторых проблем управления состоянием.

Что решает Context?

Как передать состояние из родительского компонента в дочерний, который вложен в дерево компонентов? Вы знаете, что мы можем использовать Redux для управления состоянием, но вам не обязательно прибегать к Redux в каждой ситуации.

Есть способ сделать это без использования Redux или любого другого стороннего инструмента управления состоянием. Вы можете использовать свойство! Скажем, функция, которую вы хотите реализовать, имеет древовидную структуру, похожую на эту:

Состояние находится в компоненте App и требуется для компонентов UserProfile и UserDetails. Вам нужно передать его через свойство вниз по дереву. Если компоненты, которые нуждаются в этом состоянии, имеют глубину до 10 уровней, это может быть сложно, утомительно и чревато ошибками. Каждый компонент должен быть как черный ящик — другие компоненты не должны знать о состояниях, которые им не нужны. Ниже приведен пример приложения, которое соответствует приведенному выше сценарию.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Что такое код xptr_new_context

(PHP 4 >= 4.0.4, PECL)

xptr_new_context — Create new XPath Context

Описание XPathContext xptr_new_context ( void )

К настоящему времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.

Внимание
Пред. Начало След.
xptr_eval Уровень выше Error Handling and Logging Functions

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Что такое packageContext в Intent # (Context packageContext, Class Cls)?

В документе говорится:

packageContext A Контекст пакет приложений, реализующий этот класс.

Но что это значит? какой класс «этот класс»?

Почему new Intent(this,XXX.class) работает?

Вы можете передать любой Context объект, который вы получили от любого из ваших классов приложений. Таким образом, вы можете либо использовать объект Activity, Service, либо вы можете вызвать getApplicationContext() и передать возвращенный объект Context в конструктор Intent.

Подумайте о Контексте как состоянии вашего Приложения. Он используется для управления ресурсами и службами, используемыми приложением, такими как база данных, локальные файлы, загрузчики классов, общие настройки и т.д.

Когда кто-то звонит вам и спрашивает о вашем времени, что первое, что вы говорите. Что это касается? или в чем смысл этого разговора? В зависимости от контекста вы можете решить, стоит ли выполнять вызов или нет. Если вы продолжаете, разговор должен быть относительно простым, поскольку вы уже знаете контекст.

То же самое происходит с намерениями. Что такое намерение? Что-то, что имеет намерение — одно из них — начать действие.

Если это делает вашу концепцию немного более понятной, чем позволяет перейти к вашему вопросу и фактическому API —

Как вы знаете, первый аргумент должен иметь тип Context, который, как мы знаем, является абстрактным классом. Обычно вы можете передать любой конкретный класс, который расширяет класс Context class — Activity , являющийся одним из них (в этом случае вы просто используете this в аргументе).

Новый контекст React в деталях

Что такое контекст

В React компонентах, помимо props , которые могут быть доступны только у первого потомка от родителя, есть контекст, который доступен у всех потомков родителя (объявившего контекст). Это означает, что как бы глубоко компонент не находился в дереве компонентов, он может иметь доступ к контексту, который мог быть создан на сколь угодно много ветвлений дерева выше (ближе к корню). На основе этого API работают все популярные библиотеки, которым необходимо иметь доступ к общим данным из любой глубины приложения: react-redux, react-mobx, react-router, styled-components (ThemeProvider).

Проблемы старого контекста

В старой версии данные можно было получить, но нельзя было подписаться на их обновление. Точнее их обновление приходило, как и props , при перерендере родителя, но т.к. данные могут быть прокинуты между источником и потребителем контекста между большим (любым) количеством компонентов, которые могут остановить это обновление своим shouldComponentUpdate , то надежной подписку, конечно, назвать было бы нельзя. Поэтому разработчикам библиотек, которым необходимо обновлять данные для использующих их компонентов приходилось продумывать механизмы обновления вручную, что на практике совсем не просто. Подробнее об этом можно почитать в статье или посмотреть доклад автора MobX .

Новое API React.createContext

Кто-то мог воспринять новый контекст ( React.createContext — на русском) как замену redux (или любого другого менеджера состояния), но это как сравнивать тёплое и мягкое. В действительности основная цель обновления контекста — это исправить проблему подписок на обновления и сделать это эффективно (подробности от Дэна Абрамова). Авторам библиотек не потребуется тратить силы и жертвовать объёмом бандла для собственной реализации подписок. Также обновлённый контекст предоставляет более простой и удобный интерфейс для его использования.

При этом можно отметить, что redux имеет минимальное API для работы с состоянием: подписка и обновление, которое может быть заменено на использование state (и setState ) из обычного React.Component . Поэтому правильнее сказать, что новый контекст в каких-то задачах можно использовать вместо redux , подразумевая, что вместо него будет использоваться состояние и обновление React.Component , а вместо react-redux — React.createContext . При этом “in box” замены middleware из redux с использованием контекста нет, в этом случае можно воспользоваться сторонними библиотеками.

render-prop

Как можно заметить, новое API React.createContext использует технику render-prop для связи с подписанными компонентами. Подробности реализации и примеры использования есть в официальной документации, мне же хотелось бы прояснить ключевые плюсы и минусы этого подхода:

  • (+) Исключение коллизии имён при использовании нескольких подписок ( Consumer ). Классические HOC осуществляют слияние props , и если у нас есть несколько HOC подряд, и у каких-то из них совпадают названия передаваемых параметров, то они будут перезатираться, и в конечном объекте props , который дойдёт до компонента, будет аргумент из последнего HOC. С render-prop эта проблема исчезает, т.к. с каждым передаваемым параметром подписки нужно работать индивидуально в передаваемой функции.
  • () “Сallback hell” и пересоздание функций или необходимость выносить части render, т.е. отрисовку отображения, в отдельные методы (что нарушает консистентность шаблона). Подробности — в официальной документации.

Если вам не нравится подход render-prop, и вы хотите использовать «старые добрые» HOC — вот простой пример, как это можно сделать с мемоизацией:

unstable_observedBits

Публично об этом ещё не заявляли, и в официальной документации информации об этой части API нет (и, скорее всего, не будет), но, помимо вышесказанного, у React.createContext есть второй аргумент, принимающий функцию, а у Consumer есть параметр unstable_observedBits , принимающий битовую маску сопоставления. Это аналогично shouldComponentUpdate у React.Component . Разберём подробнее.

Битовые маски

Битовые маски применяются очень давно, в частности, для сопоставления прав доступа в Linux. Суть заключается в том, что каждый бит в своей очерёдности на битовой маске отвечает за true или false по отношению к определённому правилу. Удобность работы с побитовыми масками заключается в том, что для обновления значения достаточно осуществить побитовую операцию оригинальной маски с маской правила, в которой для установки значения в true необходимо применить “ИЛИ” — | , где управляющий бит === 1 , а остальные — 0 , а для установки значения в false необходимо применить “И” — & , где управляющий бит === 0 , а остальные — 1 . Это может поначалу звучать сложно, но на практике это простой, наглядный, а главное, самый быстрый способ записи и управления диапазоном значений true \ false .

Использование

Битовая маска в описании и примерах ниже используется для отслеживания изменений в state . Каждому значению state должен соответствовать бит в битовой маске.

Второй аргумент React.createContext принимает функцию, которая на вход получает предыдущее и обновлённое состояние, а на выходе должна вернуть обновлённую битовую маску. В свою очередь Consumer принимает в unstable_observedBits битовую маску, которая содержит биты положительных значений, отвечающих за отслеживаемые позиции state . При поступлении изменений Consumer сначала сравнивает обновлённую битовую маску с unstable_observedBits , и если их побитовое сложение возвращает не 0 , то render-prop будет вызван, иначе — нет. Если второй аргумент React.createContext и unstable_observedBits у Consumer не заданы — вызов render-prop будет происходить на любое изменение контекста.

Пример

Как ясно из названия параметров, данное API не стабильно и не стоит использовать его в проде.

create-subscription

Также в исходных кодах React появился пакет create-subscription . Раньше для того, чтобы подписаться и как-то реагировать на внешние изменения и производить ререндер компонентов, необходимо было делать обёртку в виде класса React.Component , в которой при поступлении уведомлений вызывать setState или forceUpdate . Для упрощения подписки теперь можно использовать более прозрачное API createSubscription из пакета create-subscription официального репозитория React.

Резюмируя

Обновление React 16.3 принесло множество интересных изменений и, безусловно, облегчит и повысит качество использования React и разработку вспомогательных библиотек для него.

Использование нового контекста можно посмотреть в интерактивно демонстрации:

Все вышеописанные технологии можно посмотреть в интерактивной демонстрации:

Что такое код xptr_new_context

This constructor will not modify environment or save a reference to it, but may save a clone. Caller should not modify mutable keys and values in environment after it has been passed to the constructor.

Method Detail

getAttributes

getAttributes

getAttributes

getAttributes

If the object does not have an attribute specified, the directory will ignore the nonexistent attribute and return those requested attributes that the object does have.

A directory might return more attributes than was requested (see Attribute Type Names in the class description), but is not allowed to return arbitrary, unrelated attributes.

See also Operational Attributes in the class description.

modifyAttributes

modifyAttributes

modifyAttributes

modifyAttributes

rebind

rebind

createSubcontext

createSubcontext

getSchema

getSchema

This method returns the root of the schema information tree that is applicable to the named object. Several named objects (or even an entire directory) might share the same schema.

Issues such as structure and contents of the schema tree, permission to modify to the contents of the schema tree, and the effect of such modifications on the directory are dependent on the underlying directory.

getSchema >Description copied from interface: DirContext

getSchema >Description copied from interface: DirContext

One category of information found in directory schemas is class definitions. An «object class» definition specifies the object’s type and what attributes (mandatory and optional) the object must/can have. Note that the term «object class» being referred to here is in the directory sense rather than in the Java sense. For example, if the named object is a directory object of «Person» class, getSchemaClassDefinition() would return a DirContext representing the (directory’s) object class definition of «Person».

The information that can be retrieved from an object class definition is directory-dependent.

Prior to JNDI 1.2, this method returned a single schema object representing the class definition of the named object. Since JNDI 1.2, this method returns a DirContext containing all of the named object’s class definitions.

search

search

search

For an object to be selected, each attribute in matchingAttributes must match some attribute of the object. If matchingAttributes is empty or null, all objects in the target context are returned.

An attribute A1 in matchingAttributes is considered to match an attribute A2 of an object if A1 and A2 have the same identifier, and each value of A1 is equal to some value of A2. This implies that the order of values is not significant, and that A2 may contain «extra» values not found in A1 without affecting the comparison. It also implies that if A1 has no values, then testing for a match is equivalent to testing for the presence of an attribute A2 with the same identifier.

The precise definition of «equality» used in comparing attribute values is defined by the underlying directory service. It might use the Object.equals method, for example, or might use a schema to specify a different equality operation. For matching based on operations other than equality (such as substring comparison) use the version of the search method that takes a filter argument.

When changes are made to this DirContext, the effect on enumerations returned by prior calls to this method is undefined.

If the object does not have the attribute specified, the directory will ignore the nonexistent attribute and return the requested attributes that the object does have.

A directory might return more attributes than was requested (see Attribute Type Names in the class description), but is not allowed to return arbitrary, unrelated attributes.

See also Operational Attributes in the class description.

search

search

The format and interpretation of filter follows RFC 2254 with the following interpretations for attr and value mentioned in the RFC.

attr is the attribute’s identifier.

value is the string representation the attribute’s value. The translation of this string representation into the attribute’s value is directory-specific.

For the assertion «someCount=127», for example, attr is «someCount» and value is «127». The provider determines, based on the attribute ID («someCount») (and possibly its schema), that the attribute’s value is an integer. It then parses the string «127» appropriately.

Any non-ASCII characters in the filter string should be represented by the appropriate Java (Unicode) characters, and not encoded as UTF-8 octets. Alternately, the «backslash-hexcode» notation described in RFC 2254 may be used.

If the directory does not support a string representation of some or all of its attributes, the form of search that accepts filter arguments in the form of Objects can be used instead. The service provider for such a directory would then translate the filter arguments to its service-specific representation for filter evaluation. See search(Name, String, Object[], SearchControls) .

RFC 2254 defines certain operators for the filter, including substring matches, equality, approximate match, greater than, less than. These operators are mapped to operators with corresponding semantics in the underlying directory. For example, for the equals operator, suppose the directory has a matching rule defining «equality» of the attributes in the filter. This rule would be used for checking equality of the attributes specified in the filter with the attributes of objects in the directory. Similarly, if the directory has a matching rule for ordering, this rule would be used for making «greater than» and «less than» comparisons.

Not all of the operators defined in RFC 2254 are applicable to all attributes. When an operator is not applicable, the exception InvalidSearchFilterException is thrown.

The result is returned in an enumeration of SearchResults. Each SearchResult contains the name of the object and other information about the object (see SearchResult). The name is either relative to the target context of the search (which is named by the name parameter), or it is a URL string. If the target context is included in the enumeration (as is possible when cons specifies a search scope of SearchControls.OBJECT_SCOPE or SearchControls.SUBSTREE_SCOPE ), its name is the empty string. The SearchResult may also contain attributes of the matching object if the cons argument specified that attributes be returned.

If the object does not have a requested attribute, that nonexistent attribute will be ignored. Those requested attributes that the object does have will be returned.

A directory might return more attributes than were requested (see Attribute Type Names in the class description) but is not allowed to return arbitrary, unrelated attributes.

See also Operational Attributes in the class description.

search

search

The interpretation of filterExpr is based on RFC 2254. It may additionally contain variables of the form — where i is an integer — that refer to objects in the filterArgs array. The interpretation of filterExpr is otherwise identical to that of the filter parameter of the method search(Name, String, SearchControls) .

When a variable appears in a search filter, it indicates that the filter argument filterArgs[i] is to be used in that place. Such variables may be used wherever an attr, value, or matchingrule production appears in the filter grammar of RFC 2254, section 4. When a string-valued filter argument is substituted for a variable, the filter is interpreted as if the string were given in place of the variable, with any characters having special significance within filters (such as ‘*’ ) having been escaped according to the rules of RFC 2254.

For directories that do not use a string representation for some or all of their attributes, the filter argument corresponding to an attribute value may be of a type other than String. Directories that support unstructured binary-valued attributes, for example, should accept byte arrays as filter arguments. The interpretation (if any) of filter arguments of any other type is determined by the service provider for that directory, which maps the filter operations onto operations with corresponding semantics in the underlying directory.

This method returns an enumeration of the results. Each element in the enumeration contains the name of the object and other information about the object (see SearchResult ). The name is either relative to the target context of the search (which is named by the name parameter), or it is a URL string. If the target context is included in the enumeration (as is possible when cons specifies a search scope of SearchControls.OBJECT_SCOPE or SearchControls.SUBSTREE_SCOPE ), its name is the empty string.

The SearchResult may also contain attributes of the matching object if the cons argument specifies that attributes be returned.

If the object does not have a requested attribute, that nonexistent attribute will be ignored. Those requested attributes that the object does have will be returned.

A directory might return more attributes than were requested (see Attribute Type Names in the class description) but is not allowed to return arbitrary, unrelated attributes.

If a search filter with invalid variable substitutions is provided to this method, the result is undefined. When changes are made to this DirContext, the effect on enumerations returned by prior calls to this method is undefined.

See also Operational Attributes in the class description.

  • Overview
  • Package
  • >Java™ Platform
    Standard Ed. 7
  • Summary:
  • Nested |
  • Field |
  • Constr |
  • Method
  • Detail:
  • Field |
  • Constr |
  • Method

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Package context

Overview ▹

Overview ▾

Package context defines the Context type, which carries deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes.

Incoming requests to a server should create a Context, and outgoing calls to servers should accept a Context. The chain of function calls between them must propagate the Context, optionally replacing it with a derived Context created using WithCancel, WithDeadline, WithTimeout, or WithValue. When a Context is canceled, all Contexts derived from it are also canceled.

The WithCancel, WithDeadline, and WithTimeout functions take a Context (the parent) and return a derived Context (the child) and a CancelFunc. Calling the CancelFunc cancels the child and its children, removes the parent’s reference to the child, and stops any associated timers. Failing to call the CancelFunc leaks the child and its children until the parent is canceled or the timer fires. The go vet tool checks that CancelFuncs are used on all control-flow paths.

Programs that use Contexts should follow these rules to keep interfaces consistent across packages and enable static analysis tools to check context propagation:

Do not store Contexts inside a struct type; instead, pass a Context explicitly to each function that needs it. The Context should be the first parameter, typically named ctx:

Do not pass a nil Context, even if a function permits it. Pass context.TODO if you are unsure about which Context to use.

Use context Values only for request-scoped data that transits processes and APIs, not for passing optional parameters to functions.

The same Context may be passed to functions running in different goroutines; Contexts are safe for simultaneous use by multiple goroutines.

Илон Маск рекомендует:  Как в PowerPoint вставить анимацию картинки или текста
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL