我有一个本地客户端j2se应用程序,后端是derby(javadb)数据库,dao是jpa eclipselink。 我如何将这些数据库pojo发送到与tomcat服务器上的spring(jsp)应用程序链接的远程数据库
这只是一个带有swing的富客户端,它连接到tomcat部署的Web应用程序。客户端应该接收数据并通过HTTP请求将数据发送到服务的服务器端, 什么是最好的解决方案??
01)使用Eclipselink通过套接字直接进行数据库连接/事务 02)网络服务?? 03)只需将帖子请求发送到spring web应用程序并将其转换为POJO并持久保存到数据库
我如何实现这一目标?
答案 0 :(得分:1)
免责声明我不建议您将应用从Spring迁移到EJB。尽管人们喜欢将它们作为一种或另一种进行比较,但您可以同时使用它们。它是你的应用程序,你可以像你想要的那样务实:)
如果您愿意,您不一定要使用Web服务。您也可以将OpenEJB war文件放入Tomcat,并创建一个远程EJB来来回发送数据。
一旦你进入OpenEJB,你可以在你的应用程序中放置一个远程@Stateless bean,如下所示:
@Stateless
@Remote
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
然后查找并通过Swing应用程序通过HTTP执行它,如下所示:
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");
InitialContext ctx = new InitialContext(p);
MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
客户端所需要的只是OpenEJB war文件中的openejb-client.jar和javaee-api.jar以及您自己的类。
因为它已经是一个Spring应用程序,所以不要试图使用@PersistenceContext
来获取对EntityManager的引用,以便EJB可以使用它。只是弄清楚如何通过任何可能的方式公开Spring创建(或创建)EJB的EntityManagerFactory。直接和丑陋但有效的方法将是MyBean类的静态和一些设置它的启动逻辑。您只需使用EJB进行远程处理,因此无需进行更高级的集成。
如果您确实需要用于非Java通信的Web服务,您可以将@WebService
添加到bean的顶部,然后它将具有WSDL以及为其生成的所有内容:
@Stateless
@Remote
@WebService(portName = "MyBeanPort",
serviceName = "MyBeanService",
targetNamespace = "http://superbiz.org/wsdl"
endpointInterface = "org.superbiz.MyBeanRemote")
public class MyBean implements MyBeanRemote {
//...
}
public interface MyBeanRemote {
// any methods you want remotely invoked
}
然后您也可以使用相同的bean作为Web服务,如:
Service service = Service.create(
new URL("http://tomcatserver:8080/MyBeanImpl?wsdl"),
new QName("http://superbiz.org/wsdl", "MyBeanService"));
assertNotNull(service);
MyBeanRemote myBean = service.getPort(MyBeanRemote.class);
这两种方法都是通过http,但Web服务方法会慢一点,因为它不是二进制协议。