2012-09-08 14 views
6

मैं बिलाव 7 का उपयोग एक साथ CDI के साथ और उस के लिए मैं एक प्रारंभिक बिंदु के रूप Knappsack Maven Archetypes से jee6-सर्वलेट-कम से कम-मूलरूप आदर्श हुआ करता था।बिलाव + CDI + Arquillian

अब मैं CDI सेम के परीक्षण के लिए Arquillian उपयोग करना चाहते हैं, लेकिन पिछले कुछ समय से खोज करने के बाद भी, मैं सिर्फ विषय से संबंधित समस्याओं का एक नंबर मिला।

क्या कोई मुझे टॉमकैट 7 पर सीडीआई परीक्षणों के लिए आर्किलीयन का उपयोग करके एक कार्य सेटअप (विशेष रूप से सही pom.xml उपयोग करने के लिए) पर इंगित कर सकता है?


संपादित 2012/09/11: के रूप में नीचे एक टिप्पणी में कहा, मैं मेरी समस्या हल करने के लिए, मैं किसी की जरूरत है मुझे पूरे सेटअप को समझने, बल्कि एक हल करने की कोशिश की तुलना में मदद करने के लिए लगता है कुछ बिंदु पर विशिष्ट अपवाद।

तो, टॉमकैट 7 में सीडीआई बीन रखने के लिए पोम.एक्सएमएल और टेस्ट क्लास कैसा दिखना चाहिए और एम्बेडेड और प्रबंधित कंटेनर दोनों में सभी इंजेक्शन तंत्रों के साथ परीक्षण करने में सक्षम होना चाहिए? (वैसे, क्यों बिल्ला 7 के लिए कोई रिमोट कंटेनर एडाप्टर अब के रूप में यह 6 के लिए किया गया है है?)

मैं पहले से ही tomcat 6 example अनुकूल करने के लिए करने की कोशिश की है, लेकिन यह बिल्ला पर काम नहीं कर सके 7.

उत्तर

3

दुर्भाग्य से, मैं अभी तक नहीं मिला है या मेरी समस्या के लिए एक काम उदाहरण के बारे में कहा जा रहा है, लेकिन कुछ है कि मेरे लिए काम किया, जिसे मैंने यहां दिखाना चाहते हैं साथ आने के लिए सक्षम था - हो सकता है यह किसी को मदद करता है, के बाद से मैं माना जाता है कि समस्या एक विदेशी नहीं है और शायद कोई इसे देख सकता है और मुझे कुछ अलग होने के मामले में संकेत दे सकता है।

