Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义SessionListener,名称在此上下文中未绑定,javax.naming.NameNotFoundException_Java_Spring_Servlets_Dependency Injection_Annotations - Fatal编程技术网

自定义SessionListener,名称在此上下文中未绑定,javax.naming.NameNotFoundException

自定义SessionListener,名称在此上下文中未绑定,javax.naming.NameNotFoundException,java,spring,servlets,dependency-injection,annotations,Java,Spring,Servlets,Dependency Injection,Annotations,我正在尝试实现HttpSessionListener,以便此侦听器的用户可以将ISessionEvent接口的实现注册到会话事件。代码如下: public class MySessionListener implements HttpSessionListener{ @Resource ISessionEvent sessionEvent; public ISessionEvent getSessionEvent() { return sessionEvent; } pub

我正在尝试实现HttpSessionListener,以便此侦听器的用户可以将ISessionEvent接口的实现注册到会话事件。代码如下:


public class MySessionListener implements HttpSessionListener{

 @Resource
 ISessionEvent sessionEvent;

 public ISessionEvent getSessionEvent() {
  return sessionEvent;
 }

 public void setSessionEvent(ISessionEvent sessionEvent) {
  this.sessionEvent = sessionEvent;
 }

 @Override
 public void sessionCreated(HttpSessionEvent arg0) {
  sessionEvent.SessionCreated(arg0.getSession());
 }

 @Override
 public void sessionDestroyed(HttpSessionEvent arg0) {
  sessionEvent.SessionDestroyed(arg0.getSession());
 }
}
当用户实现ISessionEvent并将其添加为bean时,当这些事件发生时,将调用实现的SessionCreated和SessionDestroyed函数。你可以问,为什么不在监听器里写一些方法,我不,我只是在尝试

当我尝试上面的代码时,我收到以下错误消息:


javax.naming.NameNotFoundException: Name com.mehmet6parmak.sessionlistener.MySessionListener is not bound in this Context
 at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
 at org.apache.catalina.util.DefaultAnnotationProcessor.lookupFieldResource(DefaultAnnotationProcessor.java:278)
 at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:187)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4082)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
 at org.apache.catalina.core.StandardService.start(StandardService.java:519)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
资源注释导致错误,但我无法解决它

谢谢大家

接口和实现
Bean定义



解决方案:使用works中使用的方法。

我相信这仅仅是因为
ISessionEvent
没有得到管理。它是否有
@Resource
注释?大概

@Resource
public class ISessionEvent {...}

我对带注释的听众和同伴没有经验,但是, 我检查了规格上的方法,我满足以下要求:

protected static void lookupFieldResource(javax.naming.Context context,
                                          java.lang.Object instance,
                                          java.lang.reflect.Field field,
                                          java.lang.String name,
                                          java.lang.Class<?> clazz)
                                   throws javax.naming.NamingException,
                                          java.lang.IllegalAccessException
受保护的静态void lookupFieldResource(javax.naming.Context),
java.lang.Object实例,
java.lang.reflect.Field字段,
java.lang.String名称,
java.lang.Class(clazz)
抛出javax.naming.NamingException,
java.lang.IllegalAccessException
在指定字段中注入资源。 抛出: javax.naming.NamingException java.lang.IllegalAccessException

这意味着,您尝试将一个资源注入到您的字段中,该字段必须是JNDI资源

@资源注释使用JNDI-条目:

您忘记在JNDI上下文中定义资源了吗

更新 资源注入文章:

您正在使用哪个版本的tomcat我添加了,但仍然收到相同的错误消息,我添加了接口、实现和bean定义,如果您有任何其他想法,我将不胜感激。我尝试了@Resource(name=“com.mehmet6parmak.sessionlistener/MySessionListener”),但没有任何更改。@mehmet6parmak:为什么有斜线,而不是句点,在
MySessionListener
之前。


<context:annotation-config/>
<context:component-scan base-package="com.mehmet6parmak">
</context:component-scan>

<bean id="sessionEvent" autowire="byName" class="com.mehmet6parmak.sessionlistener.SessionEvent"></bean>

@Resource
public class ISessionEvent {...}
protected static void lookupFieldResource(javax.naming.Context context,
                                          java.lang.Object instance,
                                          java.lang.reflect.Field field,
                                          java.lang.String name,
                                          java.lang.Class<?> clazz)
                                   throws javax.naming.NamingException,
                                          java.lang.IllegalAccessException