JavaRush /جاوا بلاگ /Random-SD /IntelliJ Idea: Decompilation، Compilation، Substitution (...
Viacheslav
سطح

IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي)

گروپ ۾ شايع ٿيل
”ويل کي ٻيهر نه بڻايو“ ڪامياب ۽ ڪارائتو ڪم لاءِ بنيادي قاعدن مان هڪ آهي. پر ڇا ڪجي جڏهن توهان نه ٿا چاهيو ته توهان پنهنجو ڦيٿو ٻيهر ٺاهيو، پر ڪنهن ٻئي جو اسٽيرنگ ويل ٽيڙو ٿي وڃي ۽ ڦيٿي چورس هجن؟ هن جائزي جو مقصد ٻين ماڻهن جي لائبريرين کي درست ڪرڻ جي ٽيڪنڪ جو ممڪن طور مختصر تعارف مهيا ڪرڻ آهي ”آخري ڪوشش جي طور تي“ ۽ ان کي توهان جي ڪمپيوٽر تائين ڪيئن وڌايو وڃي.
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 1

تعارف

اسان سڀ هڪ اوزار يا ٻيو استعمال ڪندا آهيون. پر ڪڏهن ڪڏهن اوزار مڪمل طور تي مناسب نه آهن يا غلطيون آهن. جاوا ٻولي جي خاصيتن جي مهرباني، اسان اوزارن جي رويي کي درست ڪري سگهون ٿا جتي اسان کي ضرورت آهي. اهو سٺو آهي جڏهن اسان منصوبن ۾ حصو ڏيون ٿا ۽ درخواستون موڪليندا آهيو (توهان وڌيڪ پڙهي سگهو ٿا هتي: " GitHub - منصوبن ۾ حصو ڏيڻ "). پر اهي شايد فوري طور تي قبول نه ڪيا وڃن، يا اهي شايد قبول نه ڪيا وڃن. پر منصوبي جي ضرورتن لاء اهو هاڻي ضروري آهي. ۽ هتي، مون کي اميد آهي ته، هي آرٽيڪل اسان کي ڊولپرز طور موجود اوزار ڏيکاريندو. اسان کي هيٺين قدمن کي انجام ڏيڻ جي ضرورت پوندي جنهن بابت اسين ڳالهائينداسين:
  • مثال طور ٽيسٽ ايپليڪيشن تيار ڪريو (هائيبرنيٽ پروجيڪٽ جو مثال استعمال ڪندي)
  • تبديل ٿيندڙ جڳھ ڳولڻ
  • تبديلي آڻڻ
  • مخزن کي ترتيب ڏيڻ
ھيٺ ڏنل سڀئي مرحلا Windows OS لاءِ ڏنل آھن، پر نڪس سسٽم لاءِ اينالاگز آھن. تنهنڪري جيڪڏهن ضروري هجي ته توهان ان کي ٻيهر ڪري سگهو ٿا.

مضمون جي تياري

