2014-09-22 60 views
3

如何將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 ApplicationEJB moduleHelloEAR-ejb,而不是HelloEJBEJB module

如果模塊不能部署到glassfish,它們用於什麼?是否使用EJB module一個死衚衕,一個錯誤的途徑來部署一個@Stateless@Remote EJB?

回答

2

嘗試執行相同的EJB模塊,但通過企業應用程序創建它。選擇新建項目> Java EE>企業應用程序。您可以取消選擇「Web應用程序模塊」選項,只保留選中的「創建EJB模塊」選項。編寫EJB之後,在您的Entrerprise應用程序上單擊左鍵並選擇「部署」。 This視頻可以幫助你。

相關問題