我正在JDeveloper 11.1.1.4中开发一个JAX-WS Web服务,它应该使用以前部署到WebLogic服务器的JAR中的EJB。WebService项目和EJB项目都是我自己的代码,但我想分别部署它们。现在我正在试验这种设置。
在Examplejb项目中,我有一个实现远程接口示例的bean ExampleBean。
@Remote
public interface Example {
public String doRemoteStuff();
}
@Stateless(name = "Example", mappedName = "ExampleApplication-ExampleEJB-Example")
public class ExampleBean implements Example {
public String doRemoteStuff() {
return "did remote stuff";
}
}
在该项目中,我有两个部署描述符(ejb-jar.xml和weblogic ejb-jar.xml):
ejb-jar.xml
<?xml version = '1.0' encoding = 'UTF-8'?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0" xmlns="http://java.sun.com/xml/ns/javaee">
<enterprise-beans>
<session>
<ejb-name>Example</ejb-name>
</session>
</enterprise-beans>
</ejb-jar>
weblogic-ejb-jar.xml
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">
<weblogic-enterprise-bean>
<ejb-name>Example</ejb-name>
<stateless-session-descriptor/>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
此外,我还创建了一个名为example EJB的EJB JAR部署概要文件。jar并设法将其部署到服务器上。
我有一个示例WebService项目:
@WebService(serviceName = "ExampleWebService")
public class ExampleWebService {
@EJB
Example example;
public String doStuff() {
return example.doRemoteStuff();
}
}
我在这个项目中添加了Examplejb项目依赖项(这样它就可以编译了)。我在这个项目中仅有的XML是web。用于描述servlet的xml。此外,在创建Web服务时,我有一个由jDeveloper自动创建的Web服务WAR文件。最后,我创建了一个名为example ws的EAR部署配置文件,它在应用程序集中只包含WebServices WAR文件。
我需要做什么才能成功?此外,如果从另一个项目(例如,AdditionalCEPLEEJB)引用了具有使用CEPLEBean的附加bean,那么过程会是什么?我如何从那里引用示例豆?
非常感谢你能给我的任何帮助!
编辑:
我已经设法从WebService引用了EJB!
在Examplejb项目中,我修改了weblogic ejb jar。xml,现在看起来是这样的:
weblogic-ejb-jar.xml
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">
<weblogic-enterprise-bean>
<ejb-name>Example</ejb-name>
<stateless-session-descriptor>
<pool>
<max-beans-in-free-pool>10</max-beans-in-free-pool>
<initial-beans-in-free-pool>3</initial-beans-in-free-pool>
</pool>
<business-interface-jndi-name-map>
<business-remote>hr.example.Example</business-remote>
<jndi-name>ejb/example-ejb/Example</jndi-name>
</business-interface-jndi-name-map>
</stateless-session-descriptor>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
在ExampleWS项目中,我添加了一个部署描述符weblogic。如下所示的xml:
weblogic。xml
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
<ejb-reference-description>
<ejb-ref-name>ExampleReference</ejb-ref-name>
<jndi-name>ejb/example-ejb/Example</jndi-name>
</ejb-reference-description>
</weblogic-web-app>
请注意,ExampleReference值和ejb/example ejb/example值是我决定输入的内容——我认为它们或多或少是开发人员的选择。
另外,我在我的WebService中引用了EJB,使用的值是示例引用值,所以我的示例WebService看起来像这样:
示例Web服务
@WebService(serviceName = "ExampleWebService")
public class ExampleWebService {
@EJB(
name="ExampleReference"
)
Example example;
public String doStuff() {
return example.doRemoteStuff();
}
}
最后,在ExampleWS(WebServices.war)的部署配置文件中,我添加了依赖项贡献者,并检查了接口示例。类元素(不是具有实现的ExampleBean.java)。
现在,如果示例bean是从另一个EJB项目(而不是Web服务)引用的,这将如何工作?
所以,对于所有遇到同样问题的人,我已经解决了。除了使用InitialContext,在EJB3.0中无法查找远程EJB。查找(“jndi/name”)。此外,在某些ClassCastException情况下,缩小对象范围似乎有帮助,所以我倾向于这样做作为预防措施。以下是我查找EJB的方式:
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
public Object lookup (String jndiName, Class type) throws NamingException {
return PortableRemoteObject.narrow(InitialContext.doLookup(jndiName), type);
}
如果使用EJB 3.1,有一种方法使用@EJB(lookup="jndi/name"),但是因为我没有使用这个版本,我不能保证这个工作。
问题内容: 当要依赖的测试与具有此批注的测试属于同一类时,批注的属性可以正常工作。但是,如果要测试的方法和依赖的方法位于不同的类中,则该方法不起作用。示例如下: 有什么办法可以解决这个限制?一种简单的解决方法是在该调用中创建测试。但这将是过多的重复。 问题答案: 将方法放在中并使用。 建议验证*中的配置,并在该处出现问题时抛出错误,以使测试无法运行。这样,测试可以只关注测试。
编辑:我今天早上意识到这个异常似乎与Spring引导执行器有关,它似乎只在生产中运行,而不是在从Spring工具套件中启动prohect时运行。(请参见文章末尾的异常跟踪) 主数据库是使用jpa访问的,关于该数据库的所有内容都在一个特定的包中。 另一个数据库用于直接使用Hibernate访问遗留bean。关于那些遗留bean的一切都在一个不同的包中。 有些bean在两个包中具有相同的名称,但是由于
我想使用ManagedBean类Users。java,创建两个具有不同作用域的bean实例。我尝试了两种方法: 1.为用户使用ManagedBean和SessionScope注释(这将创建一个带有会话范围的用户),并在faces-config.xml声明另一个来自用户的MenagedBean,带有请求范围。 注意:“组件”来自Spring框架,暂时可以忽略。 在faces-config.xml:
我有一个场景,我已经在不同的节点上部署了4个Kafka消费者实例。我的主题有4个分区。现在,我想配置消费者,使他们都从主题的不同分区获取。 我知道一个事实,如果消费者来自同一个消费者组,他们会确保分区被平分。但在我的情况下,他们不在同一组。
我开发了一个简单的代码,通过在实体类“employee”和“Department”上使用JPA的CRUD操作(find)来显示员工姓名。在运行代码时,它工作正常,但真正的问题来了,当我从应用程序创建一个jar文件时,jar文件出现了一个异常,我将该异常写在一个txt文件中 下面是Employee类 下面是显示员工姓名和学位的类 下面是异常“exception[EclipseLink-28019](
我制作了一个Java应用程序,它使用Maven、JavaFX和一些其他依赖项。以前,构建一个可执行jar很容易,但由于Java11是模块化的,不包含JavaFX,所以我无法构建一个工作的jar。 我已经尝试了很多事情,但我不知道我现在应该做什么。 我的pom。xml 我试图构建包含所有依赖项的工件,但在运行(java-jar)时出现了一个错误: 编辑 我曾尝试使用Jlink构建一个包含JavaFX