تنهن ڪري، اسان کي هڪ امتحان منصوبي جي ضرورت آهي. Hibernate اسان لاء مثالي آهي، ڇاڪاڻ ته ... اهو آهي "اسٽائلش، فيشن، جديد." مان وڌيڪ تفصيل ۾ نه ويندس، ڇاڪاڻ ته ... مضمون Hibernate بابت نه آهي. اسان سڀ ڪجهه جلدي ۽ نقطي تي ڪنداسين. ۽ اسان، مناسب ڊولپرز وانگر، تعميراتي نظام استعمال ڪنداسين. مثال طور، Gradle پڻ اسان لاءِ موزون آهي، جنهن کي هن آرٽيڪل لاءِ انسٽال ڪيو وڃي ( https://gradle.org/install/ ). پهريون، اسان کي هڪ منصوبو ٺاهڻ جي ضرورت آهي. Maven هن لاءِ آرڪيٽائپس آهن ، ۽ Gradle وٽ هن لاءِ هڪ خاص پلگ ان آهي: Gradle Init . تنهن ڪري، ڪنهن به طريقي سان ڪمان لائن کوليو جيڪو توهان کي سڃاتو وڃي ٿو. پروجيڪٽ لاءِ ڊاريڪٽري ٺاھيو، ان ڏانھن وڃو ۽ حڪم جاري ڪريو:

mkdir javarush 
cd javarush 
gradle init --type java-application
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 2
پروجيڪٽ کي درآمد ڪرڻ کان اڳ، اچو ته فائل ۾ ڪجهه تبديليون ڪيون جيڪي بيان ڪري ٿي ته ڪيئن ٺاهجي. هن فائل کي بلڊ اسڪرپٽ سڏيو ويندو آهي ۽ ان جو نالو آهي build.gradle. اهو ڊاريڪٽري ۾ واقع آهي جنهن ۾ اسان gradle init تي عمل ڪيو. تنهن ڪري، اسان صرف ان کي کوليو (مثال طور، ونڊوز ۾ start build.gradle حڪم سان). اسان اتي ڳوليندا آهيون " انحصار " بلاڪ، يعني. انحصار. سڀ ٽئين پارٽي جار جيڪي اسان استعمال ڪنداسين هتي بيان ڪيا ويا آهن. هاڻي اسان کي سمجهڻ جي ضرورت آهي ته هتي ڇا بيان ڪجي. اچو ته وڃو Hibernate ويب سائيٽ ( http://hibernate.org/ ). اسان ۾ دلچسپي آهي Hibernate ORM . اسان کي تازو ڇڏڻ جي ضرورت آهي. کاٻي پاسي واري مينيو ۾ ھڪڙو ذيلي سيڪشن آھي "رليز". "تازو مستحڪم" چونڊيو. ھيٺ لٿو ۽ ڳولھيو "بنيادي عمل درآمد (جپپا شامل آھي)". اڳي، اهو ضروري هو ته JPA سپورٽ الڳ الڳ ڳنڍڻ، پر هاڻي سڀ ڪجهه آسان ٿي چڪو آهي ۽ صرف هڪ انحصار ڪافي آهي. اسان کي ڊيٽابيس سان گڏ ڪم ڪرڻ جي ضرورت پوندي Hibernate استعمال ڪندي. هن کي ڪرڻ لاء، اچو ته آسان ترين اختيار وٺو - H2 ڊيٽابيس . چونڊ ڪئي وئي آهي، هتي اسان جا انحصار آهن:

dependencies {
    // Базовая зависимость для Hibernate (новые версии включают и JPA)
    compile 'org.hibernate:hibernate-core:5.2.17.Final'
    // База данных, к которой мы будем подключаться
    compile 'com.h2database:h2:1.4.197'
    // Use JUnit test framework
    testCompile 'junit:junit:4.12'
}
عظيم، اڳتي ڇا آهي؟ اسان کي Hibernate ترتيب ڏيڻ جي ضرورت آهي. Hibernate وٽ ” شروع ڪرڻ جي گائيڊ “ آهي، پر اها بيوقوف ۽ مدد کان وڌيڪ رڪاوٽ آهي. تنهن ڪري، اچو ته سڌو سنئون ماڻهن وانگر " يوزر ​​گائيڊ " ڏانهن وڃو. مواد جي جدول ۾ اسان ڏسون ٿا سيڪشن ” بوٽ اسٽريپ “، جيڪو ترجمو ڪري ٿو ”بوٽ اسٽريپ“. بس جيڪو توهان کي گهرجي. اتي ڪيترائي سمارٽ لفظ لکيا ويا آھن، پر نقطو اھو آھي ته ڪلاس پاٿ تي ھڪڙو META-INF ڊاريڪٽري ھئڻ گھرجي، ۽ ھڪڙو persistence.xml فائل ھئڻ گھرجي. معيار جي مطابق، ڪلاس پاٿ ۾ "وسيلا" ڊاريڪٽري شامل آهي. تنهن ڪري، اسان مخصوص ڊاريڪٽري ٺاهي: mkdir src\main\resources\META-INF اتي persistence.xml فائل ٺاهيو ۽ ان کي کوليو. اتي موجود دستاويز ۾ هڪ مثال آهي "مثال 268. META-INF/persistence.xml ترتيب واري فائيل" جنهن مان اسان مواد کڻنداسين ۽ ان کي persistence.xml فائل ۾ داخل ڪنداسين. اڳيون، IDE لانچ ڪريو ۽ اسان جي ٺاهيل منصوبي کي ان ۾ درآمد ڪريو. هاڻي اسان کي ڊيٽابيس ۾ ڪجهه محفوظ ڪرڻ جي ضرورت آهي. اها شيءِ آهي جنهن کي هڪ ادارو چئبو آهي. ادارا ڪجهه نمائندگي ڪن ٿا نام نهاد ڊومين ماڊل مان. ۽ مواد جي جدول ۾، ڏسو ۽ ڏسو، اسان ڏسون ٿا " 2. ڊومين ماڊل ". اسان متن جي ھيٺ وڃون ٿا ۽ باب ۾ ڏسو "2.1. نقشي جا قسم" ھڪڙي اداري جو ھڪڙو سادو مثال. اچو ته ان کي پاڻ ڏانهن وٺي، ان کي ٿورو مختصر ڪريون:
package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity(name = "Contact")
public class Contact {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    public Contact(String name) {
        this.name = name;
    }
}
ھاڻي اسان وٽ ھڪڙو طبقو آھي جيڪو ھڪڙي اداري جي نمائندگي ڪري ٿو. اچو ته واپس وڃو persistence.xml ۽ اتي ھڪڙي جڳھ کي درست ڪريو: جتي اشارو ڪيو ويو آھي، classاسان پنھنجي طبقي کي اشارو ڪنداسين entity.Contact. عظيم، جيڪو باقي رهي ٿو اهو لانچ ڪرڻ آهي. اچو ته Bootstrap باب ڏانھن واپس وڃو . جيئن ته اسان وٽ ايپليڪيشن سرور نه آهي جيڪو اسان کي هڪ خاص EE ماحول فراهم ڪندو (يعني هڪ ماحول جيڪو اسان لاءِ مخصوص سسٽم جي رويي کي لاڳو ڪري ٿو)، اسان SE ماحول ۾ ڪم ڪريون ٿا. ان لاءِ، صرف مثال ”مثال 269. ايپليڪيشن بوٽ اسٽريپ ٿيل EntityManagerFactory“ اسان لاءِ موزون آهي. مثال طور، اچو ته اهو ڪريون:
public class App {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CRM");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        Contact contact = new Contact("Vasya");
        em.persist(contact);
        em.getTransaction().commit();
        Query sqlQuery = em.createNativeQuery("select count(*) from contact");
        BigInteger count = (BigInteger) sqlQuery.getSingleResult();
        emf.close();
        System.out.println("Entiries count: " + count);
    }
}
هير، اسان جو موضوع تيار آهي. مون هن حصي کي ڇڏڻ نه چاهيو ، ڇاڪاڻ ته ... ھيٺين بابن لاءِ، اھو سمجھڻ جي صلاح ڏني وڃي ٿي ته اسان جو مضمون ڪيئن آيو.

تبديل ٿيندڙ رويي کي ڳولڻ

اچو ته شروعات جي جاءِ وٺون ڳڻپ واري فيلڊ جي ٽائپ BigInteger ۽ اتي بريڪ پوائنٽس مقرر ڪريو ( BreakPoint ). گهربل لڪير تي داخل ٿيڻ کان پوء، اهو Ctrl+F8 استعمال ڪندي يا مينيو ذريعي ڪري سگهجي ٿو Run -> Toggle Line Breakpoint. پوءِ اسان پنهنجو مکيه طريقو ڊيبگ ۾ هلون ٿا (رن -> ڊيبگ):
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 3
ٿورڙو بي مثال مثال، پر اچو ته چئو ته اسان شروعاتي سوالن جي جڳهن جو تعداد تبديل ڪرڻ چاهيون ٿا. جيئن اسان ڏسي سگهون ٿا، اسان جي sqlQuery NativeQueryImpl آهي. ڪلڪ ڪريو Ctrl+N، ڪلاس جو نالو لکو، ۽ ان ڏانھن وڃو. تنهن ڪري جڏهن اسان ڪنهن ڪلاس ۾ وڃون ٿا، اسان کي ان جڳهه تي منتقل ڪيو ويندو جتي هي ڪلاس واقع آهي ۽ آٽو اسڪرول کي چالو ڪيو وڃي:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 4
اچو ته فوري طور تي نوٽ ڪريو ته آئيڊيا في الحال نه ڄاڻن ٿا ته پروگرام جو سورس ڪوڊ ڪٿي ڳوليو (ذريعو ڪوڊ، اهو آهي). تنهن ڪري، هن مهربانيءَ سان اسان لاءِ ڪلاس فائل مان مواد ڊڪمپائيل ڪيو:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 5
اهو پڻ نوٽ ڪريو ته IntelliJ Idea ونڊو جي عنوان ۾ اهو لکيل آهي جتي Gradle اسان لاءِ آرٽيڪل محفوظ ڪري ٿو. ھاڻي اچو ته Idea جي رستي تي وڃون جتي اسان جو نمونو واقع آھي:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 6
اچو ته هن ڊاريڪٽري ڏانهن وڃو ڪمانڊ لائن تي ڪمانڊ استعمال ڪندي cd way to каталогу. مان فوري طور تي هڪ نوٽ ڪندس: جيڪڏهن اهو ممڪن آهي ته منبع مان هڪ پروجيڪٽ ٺاهيو، اهو بهتر آهي ته ذريعو مان ٺاهيو وڃي. مثال طور، Hibernate سورس ڪوڊ موجود آهي سرڪاري ويب سائيٽ تي. اهو بهتر آهي ته ان کي گهربل ورزن لاءِ چونڊيو ۽ اتي سڀ تبديليون ٺاهيون ۽ بلڊ اسڪرپٽ استعمال ڪندي گڏ ڪريو جيڪي پروجيڪٽ ۾ بيان ڪيل آهن. مان مضمون ۾ پيش ڪريان ٿو سڀ کان وڌيڪ خوفناڪ اختيار - اتي ھڪڙو جار آھي، پر ڪو ذريعو ڪوڊ نه آھي. ۽ نوٽ نمبر 2: Gradle پلگ ان استعمال ڪندي سورس ڪوڊ حاصل ڪري سگھي ٿو. تفصيلات لاءِ Gradle استعمال ڪندي جار لاءِ جاواڊڪس ۽ ذريعن کي ڪيئن ڊائونلوڊ ڪجي ڏسو .

تبديلي آڻڻ

اسان کي ڊاريڪٽري جي جوڙجڪ کي ٻيهر ٺاهڻ جي ضرورت آهي انهي مطابق جنهن پيڪيج ۾ اسان تبديل ڪري رهيا آهيون. هن حالت ۾:، mkdir org\hibernate\query\internalجنهن کان پوء اسان هن ڊاريڪٽري ۾ هڪ فائل ٺاهيندا آهيون NativeQueryImpl.java. هاڻي اسان هن فائل کي کوليو ۽ ڪلاس جي سڀني مواد کي ڪاپي ڪريون اتي IDE مان (ساڳيو جيڪو Idea اسان لاءِ ڊمپائل ڪيو هو). ضروري لائنون تبديل ڪريو. مثال طور:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 7
هاڻي اچو ته فائل گڏ ڪريون. اسين ڪندا آهيون: javac org\hibernate\query\internal\NativeQueryImpl.java. واھ، توھان صرف ان کي نه ٿا وٺي سگھو ۽ ان کي بغير غلطين جي مرتب ڪريو. اسان کي حاصل ڪيو ويو آهي نه ڳولي سگهڻ جي نشانين جي غلطين، ڇاڪاڻ ته ... ميوٽيڪل ڪلاس ٻين طبقن سان ڳنڍيل آهي، جنهن کي IntelliJ Idea عام طور تي اسان لاءِ ڪلاس پاٿ ۾ اضافو ڪري ٿو. ڇا توهان محسوس ڪيو ٿا اسان جي IDEs جي تمام ڪارائتو؟ =) چڱو، اچو ته ان کي پاڻ ۾ شامل ڪريون، اسان پڻ ڪري سگھون ٿا. اچو ته ان لاءِ رستا نقل ڪريون:
  • [1] - hibernate-core-5.2.17.Final.jar
  • [2] - hibernate-jpa-2.1-api-1.0.0.Final.jar
