Commit 4e4b9d82 by Tuomas Riihimäki

Foodwavea.

1 parent 20c3a322
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.facade.FoodWaveTemplateFacade; import fi.insomnia.bortal.facade.FoodWaveTemplateFacade;
import fi.insomnia.bortal.model.FoodWaveTemplate; import fi.insomnia.bortal.model.FoodWaveTemplate;
...@@ -12,29 +15,23 @@ import fi.insomnia.bortal.model.FoodWaveTemplate; ...@@ -12,29 +15,23 @@ import fi.insomnia.bortal.model.FoodWaveTemplate;
* Session Bean implementation class FoodWaveBean * Session Bean implementation class FoodWaveBean
*/ */
@Stateless @Stateless
@DeclareRoles("SHOP/WRITE") @DeclareRoles(ShopPermission.S_MANAGE_PRODUCTS)
public class FoodWaveBean implements FoodWaveBeanLocal { public class FoodWaveBean implements FoodWaveBeanLocal {
@EJB @EJB
private FoodWaveTemplateFacade fwtFacade; private FoodWaveTemplateFacade fwtFacade;
/**
* Default constructor.
*/
public FoodWaveBean() {
// TODO Auto-generated constructor stub
}
@Override @Override
@RolesAllowed("SHOP/WRITE") @RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
public void createTemplate(FoodWaveTemplate waveTemplate) { public List<FoodWaveTemplate> getTemplates() {
fwtFacade.create(waveTemplate); return fwtFacade.findAllTemplates();
} }
@Override @Override
@RolesAllowed("SHOP/WRITE") @RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
public FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate) { public FoodWaveTemplate saveOrCreateTemplate(FoodWaveTemplate template) {
return fwtFacade.merge(waveTemplate); // TODO Auto-generated method stub
return null;
} }
} }
...@@ -5,6 +5,7 @@ import java.security.Principal; ...@@ -5,6 +5,7 @@ import java.security.Principal;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.SessionContext; import javax.ejb.SessionContext;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.resource.spi.IllegalStateException; import javax.resource.spi.IllegalStateException;
...@@ -56,6 +57,7 @@ import fi.insomnia.bortal.model.User; ...@@ -56,6 +57,7 @@ import fi.insomnia.bortal.model.User;
ShopPermission.S_SHOP_TO_OTHERS, ShopPermission.S_SHOP_TO_OTHERS,
ShopPermission.S_MANAGE_PRODUCTS, ShopPermission.S_MANAGE_PRODUCTS,
ShopPermission.S_SHOP_PRODUCTS, ShopPermission.S_SHOP_PRODUCTS,
ShopPermission.S_SHOP_FOODWAVE,
BillPermission.S_CREATE_BILL, BillPermission.S_CREATE_BILL,
BillPermission.S_READ_ALL, BillPermission.S_READ_ALL,
...@@ -88,6 +90,7 @@ import fi.insomnia.bortal.model.User; ...@@ -88,6 +90,7 @@ import fi.insomnia.bortal.model.User;
EventPermission.S_MANAGE_PROPERTIES, EventPermission.S_MANAGE_PROPERTIES,
}) })
@LocalBean
public class PermissionBean implements PermissionBeanLocal { public class PermissionBean implements PermissionBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class); private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class);
......
...@@ -25,6 +25,7 @@ public class ProductPBean { ...@@ -25,6 +25,7 @@ public class ProductPBean {
@EJB @EJB
private PermissionBean permbean; private PermissionBean permbean;
@EJB
private AccountEventFacade accounteventfacade; private AccountEventFacade accounteventfacade;
/** /**
......
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBean;
import fi.insomnia.bortal.model.FoodWaveTemplate; import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.model.FoodWaveTemplate_;
@Stateless @Stateless
@LocalBean @LocalBean
public class FoodWaveTemplateFacade extends IntegerPkGenericFacade<FoodWaveTemplate> { public class FoodWaveTemplateFacade extends IntegerPkGenericFacade<FoodWaveTemplate> {
@EJB
private EventBean eventbean;
public FoodWaveTemplateFacade() { public FoodWaveTemplateFacade() {
super(FoodWaveTemplate.class); super(FoodWaveTemplate.class);
} }
public List<FoodWaveTemplate> findAllTemplates() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<FoodWaveTemplate> cq = cb.createQuery(FoodWaveTemplate.class);
Root<FoodWaveTemplate> root = cq.from(FoodWaveTemplate.class);
cb.equal(root.get(FoodWaveTemplate_.event), eventbean.getCurrentEvent());
return getEm().createQuery(cq).getResultList();
}
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.model.FoodWaveTemplate; import fi.insomnia.bortal.model.FoodWaveTemplate;
@Local @Local
public interface FoodWaveBeanLocal { public interface FoodWaveBeanLocal {
void createTemplate(FoodWaveTemplate waveTemplate); List<FoodWaveTemplate> getTemplates();
FoodWaveTemplate saveOrCreateTemplate(FoodWaveTemplate template);
List<FoodWave> findShoppableFoodwaves();
FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate); FoodWave findFoodwave(Integer foodwaveId);
} }
...@@ -2,7 +2,7 @@ package fi.insomnia.bortal.model; ...@@ -2,7 +2,7 @@ package fi.insomnia.bortal.model;
public enum ProductFlag { public enum ProductFlag {
FOODWAVE_ITEM, // FOODWAVE_ITEM, Äy... Ei kai tämän täällä tarvitse olla....
PREPAID_CREDIT, PREPAID_CREDIT,
CREATE_NEW_PLACE_WHEN_BOUGHT, CREATE_NEW_PLACE_WHEN_BOUGHT,
RESERVE_PLACE_WHEN_BOUGHT, RESERVE_PLACE_WHEN_BOUGHT,
......
...@@ -9,6 +9,7 @@ public enum ShopPermission implements IAppPermission { ...@@ -9,6 +9,7 @@ public enum ShopPermission implements IAppPermission {
SHOP_TO_OTHERS, // ("Shop to other users"), SHOP_TO_OTHERS, // ("Shop to other users"),
SHOP_PRODUCTS, // ("Shop products to self"), SHOP_PRODUCTS, // ("Shop products to self"),
MANAGE_PRODUCTS, // ("Create and modify products"), MANAGE_PRODUCTS, // ("Create and modify products"),
SHOP_FOODWAVE, // Shop for food
; ;
...@@ -17,6 +18,7 @@ public enum ShopPermission implements IAppPermission { ...@@ -17,6 +18,7 @@ public enum ShopPermission implements IAppPermission {
public static final String S_SHOP_TO_OTHERS = "SHOP/SHOP_TO_OTHERS"; public static final String S_SHOP_TO_OTHERS = "SHOP/SHOP_TO_OTHERS";
public static final String S_SHOP_PRODUCTS = "SHOP/SHOP_PRODUCTS"; public static final String S_SHOP_PRODUCTS = "SHOP/SHOP_PRODUCTS";
public static final String S_MANAGE_PRODUCTS = "SHOP/MANAGE_PRODUCTS"; public static final String S_MANAGE_PRODUCTS = "SHOP/MANAGE_PRODUCTS";
public static final String S_SHOP_FOODWAVE = "SHOP/SHOP_FOODWAVE";
private final String fullName; private final String fullName;
private final String key; private final String key;
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{foodWaveView.initTemplateList()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['foodwave.template.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:dataTable var="templ" value="#{foodWaveView.templates}">
<h:column>
<h:outputText value="#{templ.name}" />
</h:column>
<h:column>
<h:link outcome="/foodadmin/editTemplate">
<f:param value="#{templ.id}"/>
</h:link>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{foodWaveView.initTemplateList()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['foodwave.template.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:dataTable var="templ" value="#{foodWaveView.templates}">
<h:column>
<h:outputText value="#{templ.name}" />
</h:column>
<h:column>
<h:link outcome="/foodadmin/editTemplate">
<f:param value="#{templ.id}"/>
</h:link>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['editplace.header']}</h1> <h1>#{i18n['editplace.header']}</h1>
<h1>edit:</h1>
<h:form id="placeEdit"> <h:form id="placeEdit">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['place.name']}:" /> <h:outputLabel value="#{i18n['place.name']}:" />
...@@ -127,7 +125,7 @@ ...@@ -127,7 +125,7 @@
<h:outputLabel value="#{i18n['placegroup.creator']}" /> <h:outputLabel value="#{i18n['placegroup.creator']}" />
<h:link outcome="/useradmin/edit" value="#{placeView.place.group.creator.wholeName}" > <h:link outcome="/useradmin/edit" value="#{placeView.place.group.creator.wholeName}" >
<f:param name="userid" value="#{placeView.place.group.creator.id}"/> <f:param name="userid" value="#{placeView.place.group.creator.user.id}"/>
</h:link> </h:link>
</h:panelGrid> </h:panelGrid>
......
...@@ -330,6 +330,7 @@ permissiondenied.alreadyLoggedIn = You don't have enough rights ...@@ -330,6 +330,7 @@ permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site. permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
place.buyable = Buyable
place.code = Placecode place.code = Placecode
place.commit = Save place.commit = Save
place.description = Description place.description = Description
...@@ -363,6 +364,7 @@ placegroup.details = Details ...@@ -363,6 +364,7 @@ placegroup.details = Details
placegroup.edit = Show placegroup.edit = Show
placegroup.edited = Edited placegroup.edited = Edited
placegroup.name = Name placegroup.name = Name
placegroup.placename = Place
placegroup.places = Places placegroup.places = Places
placegroup.printPdf = Print placecodes placegroup.printPdf = Print placecodes
......
...@@ -317,6 +317,7 @@ permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksi ...@@ -317,6 +317,7 @@ permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksi
permissiondenied.header = P\u00E4\u00E4sy kielletty permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle. permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
place.buyable = Ostettavissa
place.code = Paikkakoodi place.code = Paikkakoodi
place.commit = Tallenna place.commit = Tallenna
place.description = Kuvaus place.description = Kuvaus
...@@ -352,6 +353,7 @@ placegroup.details = Tiedot ...@@ -352,6 +353,7 @@ placegroup.details = Tiedot
placegroup.edit = N\u00E4yt\u00E4 placegroup.edit = N\u00E4yt\u00E4
placegroup.edited = Muokattu placegroup.edited = Muokattu
placegroup.name = Nimi placegroup.name = Nimi
placegroup.placename = Paikka
placegroup.places = Paikat placegroup.places = Paikat
placegroup.printPdf = Tulosta paikkakoodit placegroup.printPdf = Tulosta paikkakoodit
......
package fi.insomnia.bortal.web.cdiview.shop; package fi.insomnia.bortal.web.cdiview.shop;
import java.math.BigDecimal; import java.util.List;
import java.util.Iterator;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BillBeanLocal; import fi.insomnia.bortal.beans.FoodWaveBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helpers.ProductShopItem;
@Named @Named
@ConversationScoped @ConversationScoped
public class FoodShopView extends GenericCDIView { public class FoodShopView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(FoodShopView.class); private static final Logger logger = LoggerFactory.getLogger(FoodShopView.class);
/**
*
*/
private static final long serialVersionUID = 1288114954999406683L;
@EJB
private transient ProductBeanLocal productBean;
@EJB private static final long serialVersionUID = 1288114954999406683L;
private transient BillBeanLocal billbean;
@EJB
private transient EventBeanLocal eventbean;
@Inject @Inject
@SelectedUser @SelectedUser
private EventUser user; private EventUser user;
private boolean payInstant; @EJB
private FoodWaveBeanLocal foodwavebean;
private BigDecimal cash = BigDecimal.ZERO;
private transient ListDataModel<ProductShopItem> shoppingcart;
@Inject
private BillListView billListView;
@Inject
private BillReviewView billReviewView;
public void initBillView()
{
if (requirePermissions(ShopPermission.LIST_USERPRODUCTS) && shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
logger.debug("Initialized billing shoppingcart to {}", shoppingcart);
this.beginConversation();
}
}
public void initShopView() {
if (requirePermissions(ShopPermission.SHOP_TO_OTHERS) && shoppingcart == null) { private List<FoodWave> foodwaves;
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productGTList(productBean.findProductsByFlag(ProductFlag.FOODWAVE_ITEM))); private Integer foodwaveId;
logger.debug("Initialized shoppingcart to {}", shoppingcart); private FoodWave foodwave;
this.beginConversation();
}
} public void initFoodwaves()
public String add(Integer count)
{ {
ProductShopItem item = shoppingcart.getRowData(); if (super.requirePermissions(ShopPermission.SHOP_FOODWAVE))
item.setCount(item.getCount().add(BigDecimal.valueOf(count)));
return null;
}
public BigDecimal getAccountBalance()
{
BigDecimal ret = user.getAccountBalance();
ret = ret.add(getCash());
ret = ret.subtract(getTotalPrice());
logger.info("User accountbalance {}, cash{}, total {}. retBalance {}", new Object[] {
user.getAccountBalance(), getCash(), getTotalPrice(), ret
});
return ret;
}
public BigDecimal getTotalPrice()
{
BigDecimal ret = BigDecimal.ZERO;
for (ProductShopItem cart : shoppingcart)
{ {
ret = ret.add(cart.getPrice()); foodwaves = foodwavebean.findShoppableFoodwaves();
} }
return ret;
} }
public String commitBillCart() { public void initFoodwave()
logger.debug("Committing billCart");
if (!productsInCart()) {
super.addFaceMessage("productshop.noItemsInCart");
return null;
}
Bill bill = new Bill(eventbean.getCurrentEvent(), user);
bill.setOurReference(eventbean.getCurrentEvent().getName());
for (ProductShopItem shopitem : shoppingcart) {
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
bill.addProduct(shopitem.getProduct(), shopitem.getCount());
}
}
billbean.createBill(bill);
addFaceMessage("productshop.billCreated");
cash = BigDecimal.ZERO;
shoppingcart = null;
billReviewView.setBill(bill);
return "showCreatedBill";
}
public String commitShoppingCart()
{ {
EventUser retuser = null; if (super.requirePermissions(ShopPermission.SHOP_FOODWAVE) && foodwave == null)
for (ProductShopItem shopitem : shoppingcart) {
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
retuser = productBean.createAccountEvent(shopitem.getProduct(), shopitem.getCount(), user).getUser();
}
}
if (cash != null && cash.compareTo(BigDecimal.ZERO) != 0)
{ {
Product credProd = productBean.findCreditProduct(); foodwave = foodwavebean.findFoodwave(foodwaveId);
retuser = productBean.createAccountEvent(credProd, cash, user).getUser(); super.beginConversation();
} }
if (user != null)
{
user = retuser;
}
shoppingcart = null;
cash = BigDecimal.ZERO;
return null;
}
public void setUser(EventUser user) {
this.user = user;
} }
public EventUser getUser() {
return user;
}
public void setShoppingcart(ListDataModel<ProductShopItem> shoppingcart) {
this.shoppingcart = shoppingcart;
}
public ListDataModel<ProductShopItem> getShoppingcart() {
return shoppingcart;
}
private boolean productsInCart() {
Iterator<ProductShopItem> nullcheckIter = shoppingcart.iterator();
while (nullcheckIter.hasNext()) {
if (nullcheckIter.next().getCount().compareTo(BigDecimal.ZERO) > 0) {
return true;
}
}
return false;
}
public void setPayInstant(boolean payInstant) {
if (payInstant)
{
getCash();
}
this.payInstant = payInstant;
}
public boolean isPayInstant() {
return payInstant;
}
public BillListView getBillListView() {
return billListView;
}
public void setBillListView(BillListView billListView) {
this.billListView = billListView;
}
public BigDecimal getCash() {
if (payInstant) {
cash = getTotalPrice();
logger.info("Getting instantcash as {}", cash);
}
if (cash == null) {
cash = BigDecimal.ZERO;
}
return cash;
}
public void setCash(BigDecimal cash) {
this.cash = cash;
}
} }
package fi.insomnia.bortal.web.cdiview.shop;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.insomnia.bortal.beans.FoodWaveBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class FoodWaveView extends GenericCDIView {
private static final long serialVersionUID = 7281708393927365603L;
@EJB
private FoodWaveBeanLocal foodwaveBean;
private ListDataModel<FoodWaveTemplate> templates;
private FoodWaveTemplate template;
public void initTemplateList()
{
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS))
{
templates = new ListDataModel<FoodWaveTemplate>(foodwaveBean.getTemplates());
super.beginConversation();
}
}
public void initCreateTemplate()
{
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && getTemplate() == null)
{
setTemplate(new FoodWaveTemplate());
super.beginConversation();
}
}
public String editTemplate()
{
setTemplate(templates.getRowData());
return "/foodadmin/editTemplate";
}
public String saveTemplate()
{
setTemplate(foodwaveBean.saveOrCreateTemplate(getTemplate()));
return null;
}
public FoodWaveTemplate getTemplate() {
return template;
}
public void setTemplate(FoodWaveTemplate template) {
this.template = template;
}
}
...@@ -53,7 +53,7 @@ Huom! Lue komennot läpi ja muokkaa muuttujat sopiviksi! ...@@ -53,7 +53,7 @@ Huom! Lue komennot läpi ja muokkaa muuttujat sopiviksi!
12. Glassfish Default Principal to Role Mapping 12. Glassfish Default Principal to Role Mapping
HUOM! 403 asioista, ellei tätä ole ruksittu:
403 asioista, ellei tätä ole ruksittu:
Configurations -> server-config -> Security -> Default Principal To Role Mapping -> Enabled Configurations -> server-config -> Security -> Default Principal To Role Mapping -> Enabled
13. Käynnistä glassfish uudelleen että kaikki asetukset tulevat voimaan...
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!