¥³¥ó¥Æ¥ó¥Ä°ìÍ÷ †J2EE¥³¥ó¥Æ¥Ê¤Ç¤¢¤ëJBoss¤ò»È¤Ã¤ÆEJB¤ÎÊÙ¶¯¤ò¤·¤Æ¤ß¤Þ¤·¤¿¡£°Ê²¼¡¢ºî¶È¥á¥â¤Ç¤¹¡£ EJB¤Î»È¤¤Êý †Î㤨¤Ð¡¢sayHello()¥á¥½¥Ã¥É¤ÇString¤òÊֵѤ¹¤ëEJB¤òºî¤ë¾ì¹ç°Ê²¼¤Îʪ¤¬É¬ÍפǤ¹¡£
¤³¤ì¤È¤µ¤Þ¤¶¤Þ¤ÊDD(Deployment Descriptor)¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¡¢¥³¥ó¥Æ¥Ê¤Ë¥Ç¥×¥í¥¤¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥Ó¥¸¥Í¥¹¥í¥¸¥Ã¥¯¤ò»ÈÍѤ·¤¿¤¤¥Ò¥È(¥×¥í¥°¥é¥à)¤Ï¡¢
¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¥Ó¥¸¥Í¥¹¥í¥¸¥Ã¥¯¤¬¤É¤³¤Ç¼Â¹Ô¤µ¤ì¤¿¤«¤òµ¤¤Ë¤·¤Ê¤¤¤Ç·ë²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê²ÄÍÑÀ¤¬¸þ¾å¤¹¤ë¤ï¤±¤Ç¤¹¤Í¡£ ¤Þ¤º¤ÏJNDI̾¤È¡¢EJB¤¿¤Á¤Î´Ø·¸ †¤µ¤Æ¡¢Àè¤Û¤ÉJNDI·Ðͳ¤ÇHome¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼èÆÀ¤¹¤ë¤È¸À¤¤¤Þ¤·¤¿¤¬¡¢EJB¤Ç¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ëºÝ¡¢É¬¤ºInitialContext?¤ò·Ðͳ¤·¤Þ¤¹¡£¤³¤Îµ¡¹½¤òJNDI¤È¤¤¤¤¤Þ¤¹¡£InitialContext?¤Ï¤¢¤é¤«¤¸¤á¡¢String¤Î¥¡¼Ãͤȥª¥Ö¥¸¥§¥¯¥È¤òÂФˤ·¤Æ¥³¥ó¥Æ¥Ê¤ËÅÐÏ¿¤·¤Æ¤ª¤¡¢¤½¤Î¥¡¼Ãͤǥª¥Ö¥¸¥§¥¯¥È¤ò¸¡º÷¤·¼èÆÀ¤¹¤ë¤Î¤Ç¤¹¤¬¡¢¤½¤Î¥¡¼Ãͤȥª¥Ö¥¸¥§¥¯¥È¤Î´Ø·¸¤òÍý²ò¤·¤Ê¤¤¤ÈÁêÅö¤ä¤ä¤³¤·¤¤¤Ç¤¹¡£ Àè¤ÎÎã¤Ç¹Ô¤¯¤È¡¢ initContext = new InitialContext();
Object ref = initContext.lookup("HelloEJBHoge");
HelloHome home = (HelloHome) PortableRemoteObject.narrow(ref,HelloHome.class);
¤È¥ë¥Ã¥¯¥¢¥Ã¥×¤¹¤ë¤Î¤Ç¤¹¤¬¡¢¤³¤Î"HelloEJBHoge"¤¬¥¡¼Ãͤǡ¢HelloHome? ¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£ ÏäòÀ°Íý¤¹¤ë¤È¡¢
¤È¤¤¤¦¤³¤È¤Ç¤¹¡£¤½¤³¤Ç¤½¤â¤½¤â¥³¥ó¥Æ¥Ê¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤òÅÐÏ¿¤¹¤ëÊýË¡¤Ï¡©¡¢¤â¤Ã¤È¶ñÂÎŪ¤Ë¤¤¤¦¤ÈInitialContext?¤òlookup¤¹¤ëºÝ¤Î¥¡¼"HelloEJBHoge"¤È¡¢hello.HelloHome?¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤É¤¦¤ä¤Ã¤Æ´ØÏ¢¤Å¤±¤é¤ì¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©¡©¤È¤¤¤¦µ¿Ì䤬¤ï¤µ¯¤³¤ê¤Þ¤¹¡£ ¹Í»¡ †¤µ¤ÆÀè¤Îµ¿Ìä¤ò²ò·è¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£¤Þ¤ÀTry and Error¤Ç¤¹¤¬¡£¡£¡£ ¤Þ¤º¡¢hello.HelloHome?¤Ë̾Á°¤òÉÕ¤±¤Þ¤¹¡£¤³¤ì¤ÏJ2EE¤Î»ÅÍÍÆâ¤Ç¤¢¤ëejb-jar.xml¤Ë¤è¤Ã¤Æ¹Ô¤ï¤ì¤Þ¤¹¡£ <?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN'
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<home>hello.HelloHome</home> <-¥³¥³
<remote>hello.Hello</remote>
<ejb-class>hello.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
¤³¤ì¤Ç¡¢hello.HelloHome?¤Ë¤ÏHelloEJB¤È¤¤¤¦EJB̾¤¬ÉÕ¤±¤é¤ì¤Þ¤·¤¿¡£ ¤µ¤é¤Ë¡¢¤³¤ÎEJB̾"HelloEJB"¤È¥³¥ó¥Æ¥Ê¦¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë"HelloEJBHoge"¤Ï¡¢JBossÆÈ¼«¥Õ¥¡¥¤¥ë¤Ç¤¢¤ë¡¢jboss.xml¤Ç´ØÏ¢¤Å¤±¤é¤ì¤Þ¤¹¡£*2 <?xml version="1.0"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<jndi-name>HelloEJBHoge</jndi-name>
</session>
</enterprise-beans>
</jboss>
¤³¤ì¤ÇHelloEJBHoge¤È¤¤¤¦¥¡¼¤Èhello.HelloHome?¤¬´ØÏ¢¤Å¤±¤é¤ì¤Þ¤·¤¿¡£¤³¤ì¤é¤Î¥¯¥é¥¹¥Õ¥¡¥¤¥ë¤äDD¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Æ¥Ê¤Ë¥Ç¥×¥í¥¤¤¹¤ë¤³¤È¤Ç¡¢JNDI¤Ø¤ÎÅÐÏ¿¤«¤é²¿¤«¤é¤¬´°Î»¤·¤¿¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤Á¤Ê¤ß¤Ëejb-jar.xml¤Èjboss.xml¤Ïejb¤Îjar¤Î/META-INFÆâ¤ËÇÛÃÖ¤·¤Þ¤¹¡£ ¤è¤¦¤ä¤¯¤³¤ì¤Ç¡¢HelloEJBHoge¤Çlookup¤¹¤ì¤Ðhello.HelloHome?¤ò¼èÆÀ¤Ç¤¤½¤¦¤Ç¤¹¡£¼ÂºÝ¤Ë¤ä¤Ã¤Æ¤ß¤ë¤È public static void main(String[] args) throws NamingException,
RemoteException, CreateException {
InitialContext initContext = null;
try {
initContext = new InitialContext();
Object ref = initContext.lookup("HelloEJBHoge");
HelloHome home = (HelloHome) PortableRemoteObject.narrow(ref,
HelloHome.class);
Hello hello = home.create();
System.out.println(hello.sayHello());
} finally {
if (initContext != null) {
initContext.close();
}
}
}
¤³¤ì¤Ç³Î¤«¤Ë²Ôư¤·¤Þ¤·¤¿¡ª¡£¤Á¤Ê¤ß¤ËEclipse¤«¤é¼Â¹Ô¤·¤¿¤È¤¤Ï¡¢¼Â¹Ô»þ¤Î¥¯¥é¥¹¥Ñ¥¹¤Ë${JBOSS_HOME}/client/jbossall-client.jar¤Ë¥Ñ¥¹¤òÄ̤µ¤Ê¤¤¤È¥À¥á¤ß¤¿¤¤¡£¡£ javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory] at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) ¤Ê¤ó¤Æ¥¨¥é¡¼¤¬É½¼¨¤µ¤ì¤·¤Þ¤¦¤«¤â¡£¡£¡£ ¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Ç¤Ï¤Ê¤¯¡¢¥µ¡¼¥Ö¥ì¥Ã¥È¤Ê¤É¤«¤é¥¢¥¯¥»¥¹¤¹¤ë †¤µ¤Æ¡¢¤¤¤ï¤æ¤ë¥í¡¼¥«¥ë¤Ê(¡©)Lookup¤Ï¤³¤ì¤ÇÎɤµ¤½¤¦¤Ç¤¹¤¬¡¢¥µ¡¼¥Ö¥ì¥Ã¥È¤Ê¤É¤«¤éEJB¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë¤Ïjava:comp/env¤ò»È¤Ã¤¿ENC¤Ë¤è¤ëJNDI¸¡º÷¤ò¤¹¤ëɬÍפ¬¤¢¤ë¤ß¤¿¤¤¤Ç¤¹¡£¤Ä¤Þ¤êInitialContext?¤òlookup¤¹¤ë¤È¤¤Ë context.lookup("java:comp/env/ejb/HelloEJB");
¤Æ¤ä¤ëÎã¤Î¥ä¥Ä¤Ç¤¹¡£ ¤µ¤Æ¡¢ context.lookup("java:comp/env/ejb/HelloEJB");
¤È»ØÄꤹ¤ë¤È¡¢web.xmlÆâ¤Îejb-ref¤ò ejb/HelloEJB ¤Ç¸¡º÷¤·¤Þ¤¹¡£web.xml¤Ë¤Ï°Ê²¼¤ÎEJB»²¾È¤òµ½Ò¤·¤Þ¤·¤¿¡£¡£ <ejb-ref> <ejb-ref-name>ejb/HelloEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>hello.HelloHome</home> <remote>hello.Hello</remote> <ejb-link>HelloEJB</ejb-link> </ejb-ref> ¤³¤ì¤Ç¡¢ejb-link¤Î¤È¤³¤í¤Çjboss.xml¤Îejb-name¤ò¸«¤Ë¹Ô¤Ã¤Æ¡¢¤½¤³¤Îjndi-name¤Çlookup¤¹¤ë¡¢¤ÈÍý²ò¤·¤¿¤ó¤À¤±¤É¡¢¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¡£¡£¡£¡£¡£¡£°Ê²¼¤Î¥¨¥é¡¼¤¬É½¼¨¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ EJBException in method: public abstract hello.Hello hello.HelloHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract hello.Hello hello.HelloHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException ¤Ç¤â¡¢¤ï¤¶¤È <ejb-link>HelloEJB</ejb-link> ¤òjboss.xml¤Ë¤Ê¤¤HelloEJBa¤È¤«¤¹¤ë¤È javax.naming.NamingException: ejb-ref: ejb/HelloEJB, no ejb-link in web.xml and no jndi-name in jboss-web.xml) ¤Ê¤ó¤Æ¤¤¤ï¤ì¤ë¤«¤é¡¢DD¤¿¤Á¤Ï¤¢¤Ã¤Æ¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£¡£¡£ ¤Þ¤¿¡¢ENC¤ò»È¤ï¤Ê¤¤¤Ç¥¯¥é¥¤¥¢¥ó¥È¤Ç¤ä¤Ã¤¿¤è¤¦¤ËľÀÜ Object boundObject = context.lookup("HelloEJBHoge");
¤È¤ä¤Ã¤Æ¤â¡¢ENC¤Ç¤ä¤Ã¤¿¤È¤¤ÈƱ¤¸¥¨¥é¡¼¤¬½Ð¤Á¤ã¤¤¤Þ¤¹¡£
jboss-web.xml¤ò»È¤¦ †JBoss¤Ç¤ÏÀè¤Ë½ñ¤¤¤¿ <ejb-link>HelloEJB</ejb-link> ¤Èjboss.xml¤Îejb-name¤Ë¤è¤ëJNDI̾¤È¤Î´ØÏ¢¤Å¤±¤À¤±¤Ç¤Ï¤Ê¤¯¡¢jboss-web.xml¤Ë¤è¤ë´ØÏ¢¤Å¤±¤â²Äǽ¤Ç¤¹¡£¤¿¤Ö¤óweb.xml¤Ë¤Ïejb-link¤ò½ñ¤«¤Ê¤¤¤Ç¡¢jboss-web.xml¤Ë <ejb-ref> <ejb-ref-name>ejb/HelloEJB</ejb-ref-name> <jndi-name>HelloEJBHoge</jndi-name> </ejb-ref> ¤È½ñ¤¯¤À¤±¤Î¤è¤¦¤Ç¤¹¡£¤³¤Ã¤Á¤ÎÊý¤¬¡¢¤¤ì¤¤¤Ç¤¹¤Í¡£¤Á¤Ê¤ß¤Ëjboss-web.xml¤Ïwar¤ÎWEB-INF/ľ²¼¤ËÇÛÃÖ¤·¤Þ¤¹¡£web.xml¤ÎÎÙ¤ËÃÖ¤¤¤Æ¤ª¤¤Þ¤·¤ç¤¦¡£
´ØÏ¢¥ê¥ó¥¯ †
¤³¤Îµ»ö¤Ï
¸½ºß¤Î¥¢¥¯¥»¥¹:17011 |