جيئن اسان ڪيو: "پراجيڪٽ" ڏيک ۾ "بيروني لائبريريون" ۾ اسان کي گهربل جار ڳوليو ۽ ڪلڪ ڪريو Ctrl+Shift+C. ھاڻي اچو ته ھيٺ ڏنل ڪمانڊ ٺاھيو ۽ ان تي عمل ڪريون: javac -cp [1];[2] org\hibernate\query\internal\NativeQueryImpl.java نتيجي طور، نئين ڪلاس فائلز جاوا فائل جي اڳيان ظاهر ٿينديون، جن کي jar فائل ۾ اپڊيٽ ڪرڻ جي ضرورت آھي.
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 8
هيري، هاڻي توهان جار اپڊيٽ ڪري سگهو ٿا. اسان جي رهنمائي ڪري سگهون ٿا سرڪاري مواد : jar uf hibernate-core-5.2.17.Final.jar org\hibernate\query\internal\*.class اوپن IntelliJ Idea گهڻو ڪري توهان کي فائلون تبديل ڪرڻ جي اجازت نه ڏيندو. تنهن ڪري، جار اپڊيٽ ڪرڻ کان اڳ، توهان کي گهڻو ڪري Idea کي بند ڪرڻو پوندو، ۽ تازه ڪاري کان پوء، ان کي کوليو. ان کان پوء، توهان IDE کي ٻيهر کوليو ۽ ڊبگ ٻيهر هلائي سگهو ٿا. IDE ٻيهر شروع ڪرڻ جي وچ ۾ بريڪ پوائنٽس ري سيٽ نه ڪيا ويا آهن. تنهن ڪري، پروگرام جي عملدرآمد بند ٿي ويندي جتي اهو اڳ هو. Voila، اسان ڏسون ٿا ته اسان جون تبديليون ڪيئن ڪم ڪن ٿيون:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 9
زبردست. پر هتي سوال پيدا ٿئي ٿو - ڇا جي ڪري؟ صرف ان حقيقت جي ڪري ته جڏهن گريڊ هڪ منصوبو ٺاهي ٿو، اهو تجزيو ڪري ٿو انحصار ۽ مخزن جي بلاڪ. Gradle وٽ ھڪڙي خاص بلڊ ڪيش آھي، جيڪا ھڪڙي خاص جڳھ تي واقع آھي (ڏسو " ڪيئن ڪجي گريڊ ڪيش جي جڳھ کي سيٽ ڪرڻ؟ " جيڪڏھن ڪيش ۾ ڪو به انحصار نه آھي، ته پوءِ Gradle ان کي ريپوزٽري مان ڊائون لوڊ ڪندو. جتان اسان جار ۾ تبديل ڪيو آھي. پوءِ گريڊل سمجهي ٿو ته لائبريري ڪيش ۾ آهي ۽ ڪا به شيءِ پمپ نه ڪندي آهي، پر ڪيش صاف ڪرڻ سان اسان جون تبديليون ضايع ٿي وينديون آهن، ان سان گڏ، اسان کان سواءِ ٻيو ڪو به وڃي نه ٿو سگهي ۽ انهن کي حاصل ڪرڻ ۾ ڪيتري تڪليف آهي. ، آهي نه؟ ڇا ڪجي. ها، مخزن مان ڊائون لوڊ؟ پوءِ اسان کي پنهنجي ذخيري جي ضرورت آهي، ترجيحن ۽ شاعرن سان. هي ايندڙ قدم آهي.

مخزن کي ترتيب ڏيڻ

توهان جي مخزن کي ترتيب ڏيڻ لاءِ مختلف مفت حل آهن: انهن مان هڪ آهي Artifactory ، ۽ ٻيو آهي Apache Archive . آرٽيفيڪٽري فيشني، سجيل، ماڊرن نظر اچي ٿي، پر مون کي ان سان مشڪلاتون هيون، مان نه ٿي چاهيان ته نمونن کي صحيح طرح سان رکڻ ۽ غلط ميون ميٽاڊيٽا ٺاهي. تنهن ڪري، اڻڄاتل طور تي پاڻ لاء، Apache نسخو مون لاء ڪم ڪيو. اهو ظاهر ٿيو ته تمام خوبصورت نه آهي، پر اهو معتبر طور تي ڪم ڪري ٿو. ڊائون لوڊ صفحي تي ، اسٽينڊل ورزن لاء ڏسو ۽ ان کي پيڪ ڪريو. انهن جو پنهنجو آهي " جلدي شروعات ". شروع ڪرڻ کان پوء، توهان کي پتو تائين انتظار ڪرڻو پوندو http://127.0.0.1:8080/#repositorylist. ان کان پوء، "اپلوڊ آرٽيڪل" چونڊيو:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 10
ڪلڪ ڪريو "اپلوڊ شروع ڪريو"، ۽ پوء "محفوظ فائلون". ان کان پوء، سائي ڪاميابي جو پيغام ظاهر ٿيندو ۽ آرٽيڪل "براؤز" سيڪشن ۾ دستياب ٿي ويندي. اهو jar ۽ pom فائلن لاء ڪيو وڃي:
IntelliJ Idea: Decompilation، Compilation، Substitution (يا ٻين ماڻهن جي غلطين کي ڪيئن درست ڪجي) - 11
اهو حقيقت جي ڪري آهي ته اضافي هائبرنيٽ انحصار پوم فائل ۾ بيان ڪيو ويو آهي. ۽ اسان وٽ صرف 1 قدم بچيو آهي - اسان جي تعمير اسڪرپٽ ۾ مخزن جي وضاحت ڪريو:

repositories {
    jcenter()
    maven {
        url "http://127.0.0.1:8080/repository/internal/"
    }
}
۽، مطابق، اسان جي هائبرنيٽ جو نسخو بڻجي ويندو: compile 'org.hibernate:hibernate-core:5.2.17.Final-JAVARUSH'. اهو سڀ ڪجهه آهي، هاڻي اسان جو پروجيڪٽ اهو نسخو استعمال ڪري ٿو جيڪو اسان درست ڪيو آهي، ۽ اصل نه.

نتيجو

ائين لڳي ٿو ته اسان واقف ٿي ويا آهيون. مون کي اميد آهي ته اها دلچسپ هئي. اهڙيون ”چالون“ تمام گهٽ ڪيون وينديون آهن، پر جيڪڏهن اوچتو توهان جون ڪاروباري گهرجون شرطون مقرر ڪن ٿيون ته توهان جيڪي لائبريريون استعمال ڪيون ٿا، اهي پورا نه ٿيون ڪري سگهن، توهان کي خبر آهي ته ڇا ڪجي. ۽ ها، هتي ڪجهه مثال آهن جن کي هن طريقي سان درست ڪري سگهجي ٿو:
  • اتي ھڪڙو ويب سرور آھي جنھن کي انڊرٽو سڏيو ويندو آھي. ڪجھ وقت تائين، اتي ھڪڙو بگ ھو، جيڪو پراکسي استعمال ڪندي، اسان کي آخري صارف جي IP کي ڳولڻ جي اجازت نه ڏني.
  • هن وقت تائين، WildFly JPA هڪ خاص طريقي سان هٿ ڪيو ويو هڪ لمحو وضاحتن جي حساب سان نه ورتو ويو، ڇاڪاڻ ته هن استثنا کي اڇلائي ڇڏيو. ۽ اهو ترتيب ڏيڻ وارو نه هو.
#وياچسلاو
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION