如何将EJB模块从Netbeans部署到Glassfish

如何从EJB module将Netbeans @Stateless@Remote EJB部署到Glassfish?

Netbeans能够这样做,但是如何在IDE之外完成?

服务器日志:

 thufir@dur:~$ thufir@dur:~$ tail glassfish-4.1/glassfish/domains/domain1/logs/server.log -n 34 at java.lang.Thread.run(Thread.java:744) ]] [2014-09-22T01:41:57.266-0700] [glassfish 4.1] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=42 _ThreadName=admin-listener(5)] [timeMillis: 1411375317266] [levelValue: 1000] [[ Exception while deploying the app [HelloEJB] : Invalid ejb jar [HelloEJB]: it contains zero ejb. Note: 1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-driven bean. 2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar. 3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.]] [2014-09-22T03:52:08.027-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383128027] [levelValue: 800] [[ visiting unvisited references]] [2014-09-22T03:52:08.067-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383128067] [levelValue: 800] [[ visiting unvisited references]] [2014-09-22T03:52:08.511-0700] [glassfish 4.1] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383128511] [levelValue: 800] [[ Portable JNDI names for EJB HelloBean: [java:global/HelloEJB/HelloBean, java:global/HelloEJB/HelloBean!hello.HelloBeanRemote]]] [2014-09-22T03:52:08.513-0700] [glassfish 4.1] [INFO] [AS-EJB-00055] [javax.enterprise.ejb.container] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383128513] [levelValue: 800] [[ Glassfish-specific (Non-portable) JNDI names for EJB HelloBean: [hello.HelloBeanRemote#hello.HelloBeanRemote, hello.HelloBeanRemote]]] [2014-09-22T03:52:09.142-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383129142] [levelValue: 900] [[ WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] [2014-09-22T03:52:09.152-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383129152] [levelValue: 900] [[ WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] [2014-09-22T03:52:09.157-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383129157] [levelValue: 900] [[ WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] [2014-09-22T03:52:10.646-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411383130646] [levelValue: 800] [[ HelloEJB was successfully deployed in 2,783 milliseconds.]] thufir@dur:~$ package hello; import javax.ejb.Stateless; @Stateless public class HelloBean implements HelloBeanRemote { @Override public String hi() { return "hello world"; } @Override public String bye() { return "goodbye"; } } package hello; import javax.ejb.Remote; @Remote public interface HelloBeanRemote { public String hi(); public String bye(); } 

也可以看看:

如果EJB模块依赖于某些其他jar文件,则部署独立EJB模块不起作用 – 这些jar文件被忽略并且未部署到服务器,因此将导致EJB模块的ClassNotFoundexception。 类似的情况在AppClient中。

这从来没有工作过,问题存在于早期的4.x NB版本之后。

解决方法是在EAR项目中部署EJB模块及其所需的JAR,或者使用命令行,例如。 “glassfishv3 / bin / asadmin deploy –libraries projs / JavaLibrary1 / dist / JavaLibrary1.jar projs / EJBModule2 / dist / EJBModule2.jar”,它部署独立的EJB模块EJBModule2.jar及其所需的库JavaLibrary1.jar。

https://netbeans.org/bugzilla/show_bug.cgi?id=186331

这个bug会影响HelloEJB的部署吗? HelloEAR的代码几乎完全相同,唯一的区别是它在Netbeans中创建为具有HelloEAR-ejbEJB module而不是HelloEJB作为EJB moduleEnterprise Application

如果模块不能部署到glassfish,它们用于什么? 使用EJB module是一个死胡同,是部署@Stateless@Remote EJB的错误途径吗?

尝试执行相同的EJB模块,但通过企业应用程序创建它。 选择New Project> Java EE> Enterprise Application。 您可以取消选择“Web应用程序模块”选项,只选择“创建EJB模块”选项。 在对EJB进行编码之后,左键单击您的Entrerprise应用程序并选择“部署”。 此video可以为您提供帮助。