我是Java的新手。在部署Web应用程序时遇到一些麻烦。
我有一个EJB项目,我在Glassfish(4.1)上部署。 我还有第二个JSF WEB应用程序,我部署到同一台服务器。 虽然我考虑将它部署到一个单独的服务器,但它创建了自己的InitialContext,以此类推,以便访问EJB。
Web应用程序依赖于EJB项目。依赖项在Web应用程序的pom中声明。
在部署Web应用程序时,它还会出于某种原因尝试从其他项目部署EJB。
这会因为javax.naming.NameAlreadyBoundException
之类的错误而失败,因为EJB已经在此服务器上单独部署。
如何解决这个问题,因此不会尝试部署来自WEB应用程序的EJB依赖项?
更新:解决方案需要重构,因此不会依赖EJB。
Original
Project A WEB app
________________ ____________
| + EJBs |<------| WEB stuff |
| + Domain cl. | ------------
| + Remote intf. |
----------------
===========================================
Refactored
_______ ____________
| EJBs |----->| Domain cl. |
------- ------------
| ^
| |
| |
v | WEB app
______________ ____________
| Remote intf. | <---| Web stuff |
-------------- ------------
答案 0 :(得分:2)
您可以为scope
provided
提供<dependency>
<groupId>group.id</groupId>
<artifactId>artifact.some.id</artifactId>
<version>1.0</version>
<type>ear</type>
<scope>provided</scope>
</dependency>
依赖项:
class CreateSages < ActiveRecord::Migration
def change
create_table :sages do |t|
t.string :Name
t.string :Email
t.string :Address
t.integer :Number
t.timestamps
end
end
end
这意味着在运行时,依赖项将由容器提供。
见maven doc:
这很像compile,但表示您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。