Jboss+Myeclipse初學者常見問題

    使用MyEclipse+JBOSS開發EJB問題: html

    1.要在Eclipse中JRE類庫中加入%JBOSS_HOME%/client/jbossall-client.jar 不然會拋出異常: java

    複製代碼app

    1. Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
    2. at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
    3. at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    4. at javax.naming.InitialContext.init(InitialContext.java:223)
    5. at javax.naming.InitialContext.(InitialContext.java:175)
    6. at org.wind.unit.TestCalculator.main(TestCalculator.java:18)
    7. Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
    8. at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    9. at java.security.AccessController.doPrivileged(Native Method)
    10. at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    11. at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    12. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    13. at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    14. at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    15. at java.lang.Class.forName0(Native Method)
    16. at java.lang.Class.forName(Class.java:247)
    17. at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
    18. at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
    19. ... 4 more

    2.在MyEclipse建立EJB客戶端項目時,須要手動建立jndi.properties也能夠在將%JBOSS_HOME%\server\all\conf\jndi.properties複製到項目中,也能夠在CODE中使用Properties類或者Hashtable類建立一個jndi,不然找不到JNDI而拋出異常: less

    複製代碼eclipse

    1. Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    2. at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    3. at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    4. at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    5. at javax.naming.InitialContext.lookup(InitialContext.java:392)
    6. at org.wind.unit.TestCalculator.main(TestCalculator.java:30)

    3.將jndi.properties複製到項目中以後,要在jndi.properties中加入java.naming.provider.url=localhost:1099 (不必定是localhost:1099根據開發須要可能會更改)不然會拋出異常: ide

    複製代碼測試

    1. Exception in thread "main" javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
    2. at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1465)
    3. at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1594)
    4. at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
    5. at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
    6. at javax.naming.InitialContext.lookup(InitialContext.java:392)
    7. at org.wind.unit.TestCalculator.main(TestCalculator.java:30)
    8. Caused by: java.net.SocketTimeoutException: Receive timed out
    9. at java.net.PlainDatagramSocketImpl.receive0(Native Method)
    10. at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
    11. at java.net.DatagramSocket.receive(DatagramSocket.java:712)
    12. at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1435)
    13. ... 5 more

    使用Propertie類: url

    複製代碼spa

    1. Properties props = new Properties();
    2. props.setProperty("java.naming.factory.initial",     "org.jnp.interfaces.NamingContextFactory");
    3. props.setProperty("java.naming.provider.url", "localhost:1099");
    4. InitialContext ict=new InitialContext(props);

    使用Hashtable: .net

    複製代碼

    1. Hashtable prop=new Hashtable();
    2. prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    3. prop.put(Context.PROVIDER_URL, "localhost:1099");
    4. InitialContext ict=new InitialContext(prop);

    4.JNDI命名規則是 EAR包名/Bean名稱/remote(local) 若沒有EAR包則直接是Bean名稱/remote(local)。

    5.當使用local時 要注意測試的時候必定要保證都在一個JVM中。

    6.建立Session Bean時要注意本身使用的是有狀態(@Stateful)仍是無狀態(@Stateless)

    源文檔 <http://bbs.uebbs.net/read-htm-tid-62375.html>

閱讀全文
類別: jboss+ejb+myeclipse  查看評論
相關文章
相關標籤/搜索