2013-10-02 1 views
0
@Schedule(minute = "*", hour = "*") 
    public void automaticTimeout() { 
     if (employeeDao == null) { 
      try { 
       InitialContext ctx = new InitialContext(); 
       employeeDao = (EmployeeDAO) ctx.lookup("java:comp/env/EmployeeDAO"); 
      } catch (NamingException ex) { 
       Logger.logFatal("automaticTimeout: employeeDao null. Something must be wrong", ex); 
      } 
     } 
     employeeDao.timeoutHandler(); 
    } 

Я мигрирую приложения Java EE на Java EE 7, но таймер EJB не работает должным образом. Когда я использую аннотацию @Schedule, появляется ошибка, Я использую JDK 7 и Glassfish4, В дополнение к этому я использую Glassfish4 Full platform, поэтому IDE предупреждает меня «Постоянный таймер не разрешен в проекте, который нацелен на Java EE 7 Веб-профиль " Повторяю, 100% уверен, что я использую Fullfare Glassfish4.«Persistent таймер не допускаются в проекте, которые нацелены на Java EE 7 Web Profile» при использовании GF4 полного профиля

2013-10-02T16:40:00.048+0300] [glassfish 4.0] [WARNING] [ejb.system_exception] [javax.enterprise.system.container.ejb.com.sun.ejb.containers] [tid: _ThreadID=162 _ThreadName=__ejb-thread-pool5] [timeMillis: 1380721200048] [levelValue: 900] [[ 
    EJB5184:A system exception occurred during an invocation on EJB TimerSessionBean, method: public void com.timer.TimerSessionBean.automaticTimeout()]] 

[2013-10-02T16:40:00.048+0300] [glassfish 4.0] [WARNING] [] [javax.enterprise.system.container.ejb.com.sun.ejb.containers] [tid: _ThreadID=162 _ThreadName=__ejb-thread-pool5] [timeMillis: 1380721200048] [levelValue: 900] [[ 

javax.ejb.EJBTransactionRolledbackException 
    at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2279) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2060) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
    at com.sun.proxy.$Proxy1024.timeoutHandler(Unknown Source) 
    at com.timer.TimerSessionBean.automaticTimeout(TimerSessionBean.java:53) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) 
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4695) 
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:630) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundTimeout(SystemInterceptorProxy.java:145) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) 
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4667) 
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4655) 
    at com.sun.ejb.containers.BaseContainer.callEJBTimeout(BaseContainer.java:3993) 
    at com.sun.ejb.containers.EJBTimerService.deliverTimeout(EJBTimerService.java:1199) 
    at com.sun.ejb.containers.EJBTimerService.access$000(EJBTimerService.java:89) 
    at com.sun.ejb.containers.EJBTimerService$TaskExpiredWork.run(EJBTimerService.java:1919) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean 
    at com.sun.ejb.containers.EJBContainerTransactionManager.checkExceptionClientTx(EJBContainerTransactionManager.java:662) 
    at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:507) 
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4475) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2009) 
    ... 44 more 
Caused by: java.lang.NullPointerException 
    at com.db.dao.EmployeeDaoImpl.setOffline(PersonDaoImpl.java:232) 
    at com.db.dao.EmployeeDaoImpl.timeoutHandler(PersonDaoImpl.java:246) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) 
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4695) 
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:630) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) 
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4667) 
+0

Что говорит лог-сервер? –

+0

Я добавил журнал сервера. – Poyraz

ответ

1

Предупреждение связано с некоторыми ошибочными настройками в затмении, что заставляет его полагать, что ваш сервер является веб-профилем.

Глядя на вложенный стеке-дампе я могу видеть ваше @Timeout аннотированного метода является на самом деле выполняются, но бросает нуль-указатель исключение

Caused by: java.lang.NullPointerException 
    at com.db.dao.EmployeeDaoImpl.setOffline(PersonDaoImpl.java:232) 
    at com.db.dao.EmployeeDaoImpl.timeoutHandler(PersonDaoImpl.java:246) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
Смежные вопросы