package servlet;
   ......
   public class SampleServlet extends HttpServlet{
   ......
    private void initBean()throws ServletException{
try{
initialContext = new InitialContext();
Object objref = initialContext.lookup("security-sample/UserManagement");//出错行
Object obj = PortableRemoteObject.narrow(objref,UserManagementHome.class);
home = (UserManagementHome)obj;
bean = home.create();
}
catch (CreateException e1) {
e1.printStackTrace();
throw new ServletException(e1.getMessage());
}
catch(NamingException ne){
ne.printStackTrace();
throw new ServletException(ne.getMessage());
}
catch (RemoteException e) {
   e.printStackTrace();
}
}
      ......
   }
这个对looup方法的引用抛出异常:    javax.servlet.ServletException: security-sample not bound  
  at org.jnp.server.NamingServer.getBinding(NamingServer.java:581)
  at org.jnp.server.NamingServer.getBinding(NamingServer.java:589)
  at org.jnp.server.NamingServer.getObject(NamingServer.java:595)
  at org.jnp.server.NamingServer.lookup(NamingServer.java:342)
  at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667)
  at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
  at javax.naming.InitialContext.lookup(Unknown Source)
at servlet.SampleServlet.initBean(SampleServlet.java:91)
  at servlet.SampleServlet.doGet(SampleServlet.java:37)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  ......
我想问,lookup的这个参数"security-sample/UserManagement"在哪里定义呢?
我的工程里几个配置文件如下:jboss.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">
<jboss>
<security-domain>java:/jaas/sample_web_client_security</security-domain>
<enterprise-beans>
<session>
<ejb-name>UserManagement</ejb-name>
<jndi-name>security-sample/UserManagement</jndi-name>
</session>
</enterprise-beans>
<resource-managers/>
</jboss>
jboss-web.xml<?xml version="1.0" encoding="ISO-8859-1"?>
<jboss-web>
<context-root>security-sample</context-root>
<security-domain>java:/jaas/sample_web_client_security</security-domain>
</jboss-web>
ejb-jar.xml部分session-bean的定义如下:        <enterprise-beans>
    <!-- Session Beans -->
        <session>
        <description><![CDATA[Session Bean for UserManagement]]></description>
<ejb-name>UserManagement</ejb-name>
<home>com.sample.ejb.UserManagementHome</home>
<remote>com.sample.ejb.UserManagement</remote>
<ejb-class>com.sample.ejb.UserManagementBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<security-role-ref>
<role-name>Member_admin</role-name>
<role-link>Member_admin</role-link>
</security-role-ref>
</session>
</enterprise-beans>
com.sample.ejb.UserManagementHome.javapackage com.sample.ejb;/**
 * Home interface for UserManagement.
 */
public interface UserManagementHome
   extends javax.ejb.EJBHome
{
   public static final String COMP_NAME="java:comp/env/ejb/UserManagement";
   public static final String JNDI_NAME="security-sample/UserManagement";   public UserManagement create()
      throws javax.ejb.CreateException,java.rmi.RemoteException;}

