Tag: 架构

Java Web应用程序“插件”架构

请提供有关如何为Java Web应用程序执行“插件”体系结构的建议。 目前我们在Tomcat servlet容器中使用了非常简单和标准的Spring + Hibernate + Struts 2。 (用maven建造) 我需要像Redmine这样的东西。 可以启用/禁用任何模块,更新 请排除OSGi,Portlet等重要选项。 OSGi太重了,没有很好地采用网络技术。 我已经看过Eclipse Germini ; Portlet它只是旧的,从未流行过。

我是否正确地使用MVC实现了n层应用程序?

由于对设计模式和架构非常不熟悉,我很难向其他人解释我的最新应用程序是如何设计的。 我在表示层中认为它是纯粹的n层,纯MVC和带有MVC的n层之间切换。 目前我认为后者是正确的,但我想要更有经验的开发人员的想法。 怎么运行的: 浏览器向Tomcat发送HTTP请求。 将请求通过web.xml映射到servlet(我称之为控制器) 控制器实例化一个或多个业务对象并调用这些方法,即customerBO.getById(12) ,它们在调用一个或多个DAO方法(即customerDAO.getById(12)之前将再次执行业务逻辑/validation。 BO返回一个CustomerVO列表给控制器 控制器为视图(JSP)准备属性( request.setAttribute(“customers”, customers); )并选择要使用的.jsp文件,该文件将迭代列表并将XHTML呈现给浏览器。 结构(我的建议/理解) 表示层 :目前正在使用我认为的MVC Web实现:servlet(控制器),jsp(视图)和我自己的OO XHTML表单实现(即CustomerForm)就在这里。 应该可以通过切换此表示层来使用Swing / JavaFX / Flex GUI,而无需在下面的层上更改任何内容。 逻辑层 :分为两层,Business Objects(BO)位于顶层。 负责业务逻辑,但除了输入validation之外我还没有找到太多内容,因为应用程序主要由简单的CRUD操作组成……在许多情况下,这些方法只是在DAO层上调用一个具有相同名称的方法。 使用CRUD方法的DAO类,它再次与下面的数据层联系。 还有一个convertToVO(ResultSet res)方法,它们从数据库和(值列表)值对象执行ORM。 所有方法都将值对象作为输入,即customerDAO-> save(voter)并在成功时返回更新的选举者,在失败时返回null。 数据层 :底层数据存储在数据库中或存储为XML文件。 我没有在这里“编码”任何东西,除了一些MySQL存储过程和触发器。 问题(除了标题中的问题): MVC中的M. 当模型是从逻辑层中的业务对象返回的列表/ VO时,我不确定是否可以调用此n层MVC? 当控制器/视图在这里时,模型是否需要驻留在表示层中? 表示层中的表单模板可以称为模型吗? 如果是这样; BO中的forms和列表都被视为MVC中的M? 根据我的理解,在MVC中,视图应该观察模型并更新更新,但这在视图是呈现的XHTML页面的Web应用程序中是不可能的? 这反过来又引出了一个问题:对于Web应用程序与常规桌面应用程序,MVC的实现方式是否不同? 当所有HTTP请求都在web.xml中显式映射时,我没有使用Front Controller模式吗? 要使用Front Controller,我需要将所有请求转发到标准servlet / controller,然后依次评估请求并调用另一个控制器? Business Layer在我的应用程序中感觉有点“无用”。 你通常在这个图层/对象中放什么? […]

动态生成java源代码(不带xjc)

有没有人设法从没有XJC的JAXB模式文件生成Java代码? 有点相似 JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler() 用于动态编译Java代码。 注意:在JDK 6上运行,意味着不推荐使用com.sun.*工具包(感谢Blaise Doughan的提示)

在PostgreSQL JDBC中设置模式似乎不起作用

我用表“user”创建了模式“customer1”,我正在尝试使用Connection.setSchema()从JDBC连接它: String url = “jdbc:postgresql://localhost/project”; Properties props = new Properties(); props.setProperty(“user”, “postgres”); props.setProperty(“password”, “postgres”); try (Connection conn = DriverManager.getConnection(url, props)) { conn.setSchema(“customer1”); try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(“SHOW search_path”)) { rs.next(); System.out.println(“search_path: ” + rs.getString(1)); } try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(“SELECT name FROM user LIMIT 1”)) { if […]

在哪里可以找到Java XML框架的详细比较?

我正在尝试为我的Java项目选择一个XML处理框架,我迷失了名字…… XOM,JDOM等。在哪里可以找到所有流行的Java XML框架的详细比较?

服务和DAO层的责任和使用

我目前正在使用带有Spring插件和hibernate的Struts2开发一个Web应用程序,当我查看在线示例时,我看到了Service和DAO层的使用,现在我看到了Service和数据访问对象层的真正用途是什么? 如果服务层只是调用DAO层的方法来执行CRUD操作。 直接调用DAO图层方法是不明智的? 让我们说这个Dao和服务层的例子 PeopleService @Transactional public class PeopleService { private PeopleDao pDao; public PeopleDao getPDao() { return pDao; } public void setPDao(PeopleDao peopleDao) { this.pDao = peopleDao; } public void createPerson(String name){ pDao.createPerson(name); } public List getPeople(){ return pDao.getPeople(); } } PeopleDao public class PeopleDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { […]

JPA使用多个数据库模式

使用JPA / Spring时遇到一个特定问题我遇到了一些麻烦: 如何动态地将模式分配给实体? 我们有TABLE1属于模式AD,TABLE2属于BD。 @Entity @Table(name = “TABLE1″, schema=”S1D”) … @Entity @Table(name = “TABLE2″, schema=”S2D”) … 模式可能不会在注释属性中进行硬编码,因为它取决于环境(Dev / Acc / Prd)。 (接受模式是S1A和S2A) 我怎样才能做到这一点? 是否可以指定某种类型的占位符: @Entity @Table(name = “TABLE1″, schema=”${schema1}”) … @Entity @Table(name = “TABLE2″, schema=”${schema2}”) … 以便根据驻留在环境中的属性文件替换模式? 干杯