/pom.xml (प्रयोग करने योग्य ग्रहण [3.7] के साथ एक बिल्ला 7 [7.0.30] में, यह सुनिश्चित करें कि प्रोजेक्ट गुण/तैनाती विधानसभा परीक्षण वर्गों/संसाधनों का न होना सुनिश्चित):

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>cditomcat</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>cditomcat</name> 
    <description>This pom is the base for a project using JSF2+CDI on a tomcat 7 and Arquillian for tests.</description> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <!-- Java EE Dependencies --> 
     <dependency> 
      <groupId>com.sun.xml.ws</groupId> 
      <artifactId>jaxws-rt</artifactId> 
      <version>2.2.7</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.0</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.0.2-b10</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.0.0.GA</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.0.0.GA</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.weld.servlet</groupId> 
      <artifactId>weld-servlet</artifactId> 
      <version>1.1.4.Final</version> 
     </dependency> 

     <!-- Test dependencies --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.arquillian.junit</groupId> 
      <artifactId>arquillian-junit-container</artifactId> 
      <version>1.0.0.CR5</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.shrinkwrap.container</groupId> 
      <artifactId>shrinkwrap-container-tomcat-60</artifactId> 
      <version>1.0.0-beta-1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.shrinkwrap</groupId> 
      <artifactId>shrinkwrap-api</artifactId> 
      <version>1.0.0-cr-1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.shrinkwrap</groupId> 
      <artifactId>shrinkwrap-spi</artifactId> 
      <version>1.0.0-cr-1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.shrinkwrap.descriptors</groupId> 
      <artifactId>shrinkwrap-descriptors-api</artifactId> 
      <version>1.1.0-beta-1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.jboss.shrinkwrap.descriptors</groupId> 
      <artifactId>shrinkwrap-descriptors-impl</artifactId> 
      <version>1.1.0-beta-1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.0</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>cditomcat</finalName> 
     <testSourceDirectory>src/test/java</testSourceDirectory> 

     <plugins> 
      <!-- Facilitates downloading source and javadoc in Eclipse --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.8</version> 
       <configuration> 
        <wtpversion>2.0</wtpversion> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 

      <!-- Ensures we are compiling at 1.6 level --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

      <!-- Tomcat plugin for embedded tomcat --> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>tomcat-maven-plugin</artifactId> 
       <version>1.1</version> 
       <configuration> 
        <path>/${project.build.finalName}</path> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <profiles> 
     <profile> 
      <id>tc7-embedded</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 

      <build> 
       <testResources> 
        <testResource> 
         <directory>src/test/resources</directory> 
        </testResource> 
        <testResource> 
         <directory>src/test/resources/embedded</directory> 
        </testResource> 
       </testResources> 
      </build> 

      <dependencies> 
       <dependency> 
        <groupId>org.jboss.arquillian.container</groupId> 
        <artifactId>arquillian-tomcat-embedded-7</artifactId> 
        <version>1.0.0.CR3</version> 
        <scope>test</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat.embed</groupId> 
        <artifactId>tomcat-embed-core</artifactId> 
        <version>7.0.19</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat.embed</groupId> 
        <artifactId>tomcat-embed-jasper</artifactId> 
        <version>7.0.19</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.eclipse.jdt.core.compiler</groupId> 
        <artifactId>ecj</artifactId> 
        <version>3.7</version> 
        <scope>test</scope> 
       </dependency> 

       <!-- Provided scoped dependencies for embedded container --> 
       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-catalina</artifactId> 
        <version>7.0.29</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-coyote</artifactId> 
        <version>7.0.29</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-jasper</artifactId> 
        <version>7.0.29</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>javax.servlet</groupId> 
        <artifactId>servlet-api</artifactId> 
        <version>2.5</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.jboss.arquillian.container</groupId> 
        <artifactId>arquillian-container-test-spi</artifactId> 
        <version>1.0.2.Final</version> 
        <scope>test</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.jboss.arquillian.container</groupId> 
        <artifactId>arquillian-container-spi</artifactId> 
        <version>1.0.0.CR5</version> 
        <scope>test</scope> 
       </dependency> 
      </dependencies> 
     </profile> 

     <profile> 
      <id>tc7-managed</id> 
      <build> 
       <testResources> 
        <testResource> 
         <directory>src/test/resources</directory> 
        </testResource> 
        <testResource> 
         <directory>src/test/resources/managed</directory> 
        </testResource> 
       </testResources> 
      </build> 

      <dependencies> 
       <dependency> 
        <groupId>org.jboss.arquillian.container</groupId> 
        <artifactId>arquillian-tomcat-managed-7</artifactId> 
        <version>1.0.0.CR3</version> 
        <scope>test</scope> 
       </dependency> 

       <!-- Provided scoped dependencies for embedded container --> 
       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-catalina</artifactId> 
        <version>7.0.29</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-coyote</artifactId> 
        <version>7.0.29</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-jasper</artifactId> 
        <version>7.0.29</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>javax.servlet</groupId> 
        <artifactId>servlet-api</artifactId> 
        <version>2.5</version> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.jboss.arquillian.container</groupId> 
        <artifactId>arquillian-container-test-spi</artifactId> 
        <version>1.0.2.Final</version> 
        <scope>test</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.jboss.arquillian.container</groupId> 
        <artifactId>arquillian-container-spi</artifactId> 
        <version>1.0.0.CR5</version> 
        <scope>test</scope> 
       </dependency> 
      </dependencies> 
     </profile> 
    </profiles> 
</project> 

/src/main/webapp/WEB-INF/web.xml (मैंने अभी भी संस्करण 2 का उपयोग किया है।5):

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
    <context-param> 
     <param-name>facelets.DEVELOPMENT</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <listener> 
     <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
    </listener> 
    <resource-env-ref> 
     <description>Object factory for the CDI Bean Manager</description> 
     <resource-env-ref-name>BeanManager</resource-env-ref-name> 
     <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> 
    </resource-env-ref> 

</web-app> 

/src/main/webapp/META-INF/context.xml (सर्वलेट में इंजेक्शन, श्रोताओं, इस्तेमाल नहीं किया फिल्टर):

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <!-- disable storage of sessions across restarts --> 
    <Manager pathname=""/> 
    <Resource name="BeanManager" auth="Container" type="javax.enterprise.inject.spi.BeanManager" factory="org.jboss.weld.resources.ManagerObjectFactory"/> 
