Jakarta ee 让JavaEE6拦截器工作(GlassFish 3.1上的焊接)
我正在从事一个项目,我想使用拦截器来记录ManagedBean的使用情况。正如我在说明书和许多示例中所读到的,当前的CDI实现应该是可能的。代码主要是从glassfishjavaee教程或我在web上找到的其他源代码中复制的。它没有特殊的实现。它应该只记录 我尝试的是: LoggedInterceptor.javaJakarta ee 让JavaEE6拦截器工作(GlassFish 3.1上的焊接),jakarta-ee,glassfish,aop,interceptor,cdi,Jakarta Ee,Glassfish,Aop,Interceptor,Cdi,我正在从事一个项目,我想使用拦截器来记录ManagedBean的使用情况。正如我在说明书和许多示例中所读到的,当前的CDI实现应该是可能的。代码主要是从glassfishjavaee教程或我在web上找到的其他源代码中复制的。它没有特殊的实现。它应该只记录 我尝试的是: LoggedInterceptor.java package test.interceptors; import java.io.Serializable; import javax.interceptor.AroundInv
package test.interceptors;
import java.io.Serializable;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
@Logged
@Interceptor
public class LoggedInterceptor implements Serializable {
private static final long serialVersionUID = 1L;
public LoggedInterceptor() {
}
@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext)
throws Exception {
System.out.println(
"Entering method: " + invocationContext.getMethod().getName()
+ " in class "
+ invocationContext.getMethod().getDeclaringClass().getName());
return invocationContext.proceed();
}
}
Logged.java
package test.interceptors;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.interceptor.InterceptorBinding;
@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({
METHOD,
TYPE
})
public @interface Logged {
}
WEB-INF/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">
<interceptors>
<class>test.interceptors.LoggedInterceptor</class>
</interceptors>
</beans>
我从WELD资源加载程序中得到的是一个类not found异常
[#|2011-04-04T14:03:37.394+0200|SEVERE|glassfish3.1|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=31;_ThreadName=Thread-1;|Exception while loading the app : Error loading class test.interceptors.LoggedInterceptor
org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class test.interceptors.LoggedInterceptor
at org.jboss.weld.resources.DefaultResourceLoader.classForName(DefaultResourceLoader.java:61)
at org.jboss.weld.manager.Enabled$ClassLoader.apply(Enabled.java:67)
at org.jboss.weld.manager.Enabled$ClassLoader.apply(Enabled.java:55)
at com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:435)
at java.util.AbstractList$Itr.next(AbstractList.java:345)
at org.jboss.weld.manager.Enabled.createMetadataMap(Enabled.java:130)
at org.jboss.weld.manager.Enabled.<init>(Enabled.java:100)
at org.jboss.weld.manager.Enabled.of(Enabled.java:82)
at org.jboss.weld.bootstrap.BeanDeployment.<init>(BeanDeployment.java:104)
at org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:185)
at org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:156)
at org.jboss.weld.bootstrap.WeldBootstrap.startContainer(WeldBootstrap.java:287)
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:167)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:262)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:460)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465)
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: test.interceptors.LoggedInterceptor
at com.sun.enterprise.loader.ASURLClassLoader.findClassData(ASURLClassLoader.java:808)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:696)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at org.jboss.weld.resources.DefaultResourceLoader.classForName(DefaultResourceLoader.java:52)
... 42 more
[#| 2011-04-04T14:03:37.394+0200 |严重| glassfish3.1 | javax.enterprise.system.tools.admin.org.glassfish.deployment.admin | u ThreadID=31;| u ThreadName=Thread-1;|加载应用程序时出现异常:加载类test.interceptors.LoggedInterceptor时出错
org.jboss.weld.resources.spi.ResourceLoadingException:加载类test.interceptors.LoggedInterceptor时出错
位于org.jboss.weld.resources.DefaultResourceLoader.classForName(DefaultResourceLoader.java:61)
位于org.jboss.weld.manager.Enabled$ClassLoader.apply(Enabled.java:67)
位于org.jboss.weld.manager.Enabled$ClassLoader.apply(Enabled.java:55)
位于com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:435)
位于java.util.AbstractList$Itr.next(AbstractList.java:345)
位于org.jboss.weld.manager.Enabled.createMetadataMap(Enabled.java:130)
位于org.jboss.weld.manager.Enabled.(Enabled.java:100)
位于org.jboss.weld.manager.Enabled.of(Enabled.java:82)
位于org.jboss.weld.bootstrap.BeanDeployment(BeanDeployment.java:104)
在org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:185)上
在org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:156)上
位于org.jboss.weld.bootstrap.WeldBootstrap.startContainer(WeldBootstrap.java:287)
位于org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:167)
位于org.glassfish.kernel.event.eventsiml.send(eventsiml.java:128)
位于org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:262)
位于com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:460)
位于com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
位于org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:370)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:1067)
com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
[#|2011-04-04T14:03:37.394+0200|SEVERE|glassfish3.1|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=31;_ThreadName=Thread-1;|Exception while loading the app : Error loading class test.interceptors.LoggedInterceptor
org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class test.interceptors.LoggedInterceptor
at org.jboss.weld.resources.DefaultResourceLoader.classForName(DefaultResourceLoader.java:61)
at org.jboss.weld.manager.Enabled$ClassLoader.apply(Enabled.java:67)
at org.jboss.weld.manager.Enabled$ClassLoader.apply(Enabled.java:55)
at com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:435)
at java.util.AbstractList$Itr.next(AbstractList.java:345)
at org.jboss.weld.manager.Enabled.createMetadataMap(Enabled.java:130)
at org.jboss.weld.manager.Enabled.<init>(Enabled.java:100)
at org.jboss.weld.manager.Enabled.of(Enabled.java:82)
at org.jboss.weld.bootstrap.BeanDeployment.<init>(BeanDeployment.java:104)
at org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:185)
at org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:156)
at org.jboss.weld.bootstrap.WeldBootstrap.startContainer(WeldBootstrap.java:287)
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:167)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:262)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:460)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465)
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: test.interceptors.LoggedInterceptor
at com.sun.enterprise.loader.ASURLClassLoader.findClassData(ASURLClassLoader.java:808)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:696)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at org.jboss.weld.resources.DefaultResourceLoader.classForName(DefaultResourceLoader.java:52)
... 42 more
@Named
@Logged
@SessionScoped
public class MainController implements Serializable {
public void callMe() {
System.out.println("called at " + new Date());
}
}
<h:form>
<h:outputText value="hallo" />
<h:commandButton action="#{mainController.callMe}" label="jo" />
</h:form>