- I have cloned a chatterbox-Imap solution from https://github.com/apache/tomee-chatterbox and did some modifications for it to run on payara server community server version 5.2022.1 and java EE 7 and java JDK 1.8.
- The solution is also highlighted here https://www.youtube.com/watch?v=KxE8N7doUwU&t=153s
- The solution comprises a. [JCA] [resource adaptor] (Inbound) which connects, using IMAP, to a mail server. I have managed to deploy the resource adapter on payara and connected it to my gmail account. When it has connected, the resource adapter is able to read inbox mail and flags them as read.
b. There is also a web application (sample) which uses the resource adapter. According to the presenters on https://www.youtube.com/watch?v=KxE8N7doUwU&t=153s, the MDB in the sample application is activated by each email received by the adapter. The code is available at https://github.com/tikonza/tomee-chatterbox.
- As stated above, I am able to deploy the resource adapter (.rar) successfully. But when I deploy the sample application (.war) containing the MDB, I am getting the following exception: [2023-07-26T05:39:14.198+0200] [Payara 5.2022.1] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=188 _ThreadName=admin-thread-pool::admin-listener(4)] [timeMillis: 1690342754198] [levelValue: 1000] [[ Exception while loading the app : EJB Container initialization error java.lang.Exception at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:215) at org.glassfish.ejb.mdb.MessageBeanContainer.(MessageBeanContainer.java:221) at org.glassfish.ejb.mdb.MessageBeanContainerFactory.createContainer(MessageBeanContainerFactory.java:63) at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:225) at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:286) at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:104) at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:218) at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:334) at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:570) at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:588) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:360) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:360) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:120) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755) at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:272) at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:240) at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:294) at org.glassfish.admin.rest.resources.TemplateListOfResource.createResource(TemplateListOfResource.java:136) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:475) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:397) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:255) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) at org.glassfish.jersey.internal.Errors.process(Errors.java:292) at org.glassfish.jersey.internal.Errors.process(Errors.java:274) at org.glassfish.jersey.internal.Errors.process(Errors.java:244) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:234) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680) at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:356) at org.glassfish.admin.rest.adapter.RestAdapter$2.service(RestAdapter.java:335) at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:189) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549) at java.lang.Thread.run(Thread.java:748) Caused by: javax.resource.spi.UnavailableException: EndpointFactory is currently not available at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.createEndpoint(ConnectorMessageBeanClient.java:447) at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.createEndpoint(ConnectorMessageBeanClient.java:406) at org.apache.tomee.chatterbox.imap.adapter.ImapResourceAdapter.endpointActivation(ImapResourceAdapter.java:255) at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:207)
I am new to JCA and MDBs. Please help with the following questions:
a. There is this exception: Caused by: javax.resource.spi.UnavailableException: EndpointFactory is currently not available So which system/component is supposed to make sure that the EndpointFactory is available.
b. Which EndpointFactory is being talked about here. Note when the resource adapter is deployed, I am able to see that it has logged in to my gmail account and marked mail as 'read'.
c. How can I know that an EndpointFactory is ready. Is there a tool? If possible give sample resource adapter (inbound) which listens to a socket endpoint
d. How can I resolve this issue, i.e. what should I change on the resource adapter or/and on the sample application for it to work.
- As stated above, I am able to deploy the resource adapter (.rar) successfully. But when I deploy the .war that contains the MDB, I am getting an exception: Caused by: javax.resource.spi.UnavailableException: EndpointFactory is currently not available