</Context> 

/src/main/resources/META-INF/beans.xml /src/test/resources/in-container-beans.xml (रिक्त चिह्नक फ़ाइलों आवेदन और परीक्षा के लिए समान रूप से कर रहे हैं):

<?xml version="1.0" encoding="UTF-8"?> 
<beans 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/beans_1_0.xsd"> 
</beans> 

/src/test/resources/in-container-web.xml (के लिए एक ही एम्बेडेड और प्रबंधित):

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

    <env-entry> 
     <env-entry-name>name</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>Tomcat</env-entry-value> 
    </env-entry> 

    <listener> 
     <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
    </listener> 

    <resource-env-ref> 
     <resource-env-ref-name>BeanManager</resource-env-ref-name> 
     <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> 
    </resource-env-ref> 
</web-app> 

/src/test/resources/in-container-context.xml (एम्बेडेड के लिए एक ही और प्रबंधित):

<Context> 
    <Resource name="BeanManager" auth="Container" 
     type="javax.enterprise.inject.spi.BeanManager" factory="org.jboss.weld.resources.ManagerObjectFactory" /> 
</Context> 

/src/test/resources/embedded/arquillian.xml (इस फ़ाइल के लिए ही है एम्बेडेड) :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://jboss.org/schema/arquillian" 
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 

    <engine> 
     <property name="deploymentExportPath">target</property> 
    </engine> 
    <container qualifier="tomcat" default="true"> 
     <configuration> 
      <property name="tomcatHome">target/tomcat-embedded-7</property> 
      <property name="workDir">work</property> 
      <property name="appBase">webapps</property> 
      <property name="bindHttpPort">8889</property> 
      <property name="unpackArchive">true</property> 
     </configuration> 
    </container> 
</arquillian> 

/src/test/resources/managed/arquillian.xml (इस फ़ाइल को प्रबंधित के लिए ही है):

... 
<role rolename="manager-gui" /> 
    <role rolename="manager-jmx" /> 
    <role rolename="manager-script" /> 
    <user username="tomcat" password="manager" 
     roles="manager-gui,manager-jmx, manager-script" /> 
... 
:

<?xml version="1.0"?> 
<arquillian 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://jboss.org/schema/arquillian" 
     xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 

    <container qualifier="tomcat" default="true"> 
     <configuration> 
      <property name="jmxPort">8099</property> 
      <property name="host">localhost</property> 
      <property name="port">8080</property> 
      <property name="user">tomcat</property> 
      <property name="pass">manager</property> 
     </configuration> 
    </container> 
</arquillian> 

कामयाब रहे कंटेनर तैनाती काम करने के लिए, बिल्ला के tomcat-users.xml फ़ाइल प्रबंधक, जैसे सक्षम करने के लिए बढ़ाया जा करने के लिए है

अंत में, प्रत्येक arquillian test class में निम्नानुसार तैनाती विधि होनी चाहिए (मैं उपयोग करता हूं घ सर्वलेट 2.5):

... 
    @Deployment 
    @OverProtocol("Servlet 2.5") 
    public static WebArchive createDeployment() { 
     return ShrinkWrap 
       .create(WebArchive.class, "test.war") 
       .addClass(MyTest.class) 
       .addAsLibrary(
         MavenArtifactResolver 
           .resolve("org.jboss.weld.servlet:weld-servlet:1.1.4.Final")) 
       .addAsWebInfResource("in-container-beans.xml", "beans.xml") 
       .addAsManifestResource("in-container-context.xml", 
         "context.xml").setWebXML("in-container-web.xml"); 
    } 
... 

वेल्ड पैक किया जा चुका है, जो निम्नलिखित कोड द्वारा के रूप में प्रश्न के संदर्भित उदाहरण (संपादित खंड) में किया मेरे मामले में स्थानीय Maven भंडार से लिया जाता है:

public class MavenArtifactResolver { 
    private static final String LOCAL_MAVEN_REPO = 
      System.getProperty("user.home") + File.separatorChar + 
        ".m2" + File.separatorChar + "repository"; 

    public static File resolve(String groupId, String artifactId, String version) { 
     return new File(LOCAL_MAVEN_REPO + File.separatorChar + 
       groupId.replace(".", File.separator) + File.separatorChar + 
       artifactId + File.separatorChar + 
       version + File.separatorChar + 
       artifactId + "-" + version + ".jar"); 
    } 

