如何將Netbeans @Stateless
和@Remote
EJB從EJB module
部署到Glassfish?如何將NetBeans中的EJB模塊部署到Glassfish
Netbeans能夠這樣做,但這是如何在IDE之外完成的?
服務器日誌:
[email protected]:~$
[email protected]:~$ 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<Object>) 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<Object>) 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<Object>, 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.]]
[email protected]:~$
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模塊如果EJB模塊依賴於 其他一些jar文件不工作 - 這些罐子文件將被忽略,而不是部署 到服務器,從而導致來自EJB模塊的ClassNotFound異常 。類似的情況在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
那是錯誤影響HelloEJB的部署? HelloEAR的代碼幾乎完全一樣,唯一的區別是它在Netbeans中創建爲Enterprise Application
,EJB module
爲HelloEAR-ejb
,而不是HelloEJB
爲EJB module
。
如果模塊不能部署到glassfish,它們用於什麼?是否使用EJB module
一個死衚衕,一個錯誤的途徑來部署一個@Stateless
和@Remote
EJB?