解决方案 »

  1.   

    ejb发布成功后才能访问到服务!不知道你的发布成功了吗?
      

  2.   


    我在JBoss的控制台看了一下JNDIView,好像没有发布成功。但是完全相同的代码,在JBoss5.0中就能成功发布并访问。
    这是相关信息:java:comp namespace of the JBossLDAP.war application:
      +- UserTransaction[link -> UserTransaction] (class: javax.naming.LinkRef)
      +- env (class: org.jnp.interfaces.NamingContext)
      |   +- security (class: org.jnp.interfaces.NamingContext)
      |   |   +- realmMapping[link -> java:/jaas/sample_web_client_security] (class: javax.naming.LinkRef)
      |   |   +- subject[link -> java:/jaas/sample_web_client_security/subject] (class: javax.naming.LinkRef)
      |   |   +- securityMgr[link -> java:/jaas/sample_web_client_security] (class: javax.naming.LinkRef)
      |   |   +- security-domain[link -> java:/jaas/sample_web_client_security] (class: javax.naming.LinkRef)
    java: Namespace
      +- ClusteredXAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- jaas (class: javax.naming.Context)
      |   +- HsqlDbRealm (class: org.jboss.security.plugins.SecurityDomainContext)
      |   +- messaging (class: org.jboss.security.plugins.SecurityDomainContext)
      |   +- jmx-console (class: org.jboss.security.plugins.SecurityDomainContext)
      |   +- JmsXARealm (class: org.jboss.security.plugins.SecurityDomainContext)
      +- TransactionPropagationContextImporter (class: com.arjuna.ats.internal.jbossatx.jta.PropagationContextManager)
      +- JmsXA (class: org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl)
      +- comp.ejb3 (class: javax.naming.Context)
      |   NonContext: null
      +- DefaultDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource)
      +- StdJMSPool (class: org.jboss.jms.asf.StdServerSessionPoolFactory)
      +- TransactionManager (class: com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate)
      +- ClusteredConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- TransactionPropagationContextExporter (class: com.arjuna.ats.internal.jbossatx.jta.PropagationContextManager)
      +- ConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- DefaultJMSProvider (class: org.jboss.jms.jndi.JNDIProviderAdapter)
      +- XAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- Mail (class: javax.mail.Session)
      +- comp.original (class: javax.namingMain.Context)
      +- timedCacheFactory (class: javax.naming.Context)
    Failed to lookup: timedCacheFactory, errmsg=org.jboss.util.TimedCachePolicy
      +- SecurityProxyFactory (class: org.jboss.security.SubjectSecurityProxyFactory)
      +- comp (class: javax.naming.Context)
    Global JNDI Namespace
      +- ClusteredConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- XAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- UserTransactionSessionFactory (proxy: $Proxy15 implements interface org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory)
      +- UUIDKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory)
      +- console (class: org.jnp.interfaces.NamingContext)
      |   +- PluginManager (proxy: $Proxy49 implements interface org.jboss.console.manager.PluginManagerMBean)
      +- topic (class: org.jnp.interfaces.NamingContext)
      |   +- testDurableTopic (class: org.jboss.jms.destination.JBossTopic)
      |   +- TopicWithOwnRedeliveryDelay (class: org.jboss.jms.destination.JBossTopic)
      |   +- testTopic (class: org.jboss.jms.destination.JBossTopic)
      |   +- testDistributedTopic (class: org.jboss.jms.destination.JBossTopic)
      |   +- TopicWithOwnDLQAndExpiryQueue (class: org.jboss.jms.destination.JBossTopic)
      |   +- securedTopic (class: org.jboss.jms.destination.JBossTopic)
      +- queue (class: org.jnp.interfaces.NamingContext)
      |   +- D (class: org.jboss.jms.destination.JBossQueue)
      |   +- C (class: org.jboss.jms.destination.JBossQueue)
      |   +- B (class: org.jboss.jms.destination.JBossQueue)
      |   +- A (class: org.jboss.jms.destination.JBossQueue)
      |   +- testQueue (class: org.jboss.jms.destination.JBossQueue)
      |   +- QueueWithOwnDLQAndExpiryQueue (class: org.jboss.jms.destination.JBossQueue)
      |   +- PrivateDLQ (class: org.jboss.jms.destination.JBossQueue)
      |   +- ex (class: org.jboss.jms.destination.JBossQueue)
      |   +- PrivateExpiryQueue (class: org.jboss.jms.destination.JBossQueue)
      |   +- testDistributedQueue (class: org.jboss.jms.destination.JBossQueue)
      |   +- DLQ (class: org.jboss.jms.destination.JBossQueue)
      |   +- QueueWithOwnRedeliveryDelay (class: org.jboss.jms.destination.JBossQueue)
      |   +- ExpiryQueue (class: org.jboss.jms.destination.JBossQueue)
      +- ConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
      +- UserTransaction (class: org.jboss.tm.usertx.client.ClientUserTransaction)
      +- jmx (class: org.jnp.interfaces.NamingContext)
      |   +- invoker (class: org.jnp.interfaces.NamingContext)
      |   |   +- RMIAdaptor (proxy: $Proxy48 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt)
      |   +- rmi (class: org.jnp.interfaces.NamingContext)
      |   |   +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef)
      +- HiLoKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory)
      +- ClusteredXAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)