    public static File resolve(String qualifiedArtifactId) { 
     String[] segments = qualifiedArtifactId.split(":"); 
     return resolve(segments[0], segments[1], segments[2]); 
    } 
} 
2

यहां एक सेटअप है जो जावा ईई प्रमाणित संस्करण टॉमकैट 7 (टॉमईई) के लिए काम करता है। यह CDI भी शामिल है और काम कर रहा Arquillian एडाप्टर के एक मुट्ठी भर देखते हैं:

ध्यान दें कि पेज गुणों का उपयोग करके बिलाव को अनुरोध भेजने के लिए इस्तेमाल करने का अधिकार प्राप्त करने के लिए बंदरगाह का उल्लेख है। उस पर ध्यान न दें।

@ArquillianResource 
private URL url; 

कि आपके webapp, बंदरगाहों और सभी के आधार URL होगा: सही दृष्टिकोण अपने testcase में इस तरह एक क्षेत्र है।

+0

मैंने पहले से ही टॉमई के बारे में सुना है, लेकिन यह मेरे मामले में नहीं करेगा, क्योंकि ग्राहक का पर्यावरण सेट है और हमारे पास एक वेनिला टॉमकैट होगा। लेकिन चूंकि टोमकैट 7 के लिए एडेप्टर हैं, दोनों प्रबंधित और एम्बेडेड हैं और चूंकि टोमकैट + सीडीआई के लिए कामकाजी उदाहरण हैं, इसलिए मुझे उम्मीद है कि तीनों के लिए एक सेटअप है - केवल मुझे अभी तक कोई उदाहरण नहीं मिला है। –

+0

एडाप्टर का एक संस्करण भी है जो सादा टोमकैट 7 बूट करता है, ओपनवेबबीन, ओपनईजेबी, आदि तैनात करता है और फिर ऐप को तैनात करता है। आप किस सीडीआई कार्यान्वयन का उपयोग कर रहे हैं? –

+0

मैं वेल्ड का उपयोग करता हूं क्योंकि यह जेबॉस 7 (जो मेरा पसंदीदा वातावरण है) के साथ आता है। –

2

आप आर्किलीयन के टॉमकैट -7 प्रबंधित कंटेनर के लिए POM पर एक नज़र डाल सकते हैं, जो वेल्ड-सर्वलेट को परीक्षण निर्भरता के रूप में जोड़ता है।

वेल्ड जेएआर श्रिंकवैप मेवेन निर्भरता रिजॉल्वर के माध्यम से आर्किलियन @Deployment defined in the test classes में लोड किए गए हैं। तैनाती में आपको खाली beans.xml फ़ाइल भी शामिल करने की आवश्यकता होगी। नोट - लेकिन ऐसा कोई CDI सेम परीक्षण वर्ग में इंजेक्ट किया है, वेल्ड @Resource इंजेक्षन किया जाता है।

+0

संकेत के लिए धन्यवाद, मैंने आपके द्वारा इंगित वस्तुओं को अनुकूलित करने का प्रयास किया, लेकिन यह काम नहीं किया। मैंने शुरुआती बिंदु के रूप में [यह] (https://community.jboss.org/wiki/Tomcat6EmbeddedAndRemote) आलेख भी उपयोग किया, जो टॉमकैट 6 के लिए एक कार्य सेटअप दिखाता है और इसे टॉमकैट 7 में अनुकूलित करने की कोशिश करता है लेकिन यह काम नहीं करता है। क्या आप मुझे कुछ काम करने वाले उदाहरण या कम से कम एक पोम पर इंगित कर सकते हैं जिसमें टॉमकैट 7 आर्किलियन एडाप्टर और सीडीआई दोनों शामिल हैं? –

+0

@Geziefer आप क्या त्रुटि देख रहे हैं, या विफलता कहां है? –

+0

बात यह है कि मैंने अलग-अलग चीजों की कोशिश की और अलग अपवाद प्राप्त किए (क्लास नॉटफाउंड, NoSuchMethod, ...) और मैं बिना किसी आवश्यकता के जानने के निर्भरता जोड़ता रहता हूं। इसलिए मुझे डर है, अगर मैं एक अपवाद पोस्ट करता हूं, तो इसे हल किया जा सकता है और मुझे अगली बार ले जाया जा सकता है, यह नहीं जानते कि मैं पहली जगह गलत दिशा में गया हूं। इसलिए, मैंने अपना प्रश्न बढ़ाया, कृपया ऊपर देखें। –

संबंधित मुद्दे