Кіріспе

Шеткі функциялар интерфейсі

Бағдарламалық жасақтауда, Java Native Interface (JNI) – Java виртуалды машинасының (JVM) ішінде орындалатын Java кодын, нақты қолданбалар (нақты аппараттық және операциялық жүйе платформасына арналған бағдарламалар) және C, C++ және ассемблер сияқты басқа тілдерде жазылған кітапханалар шақыруға және оларға шақырылуға мүмкіндік беретін шеткі функциялар интерфейсі бағдарламалау аясы.

Мақсаттар

JNI бағдарламашыларға Java бағдарламалау тілінде толық жазылуы мүмкін емес жағдайларды шешу үшін жергілікті әдістерді жазуға мүмкіндік береді, мысалы, стандартты Java сыныптар кітапханасы платформаға тән мүмкіндіктерді немесе бағдарламалық кітапхананы қолдамайтын жағдайларда. Ол сондай-ақ Java бағдарламаларына қолжетімді болу үшін басқа бағдарламалау тілінде жазылған қолданбаны өзгертуге де пайдаланылады. Стандартты кітапхана кластарының көпшілігі JNI-ге сүйенеді, бұл әзірлеушіге және пайдаланушыға функционалдық мүмкіндіктерді ұсынады, мысалы, файлдық I/O және дыбыс мүмкіндіктері. Стандартты кітапханаға өнімділік пен платформаға бейімделген API-ларды қосу, барлық Java қолданбаларына осы функционалдыққа қауіпсіз және платформадан тәуелсіз түрде қол жеткізуге мүмкіндік береді. JNI фреймворкі жергілікті әдіске Java кодтары осы нысандарды пайдаланатын тәсілмен Java нысандарын пайдалануға рұқсат береді. Жергілікті әдіс Java нысандарын жасай алады, содан кейін оларды тексеріп, өз міндеттерін орындау үшін пайдалана алады. Сондай-ақ, жергілікті әдіс Java қолданбасы кодымен жасалған нысандарды да тексеріп, пайдалана алады. JNI-ді тек қолданбалар мен қол қойылған апплеттер ғана шақыра алады. JNI-ге сүйенетін қолданба Java ұсынатын платформалық тасымалданатын мүмкіндіктерін жоғалтады (жартылай шешім – әрбір платформа үшін JNI кодының жеке нұсқасын жазып, Java операциялық жүйені анықтап, орындалу кезінде дұрыс нұсқаны жүктеу). Жергілікті код Java-мен интерфейс қана емес, сонымен қатар Java-ға негізделуі мүмкін, бұл Java AWT Native Interface арқылы мүмкін. Процесс шамалы өзгерістермен бірдей. Java AWT Native Interface тек J2SE 1.3 нұсқасынан бастап қолжетімді. JNI сонымен қатар C көпірінен өтпей, тікелей құрастыру кодына қол жеткізуге мүмкіндік береді. Java қолданбаларына құрастыру тілі арқылы қол жеткізу де осылай мүмкін.

Баламалар

Microsoft-тың Java Virtual Machine (Visual J++) бағдарламасының жеке меншік іске асырылуы Java-дан жергілікті кодты шақырудың ұқсас механизміне ие болды, оны Raw Native Interface (RNI) деп атады. Сонымен қатар, ол Java-ны білмейтін, мысалы, Windows API сияқты, бар жергілікті кодты шақырудың оңай тәсілі болды, бұл J/Direct деп аталды. Бірақ Sun–Microsoft арасындағы осы іске асыру бойынша сот процесінен кейін Visual J++ енді қолдау көрсетілмейді. RNI-ді JNI-ге қарағанда пайдалану ыңғайлырақ болды, себебі Java ортасының мекенжайымен есептесудің қажеті болмады. Оның орнына, барлық Java нысандарына тікелей қол жеткізуге болады. Бұл үшін Java сыныптарынан қанағаттар файлдарды (header files) жасайтын құрал қолданылды. Сол сияқты, J/Direct қажетті аралық жергілікті кітапхананы және JNI-ді пайдаланудан гөрі оңайырақ болды. Java Native Access (JNA) – Java бағдарламашыларына JNI-ді пайдаланбай-ақ, ортақ кітапханаларға оңай қол жеткізуді қамтамасыз ететін, қауымдық дамытумен жасалған кітапхана. Дегенмен, бұл тәуелді jar кітапханасын қайта таратуды қажет етеді. Таңдау JNI-ді кодтаудың қиындығы мен JNA-ның баяу болуы арасында. JNI Java-ның негізгі бөлігіне кіріктірілген.